怎么进行定制rpm包-创新互联

这期内容当中小编将会给大家带来有关怎么进行定制rpm包,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了尼玛免费建站欢迎大家使用!

定制rpm包

搭建内网yum(yum是一个用python写好的脚本)仓库,通过kickstart批量安装系统,这是互联网企业运维自动化的必要技能,自动化运维的基石。

面试题

基础运维部的小王交付给我100台服务器,我想在这100台服务器中安装系统,其中10台NFS存储,20台MySQL服务器,40台Redis服务器,20台Nginx+PHP服务器,10台反向代理服务器。你有什么方案快速部署并优化吗?需要多少时间搞定?

解决方案

1.tar打包:先源码编译安装、打包、批量分发、解包;

2.saltstack、puppet、ansible批量部署;

3.定制rpm包、搭建yum仓库、yum安装;

4.openstack虚拟机镜像和docker容器分发。

安装软件的4种方式

1、编译安装

  • 优点

    按需开启功能

    可定制(定制安装目录和软件功能)、一情况下不需要网络、可选择软件版本

  • 缺点

    需要查找并实验出适合的编译参数

    软件版本升级时,要注意某些参数已经取消掉了

    MySQL、PHP等软件编译耗时过长

    慢、复杂、需要查找编译参数、找依赖麻烦、纯编译依赖比较复杂

2、yum安装

  • 优点

    全自动化安装

    简单、便捷

    再也不用为依赖问题发愁了

  • 缺点

    自主性太差

    需要网络、网络不好时,下载速度慢

    没有办法定制、软件的功能、存放位置都已经固定好了,不易变更

3、二进制安装

  • 优点:简单、快

  • 缺点:不能定制、包容量大

4、定制rpm包※

  • 流程:根据需求编译软件 ==> 制件rpm包 ==> 搭建内网yum仓库 ==> yum安装

  • 优点:结合编译安装与yum安装两者的优点

  • 缺点:rpm包的通用性差,只能适用于公司的环境,第一步编译安装复杂、打包后不能再次更改、一般人不会定制rpm包

RPM简介

英文全称是Red Hat Package Manager,即Red Hat包管理器。

几乎所有的Linux发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

rpm命令有五种基本功能(但不包括创建软件包):安装、卸载、升级、查询、验证

rpm -?#<==查看rpm命令的帮助

FPM打包工具

FPM的作者是jordansissel

FPM的GitHub:https://github.com/jordansissel/fpm

FPM功能简单理解:就是将一种类型的包转换成另一种类型。

1、支持的源类型包

dir#<==将目录打包成所需要的类型,可以用于源码编译安装的软件包 rpm#<==对rpm进行转换 gem#<==对rubygem包进行转换 python#<==将python模块打包成相应的类型

2、支持的目标类型包

rpm#<==转换为rpm包 deb#<==转换为deb包 solaris#<==转换为solaris包 puppet#<==转换为puppet模块

3、FPM安装

fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。

安装ruby模块

yum -y install ruby rubygems ruby-devel

添加(addition)阿里云的Rubygems仓库,外国的源慢,移除(remove)原生的Ruby仓库

gem source -a http://mirrors.aliyun.com/rubygems/ gem source -r https://rubygems.org/

安装fpm

gem install json -v 1.7.7 gem install cabin -v 0.6 gem install backports -v 2.6.2 gem install arr-pm -v 0.0.9 gem install clamp -v 0.6 #gem install childprocess -v 0.5.9 gem install fpm -v 1.3.3 #<==指定安装fpm 1.3.3版本的软件,fpm这个工具升级挺频繁,而且在每次升级后会出现各种各样的问题。但是老版本的fpm工具能够满足我们的需要,因此就用这个版本了。

4、FPM参数

常用参数详细使用见:fpm --help

-s#<==source,指定源类型 -t#<==target,指定目标类型,即想要制作为什么包 -n#<==name,指定包的名字 -v#<==version,指定包的版本号 -C#<==change,指定打包的相对路径 -d#<==depend,指定依赖于哪些包 -f#<==force,第二次打包时目录下如果有同名安装包存在,则覆盖它 -p#<==输出的安装包的目录,不想放在当前目录下就需要指定 --post-install#<==软件包安装完成之后所要运行的脚本;同--after-install --pre-install#<==软件包安装完成之前所要运行的脚本;同--before-install --post-uninstall#<==软件包卸载完成之后所要运行的脚本;同--after-remove --pre-uninstall#<==软件包卸载完成之前所要运行的脚本;同--before-remove

实战定制nginx的RPM包

系统环境

[root@m01 ~]# cat /etc/redhat-release  CentOS release 6.7 (Final) [root@m01 ~]# uname -r 2.6.32-573.el6.x86_64 [root@m01 ~]# /etc/init.d/iptables status iptables:未运行防火墙。 [root@m01 ~]# getenforce  Disabled

准备操作

mkdir -p /application/tools/#<==统一软件包存放目录 cd /application/tools/ wget -q http://nginx.org/download/nginx-1.6.3.tar.gz sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf#<==开启yum缓存功能,缓存已下载的rpm包 grep keepcache /etc/yum.conf find /var/cache/yum/ -type f -name '*rpm'|xargs rm -f#<==清空本机已有yum缓存

编译安装nginx

yum install pcre pcre-devel openssl openssl-devel -y rpm -qa openssl openssl-devel pcre pcre-devel find /var/cache/ -type f -name '*rpm'|xargs cp -t /tmp/ #<==复制所有的rpm到tmp目录下 cd /tmp/ && tar zcf nginx_yum.tar.gz *.rpm #<==打包所有的rpm包 sz nginx_yum.tar.gz #<==下载到本地保存着 ##-------------------------------------------------------------------------------- cd /application/tools/ useradd nginx -u 888 -M -s /sbin/nologin tar xf nginx-1.6.3.tar.gz  cd nginx-1.6.3 ./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make && make install echo $? ln -s /application/nginx-1.6.3/ /application/nginx ll -d /application/nginx-1.6.3/ /application/nginx

cp命令参数

-t, --target-directory=DIRECTORY    copy all SOURCE arguments into DIRECTORY

编写脚本

mkdir /server/scripts -p cd /server/scripts/

这是安装完rpm包要执行的脚本

cat >nginx_rpm.sh<

打包

fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre,pcre-devel,openssl,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/ ll -sh #<==查看打好的包大小 sz nginx_rpm.sh #<==备份脚本 sz nginx-1.6.3-1.x86_64.rpm #<==备份定制的nginx包

fpm命令参数详解:

-s#<==source,指定源类型 -t#<==target,指定目标类型,即想要制作为什么包 -n#<==name,指定包的名字 -v#<==version,指定包的版本号 -d#<==depend,指定依赖于哪些包,包有多个,用逗号隔开 -f#<==force,第二次打包时目录下如果有同名安装包存在,则覆盖它 --post-install#<==软件包安装完成之后所要运行的脚本;同--after-install --pre-install#<==软件包安装完成之前所要运行的脚本;同--before-install

rpm命令详解

1、最常用组合

rpm -qa tree#<==查看是否已安装tree包 rpm -ql tree#<==查看tree包分别有哪些文件 rpm -qf `which tree`#<==查看tree命令是由哪个软件包提供的

2、安装

rpm -ivh包名#<==安装rpm包 rpm -ivh --aid 包名#<==解决rpm包循环依赖的问题-i#<==install,安装 -v#<==显示详细信息(Print verbose information) -h#<==hash,显示哈希值 --aid  Add suggested packages to the transaction set(事务集)when needed.

3、查看

rpm -qpi包名#<==查看rpm包详细信息 rpm -qpl包名#<==查看rpm包里面的内容 rpm -qpR包名#<==查看rpm包的依赖 rpm -qp --scripts 包名#<==查看rpm包带的执行脚本,执行脚本不是以文件形式存在 -a#<==all,所有-q#<==query,查询 -p#<==package,包-i#<==info,信息 -l#<==list,列表-R#<==requires,依赖 -f#<==查询文件属于哪个软件包--scripts#<==显示脚本

查看rpm包详细信息

[root@m01 /server/scripts]# rpm -qpi nginx-1.6.3-1.x86_64.rpm Name        : nginx                        Relocations: /  Version     : 1.6.3                             Vendor: root@m01 Release     : 1                             Build Date: 2017年05月30日 星期二 13时40分25秒 Install Date: (not installed)               Build Host: m01 Group       : default                       Source RPM: nginx-1.6.3-1.src.rpm Size        : 5252902                          License: unknown Signature   : (none) Packager    :  URL         : http://example.com/no-uri-given Summary     : no description given Description : no description given

查看rpm包里面的内容

[root@m01 /server/scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpm  /application/nginx-1.6.3/conf/fastcgi.conf /application/nginx-1.6.3/conf/fastcgi.conf.default /application/nginx-1.6.3/conf/fastcgi_params /application/nginx-1.6.3/conf/fastcgi_params.default /application/nginx-1.6.3/conf/koi-utf /application/nginx-1.6.3/conf/koi-win /application/nginx-1.6.3/conf/mime.types /application/nginx-1.6.3/conf/mime.types.default /application/nginx-1.6.3/conf/nginx.conf /application/nginx-1.6.3/conf/nginx.conf.default /application/nginx-1.6.3/conf/scgi_params /application/nginx-1.6.3/conf/scgi_params.default /application/nginx-1.6.3/conf/uwsgi_params /application/nginx-1.6.3/conf/uwsgi_params.default /application/nginx-1.6.3/conf/win-utf /application/nginx-1.6.3/html/50x.html /application/nginx-1.6.3/html/index.html /application/nginx-1.6.3/logs /application/nginx-1.6.3/sbin/nginx

查看rpm包的依赖

[root@m01 /server/scripts]# rpm -qpR nginx-1.6.3-1.x86_64.rpm  pcre   pcre-devel   openssl   openssl-devel   /bin/sh   rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1

查看rpm包带的执行脚本

[root@m01 /server/scripts]# rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm  postinstall scriptlet (using /bin/sh): #!/bin/bash useradd nginx -u 888 -M -s /sbin/nologin ln -s /application/nginx-1.6.3/ /application/nginx

注意事项

相对路径问题

fpm打包时,一定要用绝对路径!

fpm -s dir -t rpm -n nginx -v 1.6.3 .#<==相当路径 fpm -s dir -t rpm -n nginx -v 1.6.3 /application/nginx-1.6.3/#<==绝对路径

使用rpm -qpl查看rpm包的内容

fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已

[root@m01 scripts]# cd /application/nginx-1.6.3/#<==切换到目录下,再打包 [root@m01 nginx-1.6.3]# fpm -s dir -t rpm -n nginx -v 1.6.3 .#<==点来代表当前目录 [root@m01 nginx-1.6.3]# rpm -qpl nginx-1.6.3-1.x86_64.rpm #<==所有的目录,都从系统根目录开始了,所以,一定要用绝对路径打包 /conf/fastcgi.conf /conf/fastcgi.conf.default /conf/fastcgi_params 省略……

软链接问题

fpm打包时,直接打包原目录(后面加不加/,都没有问题),不要打包软链接目录!

fpm -s dir -t rpm -n nginx -v 1.6.3 /application/nginx(不加/,这个软链接代表一个文件)

打包看似成功,但查看包的内容,只是一个软链接文件

原因,目录结尾的/问题,这有点类似rm删除软链接目录

fpm -s dir -t rpm -n nginx -v 1.6.3 /application/nginx/(加/,这个软链接代表一个目录)

安装rpm包

安装rpm包的三种方法:

1、rpm命令安装

[root@m01 ~]# rz -y #<==先把打包好的nginx rpm包,上传到服务器 [root@m01 ~]# rpm -ivh nginx-1.6.3-1.x86_64.rpm  error: Failed dependencies: pcre-devel is needed by nginx-1.6.3-1.x86_64 openssl-devel is needed by nginx-1.6.3-1.x86_64 #<==但会报如上依赖错误,需要先yum安装依赖才能安装rpm包。

解决方法:先利用yum安装上面的两个依赖包,再执行rpm。

yum -y pcre-devel openssl-devel rpm -ivh nginx-1.6.3-1.x86_64.rpm

2、yum命令安装rpm包

这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

yum localinstall -y nginx-1.6.3-1.x86_64.rpm

3、搭建内网yum仓库※※※

yum仓库搭建(且待下文分解!)

上述就是小编为大家分享的怎么进行定制rpm包了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:怎么进行定制rpm包-创新互联
链接分享:http://hbruida.cn/article/depdsj.html