fpm定制化RPM包之nginx rpm包的制作
fpm定制化RPM包之nginx rpm包的制作
1.安装ruby模块
# yum -y install ruby rubygems ruby-devel
2.添加阿里云的Rubygems仓库,国外资源会影响下载速度
gem sources -a http://mirrors.aliyun.com/rubygems/ http://mirrors.aliyun.com/rubygems/ added to sources
移除原生的ruby仓库
gem sources --remove http://rubygems.org/
3.安装fpm
centos6: gem install json -v 1.8.3 gem install fpm -v 1.3.3
centos7直接使用如下命令:
[root@slave02 ~]# gem install fpmFetching: cabin-0.9.0.gem (100%) Successfully installed cabin-0.9.0 Fetching: backports-3.8.0.gem (100%) Successfully installed backports-3.8.0 Fetching: arr-pm-0.0.10.gem (100%) Successfully installed arr-pm-0.0.10 Fetching: clamp-1.0.1.gem (100%) Successfully installed clamp-1.0.1 Fetching: ffi-1.9.18.gem (100%) Building native extensions. This could take a while... Successfully installed ffi-1.9.18 Fetching: childprocess-0.7.0.gem (100%) Successfully installed childprocess-0.7.0 Fetching: archive-tar-minitar-0.5.2.gem (100%) Successfully installed archive-tar-minitar-0.5.2 Fetching: io-like-0.3.0.gem (100%) Successfully installed io-like-0.3.0 Fetching: ruby-xz-0.2.3.gem (100%) Successfully installed ruby-xz-0.2.3 Fetching: stud-0.0.22.gem (100%) Successfully installed stud-0.0.22 Fetching: mustache-0.99.8.gem (100%) Successfully installed mustache-0.99.8 Fetching: insist-1.0.0.gem (100%) Successfully installed insist-1.0.0 Fetching: dotenv-2.2.1.gem (100%) Successfully installed dotenv-2.2.1 Fetching: pleaserun-0.0.29.gem (100%) Successfully installed pleaserun-0.0.29 Fetching: fpm-1.8.1.gem (100%) Successfully installed fpm-1.8.1 Parsing documentation for cabin-0.9.0 Installing ri documentation for cabin-0.9.0 Parsing documentation for backports-3.8.0 Installing ri documentation for backports-3.8.0 Parsing documentation for arr-pm-0.0.10 Installing ri documentation for arr-pm-0.0.10 Parsing documentation for clamp-1.0.1 Installing ri documentation for clamp-1.0.1 Parsing documentation for ffi-1.9.18 Installing ri documentation for ffi-1.9.18 Parsing documentation for childprocess-0.7.0 Installing ri documentation for childprocess-0.7.0 Parsing documentation for archive-tar-minitar-0.5.2 Installing ri documentation for archive-tar-minitar-0.5.2 Parsing documentation for io-like-0.3.0 Installing ri documentation for io-like-0.3.0 Parsing documentation for ruby-xz-0.2.3 Installing ri documentation for ruby-xz-0.2.3 Parsing documentation for stud-0.0.22 Installing ri documentation for stud-0.0.22 Parsing documentation for mustache-0.99.8 Installing ri documentation for mustache-0.99.8 Parsing documentation for insist-1.0.0 Installing ri documentation for insist-1.0.0 Parsing documentation for dotenv-2.2.1 Installing ri documentation for dotenv-2.2.1 Parsing documentation for pleaserun-0.0.29 Installing ri documentation for pleaserun-0.0.29 Parsing documentation for fpm-1.8.1 Installing ri documentation for fpm-1.8.1 15 gems installed
4.在打包机器上先安装一次nginx
yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre pcre-devel glib glib-devel useradd nginx -M -s /sbin/nologin tar xf nginx-1.12.0.tar.gzcd nginx-1.12.0./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --with-pcremake && make install
5.编写脚本
软件包卸载前、卸载后的脚本,可以根据情况是否编写,不编写问题也不大。但是rpm安装后的脚本是必须的。
mkdir /data/scripts/ -p cd /data/scripts/
# 编写一个rpm安装后需要执行的脚本
vim nginx_post_install.sh
#!/bin/bashuseradd nginx -M -s /sbin/nologin chmod +x /etc/init.d/nginx chkconfig --add nginx echo 'PATH=/user/local/nginx/sbin:$PATH'>> /etc/profile.d/nginx.sh
# 卸载nginx后需要执行的脚本
# cat after_remove.sh #!/bin/bash rm -rf /usr/local/nginx rm -f /etc/rc.d/init.d/nginx
准备个启动脚本,如下:
vim /etc/init.d/nginx#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/local/nginx/conf/nginx.conf # pidfile: /usr/local/nginx/logs/nginx.pid# Source function library. . /etc/rc.d/init.d/functions# Source networking configuration. . /etc/sysconfig/network# Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxmake_dirs() {# make required directoriesuser=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`if [ -z "`grep $user /etc/passwd`" ]; thenuseradd -M -s /bin/nologin $userfioptions=`$nginx -V 2>&1 | grep 'configure arguments:'`for opt in $options; doif [ `echo $opt | grep '.*-temp-path'` ]; thenvalue=`echo $opt | cut -d "=" -f 2`if [ ! -d "$value" ]; then# echo "creating" $valuemkdir -p $value && chown -R $user $valuefifidone }start() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6make_dirsecho -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval }stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval }restart() {configtest || return $?stopsleep 1start }reload() {configtest || return $?echo -n $"Reloading $prog: "$nginx -s reloadRETVAL=$?echo }force_reload() {restart }configtest() {$nginx -t -c $NGINX_CONF_FILE }rh_status() {status $prog }rh_status_q() {rh_status >/dev/null 2>&1 }case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2 esac
6. 打包(打包的过程其实就是将我们编译安装好的文件、目录打包,/data/scripts/是本次的打包工作目录)
# 将nginx启动脚本和注意的配置及启动文件拷贝到打包目录
mkdir -p /data/scripts/etc/rc.d/init.d cp /etc/init.d/nginx /data/scripts/etc/rc.d/init.d/mkdir -p /data/scripts/usr/local/nginx/ cp -r /usr/local/nginx/ /data/scripts/usr/local/nginx/
# /data/scripts目录结构
[root@master scripts]# tree
. ├── after_remove.sh ├── etc │ └── rc.d │ └── init.d │ └── nginx ├── nginx-1.12.0-1.el6.x86_64.rpm ├── nginx_post_install.sh └── usr └── local └── nginx ├── client_body_temp ├── conf │ ├── fastcgi.conf │ ├── fastcgi.conf.default │ ├── fastcgi_params │ ├── fastcgi_params.default │ ├── koi-utf │ ├── koi-win │ ├── mime.types │ ├── mime.types.default │ ├── nginx.conf │ ├── nginx.conf.default │ ├── scgi_params │ ├── scgi_params.default │ ├── uwsgi_params │ ├── uwsgi_params.default │ └── win-utf ├── etc │ └── rc.d │ └── init.d │ └── nginx ├── fastcgi_temp ├── html │ ├── 50x.html │ └── index.html ├── logs │ ├── access.log │ ├── error.log │ └── nginx.pid ├── proxy_temp ├── sbin │ └── nginx ├── scgi_temp └── uwsgi_temp
# 打包,即将准备好的文件打包成rpm
# fpm -f -s dir -t rpm -n nginx --epoch 0 -v 1.12.0 --iteration 1.el6 -C /data/scripts/ -d 'pcre-devel,openssl-devel,autoconf,glib-devel' --post-uninstall /data/scripts/nginx_post_install.sh --post-uninstall /data/scripts/after_remove.sh --workdir /data/scripts/ etc usr
Created package {:path=>"nginx-1.12.0-1.el6.x86_64.rpm"}
报错:
Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解决:
yum install rpm-build -y
# 注意:我们可以操作前修改下主机名,这样打包出来的Build Host就会跟着改变。
7. 安装rpm包
yum命令安装rpm包
yum -y localinstall nginx-1.12.0-1.x86_64.rpm
这个命令会自动先安装rpm包的依赖,然后再安装rpm包。
FPM常用参数:-f :强制覆盖[覆盖同名rpm包] -n :指定的rpm包名 -p :指定的rpm包文件放置位置 -v :指定的rpm包版本 -d :指定依赖的软件 ( [-d 'name'] or [-d 'name > version'] 例子: -d 'libstdc++ >= 4.4.3') -a :指定系统架构,如果是noarch则为'-a all' 或者 '-a native' [x86_64] 当软件不区分64位或32位的时候可以 noarch -s :指定INPUT的数据类型 (["-s dir"] 省略数据类型) -m :指定打包人员[Packager] ([ -m 'user']) -C :指定打包的相对路径,类似于buildroot. 譬如-C /tmp/apr/ 而打包机器的数据包路径是/tmp/apr/{opt,usr,etc} 那安装这个rpm包后,在本地的数据就是/opt/,/usr/,/etc/ -t :指定需要制作成什么包,可选项有(deb,rpm,solaris,etc)支持的源类型::"dir" "rpm" "gem" "python" "empty" "tar" "deb" "cpan" "npm" "osxpkg" "pear" "pkgin" "virtualenv" "zip"支持的目标类型:"rpm" "deb" "solaris" "puppet" "dir" "osxpkg" "p5p" "puppet" "sh" "solaris" "tar" "zip" --description :软件包描述 --conflicts :指定冲突软件 --url :指定站点[惯例都是添加软件的官网 例如: --url "http://www.cnblog.com/roach57" ] --verbose :安装过程详细打印 --after-install :包安装之后执行的脚本 也可写作 --post-install FILE --before-install :包安装之前执行的脚本 --after-remove :包卸载之后执行的脚本 --before-remove :包卸载之前执行的脚本 --after-upgrade :包更新之后执行的脚本[仅支持 deb 和 rpm 这两种包] --before-upgrade :包更新之前执行的脚本 --iteration :发布序号[就是rpm包里面的release] --epoch :纪元 [不知道干嘛用的] --no-rpm-sign :不使用rpm签名 Signature --license :证书许可 [可选项有 'BSD(开源软件)' 'GPLv2(自由软件)' 'MIT' 'Public Domain(公共域)' 'Distributable(贡献)' 'commercial(商业)' 'Share(共享)等',一般的开发都写'BSD'或'GPL'] --vendor :供应商名称 [ --vendor 'roach57@163.com'] --no-depends :代表没有任何依赖包,和-d是对立的,不能共用 --config-files :指定配置文件,可以指定目录[递归] --directories :指定包目录 --category :软件所属的类别[这是个什么软件]下面有个对应的表格:[参考这个文件 /usr/share/doc/rpm-x.x.x/GROUPS ]Amusements/Games [娱乐/游戏]Amusements/Graphics [娱乐/图形]Applications/Archiving [应用/文档]Applications/Communications [应用/通讯]Applications/Databases [应用/数据库]Applications/Editors [应用/编辑器]Applications/Emulators [应用/仿真器]Applications/Engineering [应用/工程]Applications/File [应用/文件]Applications/Internet [应用/因特网]Applications/Multimedia [应用/多媒体]Applications/Productivity [应用/产品]Applications/Publishing [应用/印刷]Applications/System [应用/系统]Applications/Text [应用/文本]Development/Debuggers [开发/调试器]Development/Languages [开发/语言]Development/Libraries [开发/函数库]Development/System [开发/系统]Development/Tools [开发/工具]Documentation [文档]System Environment/Base [系统环境/基础]System Environment/Daemons [系统环境/守护]System Environment/Kernel [系统环境/内核]System Environment/Libraries [系统环境/函数库]System Environment/Shells [系统环境/接口]User Interface/Desktops [用户界面/桌面]User Interface/X [用户界面/X窗口]User Interface/X Hardware Support [用户界面/X硬件支持]RPM包的组成格式:roach-1.0.1-57.el6.x86_64.rpm| | | | | 软件名称| | | |版本号 | | |发布号 | |硬件平台 |扩展名例子备注:roach :软件名称1.0.1 :软件版本号57.el6 :发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化,el6指的是rhel6系统中发布x86_64 :指64位的PC架构,另外还有'i386' 'i686' 等32位的PC架构,noarch是指不区分硬件架构rpm :扩展名
转载于:https://www.cnblogs.com/reblue520/p/7017889.html
fpm定制化RPM包之nginx rpm包的制作相关推荐
- 自动化部署必备技能—定制化RPM包[转载]
回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动 ...
- Oceanus:美团HTTP流量定制化路由的实践
背景简述 Oceanus是美团基础架构部研发的统一HTTP服务治理框架,基于Nginx和ngx_lua扩展,主要提供服务注册与发现.动态负载均衡.可视化管理.定制化路由.安全反扒.session ID ...
- Oceanus:美团点评HTTP流量定制化路由的实践
总第278篇 2018年 第70篇 背景 Oceanus是美团基础架构部研发的统一HTTP服务治理框架,基于Nginx和ngx_lua扩展,主要提供服务注册与发现.动态负载均衡.可视化管理.定制化路由 ...
- 实战演练:MySQL RPM包定制化制作全过程
墨墨导读:本文详细介绍一键式安装部署,定制化制作MySQL RPM包的过程,希望可以帮助到读者朋友 . 在部署MySQL的时候,经常用RPM包简易安装.非常快,也非常有效. rpm的全称是Redhat ...
- linux slf4j.rpm,Centos下安装nginx rpm包
1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...
- linux nginx rpm 安装配置,Centos下安装nginx rpm包
1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...
- Linux系统中软件的“四”种安装原理详解:源码包安装、RPM二进制安装、YUM在线安装、脚本安装包...
一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可以自由选择所需的功能: 软件是编译安装,所以更加适合自己的系统,更加稳定.效率更高: 卸载方便: 缺点: ...
- Linux-什么是二进制包,源码包,RPM包,软件仓库
博文说明[前言]: 本文将通过个人口吻介绍什么是二进制包,RPM包,源码RPM包(SRPM包),源码包,以及RPM常用命令,源码rpm的安装(*.src.rpm),源码包的安装步骤知识(./confi ...
- 将源码包打包成RPM包
RPM 1,描述信息 2,对源码安装后的数据压缩rpm 应用的场景 打包流程 安装rpm-build软件 #yum -y install rpm-build #rpmbuild -ba nginx.s ...
最新文章
- 天冷了,大家如果有往年的不穿的衣服别扔,寄给需要的人好吗?
- Pylearn2之YAML
- linux缓存文件地址,如何遍历linux内核中的文件地址空间的页面缓存树(基数树)
- 小学数学加减法测试软件,小学生数学加减测试题
- Flink架构及工作原理
- dex运行linux,随着三星最新的DeX更新,更多的手机可以使用Linux
- jquery ajax 数据传输
- python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图
- 把dataset作为一个xml文件传给客户端
- php split to array,Split php varibale with JS into array
- java 中的通讯之HTTP协议
- Apache Flink ML 2.0.0 发布公告
- VB.NET 中图形旋转任意角度 [ZT]
- 史上最全天气数据接口包括环境、气象、预警、水文、预报、实况、格点,落区、等值面、雷达、云图、空气质量实况及预报、气候统计、雷电分布、灾害性天气、短临预报、航空气象、农业气象、旅游气象、生活指数等
- 大数据仓库之拉链表讲解与举例说明【基础部分】
- LaTeX中参考文献的整理
- 物联网通信篇 NBIOT_01
- 有人(甚至国家)兜底就安全了吗?瑞士央行风暴小议。
- xml遍历文件夹vector_怎么统计指定文件夹下含有.xml格式的文件数目
- HDLBits刷题Day20(More Circuits)
热门文章
- oracle的dual表
- innodb表空间结构
- oral_quiz-#求链表中的倒数第K个结点#
- android 连接服务器
- tensorflow中的lstm的state
- kindeditor上传图片的大小在哪控制
- Oracle对数据的导出和导入,建立用户,删除用户以及其下的所有表
- 轻轻的我走了,正如我轻轻的来…——ADO.NET核心类的灭度与SQLHelper的诞生——十八相送(下)...
- iptables防DDOS***和CC***设置
- NetBeans 时事通讯(刊号 # 55 - May 06, 2009)