fpm打包工具
安装过程
1 2 3 4
| yum install -y rpm-build ruby-devel virtualenv gcc pip install virtualenv-tools gem install -V fpm fpm -h
|
常用参数
- -a: 架构名称,值可以为
x86_64
- –config-files: 指定配置文件,可以指定多个。需要注意的是并不是所有文件都适合以配置文件的方式放入包中,不要将动态的文件放入配置文件中
- -d ‘名称’: 指定程序依赖,多个依赖的话就写多个-d
- –debug:打印编译时的详细日志
- -C: 指定在打包前需要进入的目录(打包时的相对路径),相当于把那个目录打包
- -n: 包名
- -s: 源的类型,值可以为dir,rpm,gem,python,virtualenv,empty,tar,deb,cpan,npm,osxpkg,pear,pkgin,zip
- -t: 目标类型,值可以为rpm,deb,solaris,puppet,dir,osxpkg,p5p,puppet,sh,solaris,tar,zip
- -epoch 0,比
-v
更优先级的一个版本号
- -v: 版本号,例如
1.0.0
- –iteration 1: 比
-v
更低优先级的一个版本号
- –rpm-dist el7: 定义系统的迭代版本,
el6
表示centos6
,el7
表示centos7
,会生成在包名中,例如: example-0.1.0-el7.x86_64.rpm
- –before-install, –pre-install 名称.sh: 安装前执行的脚本
- –after-install, –post-install 名称.sh: 安装后执行的脚本
- –before-remove, –pre-uninstall 名称.sh: 卸载前执行的操作
- –after-remove, –post-uninstall 名称.sh: 卸载后执行的操作
- -p, –prefix=目录: 指定软件之后要安装的路径
- –description ‘这里写描述’
- –url: 软件的网官网
- –license ‘2-clause BSD-like license’:
- –vendor: 供应商名称
- –verbose: 打印详细安装过程
- -m, –maintainer: 维护者
- –rpm-sumarry: 简介
- –description: 详情
usr=/
,以这种方式,可以直接将当前目录下的目录在打包后放到指定的目录,例如,这里将工程目录下的uer
目录放到了打包后的根目录,这样usr
下的所有文件或文件夹都会被递归地打入包中。
以Virtualenv的方式打包Python包
相比与-s python
的方式,将源设置为virtualenv(即-s virtualenv)
的好处是不会破坏系统本身的python环境,不会与已经安装的包或者其他程序依赖的包产生冲突。举例,有一个需要打包的python包源码目录结构为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| . ├── Pipfile ├── Pipfile.lock ├── README.md ├── etc │ ├── logrotate.d │ │ └── my-agent │ ├── rc.d │ │ └── init.d │ │ └── my-agent │ └── my-agent │ └── default.conf ├── usr │ └── lib │ └── my-agent │ └── agent.state ├── scripts │ ├── my-agent-after-install.sh │ └── my-agent-before-remove.sh ├── setup.py └── src ├── xxx.py └── __init__.py
|
然后使用这样的命令进行打包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| fpm \ --debug \ -s virtualenv \ # 指定以virtualenv的形式进行打包 -t rpm \ -n my-agent \ -a 'x86_64' \ -v 0.1.0 \ --license '2-clause BSD-like license' \ --vendor 'Hao inc.' \ --category 'System Environment/Daemons' \ -m 'haofly' \ --config-files etc/my-agent/default.conf \ --config-files etc/logrotate.d/my-agent \ --config-files etc/rc.d/init.d/my-agent \ --after-install ./scripts/my-agent-after-install.sh \ --before-remove ./scripts/my-agent-before-uninstall.sh \ --url 'https://haofly.net' \ --rpm-summary 'rpm summary.' \ --description 'package description' \ --prefix /usr/share/my-agent \ # 指定安装目录,如果不指定会默认安装到/usr/share/python/下面 .
|
其他相关命令
1 2
| rpm localinstall 包名 # 在新的机器上安装该软件 rpm -qpl 包名 # 查看包的信息
|
打包nginx例子
这是我打包tengine的命令fpm -s dir -t rpm -n tengine -v 2.1.2 -C /etc/nginx -d 'pcre-devel' -d 'openssl' -d 'openssl-devel' --before-install /share/before-install.sh --after-install /share/after-install.sh --before-remove /share/before-remove.sh --after-remove /share/after-remove.sh --description 'Haofly first fpm package' --url 'http://haofly.net' --prefix=/etc/nginx