集成omnibus-ctl 开发一个专业的软件包管理工具
前边有转发过来自chef 团队的一篇omnibus-ctl 介绍文章,以下尝试进行项目试用
就是简单的集成,没有多少复杂的操作
环境准备
- ruby
ruby 使用2.6.3使用rbenv安装,可以参考rbenv mac&&linux 安装简单说明 - bundle
bundler 的安装可以直接使用gem,其他途径存在版本的问题,安装方法
gem install bundler
- 可选配置gem source
gem source -r https://rubygems.org/
gem source -a https://gems.ruby-china.com/
- 安装omnibus
脚手架模式
gem install omnibus
简单项目集成omnibus-ctl
项目是一个简单的模拟gitlab 的软件包,没有多少操作
- 初始化项目
omnibus new gitlab
- 项目结构
├── Berksfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── config
│ ├── projects
│ │ └── gitlab.rb
│ └── software
│ ├── gitlab-ctl.rb
│ └── preparation.rb
├── files
│ └── gitlab-ctl-commands
│ └── config.rb
├── omnibus.rb
└── package-scripts
└── gitlab
├── postinst
├── postrm
├── preinst
└── prerm
- 说明
以上config/software/gitlab-ctl.rb,files/gitlab-ctl-commands是添加的文件 - 代码说明
Gemfile因为需要集成omnibus-ctl所以需要引用gem 包,我修改了source 为国内的
source 'https://gems.ruby-china.com/'
# Install omnibus
gem 'omnibus', '~> 6.0'
# gem 'omnibus-ctl', '~> 0.6.0'
gem 'omnibus-software', git: 'https://github.com/chef/omnibus-software.git'
# Use Chef's software definitions. It is recommended that you write your own
# software definitions, but you can clone/fork Chef's to get you started.
# gem 'omnibus-software', github: 'chef/omnibus-software'
# This development group is installed by default when you run `bundle install`,
# but if you are using Omnibus in a CI-based infrastructure, you do not need
# the Test Kitchen-based build lab. You can skip these unnecessary dependencies
# by running `bundle install --without development` to speed up build times.
group :development do
# Use Berkshelf for resolving cookbook dependencies
gem 'berkshelf'
# Use Test Kitchen with Vagrant for converging the build environment
gem 'test-kitchen'
gem 'kitchen-vagrant'
end
config/project/gitlab.rb 项目包信息描述,包含依赖以及项目信息
#
# Copyright 2019 YOUR NAME
#
# All Rights Reserved.
#
name "gitlab"
maintainer "rongfengliang"
homepage "https://github.com/rongfengliang"
# Defaults to C:/my on Windows
# and /opt/my on all other platforms
install_dir "#{default_root}/#{name}"
build_version Omnibus::BuildVersion.semver
build_iteration 1
# Creates required build directories
dependency "preparation"
dependency "gitlab-ctl" # 我们需要依赖的soft 定义
# my dependencies/components
# dependency "somedep"
exclude "**/.git"
exclude "**/bundler/git"
config/software/gitlab-ctl.rb 我们的包软件定义:
这个实际上就是对omnibus-ctl 的一个包装
name "gitlab-ctl"
dependency "omnibus-ctl"
source :path => File.expand_path("files/gitlab-ctl-commands", RbConfig::CONFIG['project_root'])
build do
block do
open("#{install_dir}/embedded/bin/gitlab-ctl", "w") do |file|
file.print <<-EOH
#!/bin/bash
# Ruby environment if gitlab-ctl is called from a Ruby script.
for ruby_env_var in RUBYOPT \\
BUNDLE_BIN_PATH \\
BUNDLE_GEMFILE \\
GEM_PATH \\
GEM_HOME
do
unset $ruby_env_var
done
#{install_dir}/embedded/bin/omnibus-ctl gitlab #{install_dir}/embedded/service/omnibus-ctl $@
EOH
end
end
command "chmod 755 #{install_dir}/embedded/bin/gitlab-ctl"
# additional omnibus-ctl commands
sync "#{project_dir}/", "#{install_dir}/embedded/service/omnibus-ctl/"
end
files/gitlab-ctl-commands 自定义命令:
add_command 'config', 'reconfig for gitlab server', 1 do |cmd_name|
puts 'run config'
reconfigure
end
运行&&测试
- 初始化依赖
bundle install --binstubs
- 构建
sudo bin/omnibus build gitlab
- 效果
tree pkg/
pkg/
├── gitlab-0.0.0+20190701053352-1.el7.x86_64.rpm
├── gitlab-0.0.0+20190701053352-1.el7.x86_64.rpm.metadata.json
├── gitlab-0.0.0+20190701062746-1.el7.x86_64.rpm
├── gitlab-0.0.0+20190701062746-1.el7.x86_64.rpm.metadata.json
└── version-manifest.json
- 安装软件包
yum install gitlab-0.0.0+20190701062746-1.el7.x86_64.rpm
已加载插件:fastestmirror
正在检查 gitlab-0.0.0+20190701062746-1.el7.x86_64.rpm: gitlab-0.0.0+20190701062746-1.el7.x86_64
gitlab-0.0.0+20190701062746-1.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 gitlab.x86_64.0.0.0.0+20190701062746-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
===============================================================================================================
Package 架构 版本 源 大小
===============================================================================================================
正在安装:
gitlab x86_64 0.0.0+20190701062746-1.el7 /gitlab-0.0.0+20190701062746-1.el7.x86_64 46 M
事务概要
========================================
- 生成的软件包目录结构
tree -L 3 /opt/gitlab/
/opt/gitlab/
├── bin
├── embedded
│ ├── bin
│ │ ├── bundle
│ │ ├── bundler
│ │ ├── c_rehash
│ │ ├── erb
│ │ ├── gem
│ │ ├── gitlab-ctl
│ │ ├── irb
│ │ ├── libtool
│ │ ├── libtoolize
│ │ ├── makedepend
│ │ ├── omnibus-ctl
│ │ ├── openssl
│ │ ├── pkg-config
│ │ ├── rake
│ │ ├── rdoc
│ │ ├── ri
│ │ ├── ruby
│ │ └── update_rubygems
│ ├── include
│ │ ├── ffi.h
│ │ ├── ffitarget.h
│ │ ├── libltdl
│ │ ├── ltdl.h
│ │ ├── openssl
│ │ ├── ruby-2.6.0
│ │ ├── X11
│ │ ├── yaml.h
│ │ ├── zconf.h
│ │ └── zlib.h
│ ├── lib
│ │ ├── config_guess
│ │ ├── engines
│ │ ├── libcrypto.a
│ │ ├── libcrypto.so -> libcrypto.so.1.0.0
│ │ ├── libcrypto.so.1.0.0
│ │ ├── libffi-3.2.1
│ │ ├── libffi.a
│ │ ├── libffi.la
│ │ ├── libffi.so -> libffi.so.6.0.4
│ │ ├── libffi.so.6 -> libffi.so.6.0.4
│ │ ├── libffi.so.6.0.4
│ │ ├── libltdl.a
│ │ ├── libltdl.la
│ │ ├── libltdl.so -> libltdl.so.7.3.0
│ │ ├── libltdl.so.7 -> libltdl.so.7.3.0
│ │ ├── libltdl.so.7.3.0
│ │ ├── libruby.so -> libruby.so.2.6.3
│ │ ├── libruby.so.2.6 -> libruby.so.2.6.3
│ │ ├── libruby.so.2.6.3
│ │ ├── libssl.a
│ │ ├── libssl.so -> libssl.so.1.0.0
│ │ ├── libssl.so.1.0.0
│ │ ├── libyaml-0.so.2 -> libyaml-0.so.2.0.5
│ │ ├── libyaml-0.so.2.0.5
│ │ ├── libyaml.a
│ │ ├── libyaml.la
│ │ ├── libyaml.so -> libyaml-0.so.2.0.5
│ │ ├── libz.a
│ │ ├── libz.so -> libz.so.1.2.11
│ │ ├── libz.so.1 -> libz.so.1.2.11
│ │ ├── libz.so.1.2.11
│ │ ├── pkgconfig
│ │ └── ruby
│ ├── service
│ │ └── omnibus-ctl
│ ├── share
│ │ ├── aclocal
│ │ ├── doc
│ │ ├── info
│ │ ├── libtool
│ │ ├── man
│ │ ├── pkgconfig
│ │ └── util-macros
│ └── ssl
│ ├── cert.pem -> certs/cacert.pem
│ ├── certs
│ ├── misc
│ └── openssl.cnf
├── LICENSE
├── LICENSES
│ ├── bundler-LICENSE.md
│ ├── cacerts-index.815ca599c9df.txt
│ ├── config_guess-config.guess
│ ├── config_guess-config.sub
│ ├── libffi-LICENSE
│ ├── libtool-COPYING
│ ├── libyaml-LICENSE
│ ├── makedepend-COPYING
│ ├── omnibus-ctl-LICENSE
│ ├── openssl-LICENSE
│ ├── pkg-config-lite-COPYING
│ ├── ruby-BSDL
│ ├── ruby-COPYING
│ ├── rubygems-LICENSE.txt
│ ├── ruby-LEGAL
│ ├── util-macros-COPYING
│ ├── xproto-COPYING
│ └── zlib-README
├── version-manifest.json
└── version-manifest.txt
- 使用gitlab-ctl
因为打包制作的比较简单,配置path 路径我们就可以直接使用gitlab-ctl了
export PATH=$PATH:/opt/gitlab/embedded
使用命令:
gitlab-ctl
I don't know that command.
/opt/gitlab/embedded/bin/omnibus-ctl: command (subcommand)
config
reconfig for gitlab server
General Commands:
cleanse
Delete *all* my data, and start from scratch.
help
Print this help message.
reconfigure
Reconfigure the application.
show-config
Show the configuration that would be generated by reconfigure.
uninstall
Kill all processes and uninstall the process supervisor (data will be preserved).
Service Management Commands:
graceful-kill
Attempt a graceful stop, then SIGKILL the entire process group.
hup
Send the services a HUP.
int
Send the services an INT.
kill
Send the services a KILL.
once
Start the services if they are down. Do not restart them if they stop.
restart
Stop the services if they are running, then start them again.
service-list
List all the services (enabled services appear with a *.)
start
Start services if they are down, and restart them if they stop.
status
Show the status of all the services.
stop
Stop the services, and do not restart them.
tail
Watch the service logs of all enabled services.
term
Send the services a TERM.
- 说明
可以看出我们这样就搞出来了一个和gitlab安装包类似的ctl 了,实际上gitlab 安装包也是集成的omnibus-ctl,只是里面功能更复杂而已。
通过项目omnibus-gitlab 我们可以了解到更多关于omnibus-ctl的用法
参考资料
https://github.com/gitlabhq/omnibus-gitlab
https://blog.chef.io/2015/05/26/omnibus-ctl-what-is-it-and-what-can-it-do-for-you/
https://github.com/rongfengliang/omnibus-ctl-demo
集成omnibus-ctl 开发一个专业的软件包管理工具的更多相关文章
- iOS开发一个制作Live Photo的工具
代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...
- RPM是RedHat Package Manager(RedHat软件包管理工具)
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...
- 【one day one linux】linux下的软件包管理工具
Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat ...
- Mac OSX上的软件包管理工具,brew 即 Homebrew
brew 即 Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便. brew类似ubuntu系统下的apt-get的功能. 安装 ...
- Mac Pro 安装 Homebrew 软件包管理工具
Linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案,Red hat有 yum,Ubuntu有 apt-get. Mac os 中没有类似的东东,不过有第三方库支持 ...
- Mac安装软件包管理工具Homebrew
PS:最近开始学习groovy,打算去官网下载SDK Bundle,可是官网半天加载不出来,而且莫名其妙就是下载不下来,Folx一直提示 "无效的HTTP相应:禁止",可能是插件和 ...
- 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...
- 利用chocolatey软件包管理工具安装yarn,比npm更快更稳定
Chocolatey 是一个 Windows 专用的软件包管理工具. Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码.Yarn 做这些快捷.安全.可 ...
- pip软件包管理工具介绍及基本使用
pip软件包管理工具介绍及基本使用 一分耕耘,一分收获,要收获得好,必须耕耘得好.-- 徐特立 一.pip软件包管理工具介绍: 定义:pip是Python包管理工具 作用:对Python包的查找.下载 ...
随机推荐
- emmet 配置文件
snippets.json(添加自己的或更新现有的片段) preferences.json(更改某些Emmet过滤器和操作的行为) SyntaxProfiles.json(定义生成的HTML / XM ...
- springcolud 的学习(二).SpringCloud微服务框架
为什么选择SpringCloud因为SpringCloud出现,对微服务技术提供了非常大的帮助,因为SpringCloud 提供了一套完整的微服务解决方案,不像其他框架只是解决了微服务中某个问题. 服 ...
- left join 左边有数据,右边无数据
参考了链接: https://blog.csdn.net/chenjianandiyi/article/details/52402011 主要是and和where的区别: 原Sql: Con ...
- 2019 竞技世界java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.竞技世界等公司offer,岗位是Java后端开发,最终选择去了竞技世界. 面试了很多家公司,感觉大部分公司考察的点 ...
- 2019 快乐阳光java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.快乐阳光等公司offer,岗位是Java后端开发,最终选择去了快乐阳光. 面试了很多家公司,感觉大部分公司考察的点 ...
- k8s--yml文件
- SAP错误消息调试之七种武器:让所有的错误消息都能被定位
目录 长生剑 - SAPGUI Where Used List 碧玉刀 - ABAP调试器观察点 霸王枪 - ABAP调试器动态断点 多情环 - ABAP代码静态扫描 孔雀翎 - SAT 离别钩 - ...
- Python学习日记(三十) Socket模块使用
Socket(套接字) 套接字是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网 ...
- JSP内置对象(下)
session的生命周期 创建 活动 销毁 application对象 Page对象
- glfw之hello world
mac上用cocoa做imshow,资料似乎不好找,即便找到也需要和OC混编,而不是纯C.这不够纯粹.考虑用opengl做通用的.跨平台的imshow.先入门一下opengl,从glfw官方例子入手. ...