前边有转发过来自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.rbfiles/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 开发一个专业的软件包管理工具的更多相关文章

  1. iOS开发一个制作Live Photo的工具

    代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...

  2. RPM是RedHat Package Manager(RedHat软件包管理工具)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  3. 【one day one linux】linux下的软件包管理工具

    Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat ...

  4. Mac OSX上的软件包管理工具,brew 即 Homebrew

    brew 即 Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便. brew类似ubuntu系统下的apt-get的功能. 安装 ...

  5. Mac Pro 安装 Homebrew 软件包管理工具

    Linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案,Red hat有 yum,Ubuntu有 apt-get. Mac os 中没有类似的东东,不过有第三方库支持 ...

  6. Mac安装软件包管理工具Homebrew

    PS:最近开始学习groovy,打算去官网下载SDK Bundle,可是官网半天加载不出来,而且莫名其妙就是下载不下来,Folx一直提示 "无效的HTTP相应:禁止",可能是插件和 ...

  7. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  8. 利用chocolatey软件包管理工具安装yarn,比npm更快更稳定

    Chocolatey 是一个 Windows 专用的软件包管理工具. Yarn 对你的代码来说是一个包管理器, 你可以通过它使用全世界开发者的代码, 或者分享自己的代码.Yarn 做这些快捷.安全.可 ...

  9. pip软件包管理工具介绍及基本使用

    pip软件包管理工具介绍及基本使用 一分耕耘,一分收获,要收获得好,必须耕耘得好.-- 徐特立 一.pip软件包管理工具介绍: 定义:pip是Python包管理工具 作用:对Python包的查找.下载 ...

随机推荐

  1. S02_CH12_ AXI_Lite 总线详解

    S02_CH12_ AXI_Lite 总线详解 12.1前言 ZYNQ拥有ARM+FPGA这个神奇的架构,那么ARM和FPGA究竟是如何进行通信的呢?本章通过剖析AXI总线源码,来一探其中的秘密. 1 ...

  2. ubuntu 安装Jenkins

    一.介绍 Jenkins是一款开源自动化服务器,旨在自动化连续集成和交付软件所涉及的重复技术任务. Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序A ...

  3. SPOJ Qtree系列

    Qtree1 将边权变为这条边连接的两个点中深度更深的点的点权,这样就可以变为带修改链上最大点权.直接树链剖分即可. 下面是一份C语言代码 #include<stdio.h> #inclu ...

  4. git 学习笔记--Feature分支

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  5. docker stack 部署 mssql

    =============================================== 2019/12/8_第1次修改                       ccb_warlock == ...

  6. linux安装好的mysql rpm -qa |grep mysql不见

    输入: rpm -qa|grep -i mysql

  7. python-pymysql防止sql注入攻击介绍

    目录 pymysql sql 注入攻击 调用存储过程 pymysql pymysql 是一个第三方模块,帮我们封装了 建立表/用户认证/sql的执行/结果的获取 import pymysql # 步骤 ...

  8. 关于定义变量名为"name"的坑!!!

    昨天下午没有什么工作可做,闲来无事就上博客园看看了,有个问题让我一直很纳闷. 直接上代码吧: 再用表达式创建函数时遇到的问题,这里的代码按照正常逻辑只有那个在变量定义后面的函数执行打印的值才是&quo ...

  9. iOS OpenCV资料收集

    OpenCV iOS Title: OpenCV iOS Hello Compatibility: > OpenCV 2.4.3 Author: Charu Hans You will lear ...

  10. 介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现

    内表操作是ABAP开发人员几乎在每个ABAP程序里都会遇到的. 看一个例子:有两个行结构不一样的内表,每个内表的行结构有三列,除了name这一列名字一致外,其他两列的名称都不同,下图用红色和蓝色标注出 ...