Linux 定制rpm包

 定制rpm包

说明:这些操作全部在管理服务器内操作。

定制rpm包,搭建内网yum仓库,通过kickstart批量系统安装,这是互联网企业运维自动化的必要技能,自动化运维的基石。

1.1 面试题

有100台服务器想安装系统。你有什么方案快速部署并优化吗?需要多少时间搞定?

1.1.1 解决方案

(1) tar打包:先编译安装、打包、批量分发、解包;

(2) saltstack、puppet、ansible批量部署;

(3) 定制rpm所、搭建yum仓库、yum安装;

(4) openstack虚拟机镜像和docker窗口分发。

1.2 安装软件的方式

1.2.1 编译安装

r 优点

按需开启功能

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

r 缺点

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

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

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

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

1.2.2 yum安装

r 优点

全自动化安装

简单、便捷

不需要为依赖问题发愁了

r 缺点

自主性太差

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

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

1.2.3 二进制安装

r 优点:简单、快

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

1.2.4 定制rpm包※

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

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

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

1.3 RPM简介

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

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

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

1.4 FPM打包工具

FPM的作者是jordansissel

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

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

1.4.1 支持的源类型包

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

1.4.2 支持的目标类型包

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

1.4.3 FPM安装

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

#<==安装ruby模块
yum -y install ruby rubygems ruby-devel
#<==添加阿里云的Rubygems仓库
gem source -a http://mirrors.aliyun.com/rubygems/
#<==移除原生的Ruby仓库
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版本的软件

1.4.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

1.5 实战定制nginx的RPM包

1.5.1 系统环境

[[email protected] ~]# cat /etc/redhat-release     #<==系统版本
CentOS release 6.7 (Final)
[[email protected] ~]# uname -r                    #<==64位系统,及内核版本
2.6.32-573.el6.x86_64
[[email protected] ~]# getenforce                  #<==关selinux
Disabled
[[email protected] ~]# /etc/init.d/iptables status #<==关防火墙
iptables:未运行防火墙。

1.5.2 准备操作

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

1.5.3 编译安装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/
cd /tmp/ && tar zcf nginx_yum.tar.gz *.rpm
sz nginx_yum.tar.gz
--------------------------------------------------------------------------------
cd /application/tools/
useradd nginx -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
echo $?
make && make install
echo $?
ln -s /application/nginx-1.6.3/ /application/nginx
ll -d /application/nginx-1.6.3/ /application/nginx

~ 过程

[[email protected] tmp]# yum install pcre pcre-devel openssl openssl-devel -y
#<==安装pcre库,openssl软件,因为等下编译安装时,需要安装ssl模块
[[email protected] tmp]# rpm -qa openssl openssl-devel pcre pcre-devel#<==检查
openssl-devel-1.0.1e-48.el6_8.1.x86_64
pcre-7.8-7.el6.x86_64
openssl-1.0.1e-48.el6_8.1.x86_64
pcre-devel-7.8-7.el6.x86_64
[[email protected] tools]# find /var/cache/ -type f -name ‘*rpm‘|xargs cp -t /tmp/
#<==另存rpm包,因为很多人的系统环境可能不一致,需要的rpm包可能不同。
[[email protected] tools]# cd /tmp/ && tar zcf nginx_yum.tar.gz *.rpm#<==打包
 
[[email protected] tmp]# cd /application/tools/#<==切换到软件包存放目录
[[email protected] tools]# useradd nginx -M -s /sbin/nologin #<==添加nginx用户
[[email protected] tools]# tar xf nginx-1.6.3.tar.gz #<==解包
[[email protected] tools]# cd nginx-1.6.3#<==切换到nginx1.6.3目录下
[[email protected] nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module#<==配置过程
内容省略,自行脑补……
[[email protected] nginx-1.6.3]# echo $?#<==检查配置过程是否出错
0
[[email protected] nginx-1.6.3]# make && make install#<==编译&&配置过程
内容省略,自行脑补……
[[email protected] nginx-1.6.3]# echo $?#<==检查编译与配置过程是否出错
0
[[email protected] nginx-1.6.3]# ln -s /application/nginx-1.6.3/ /application/nginx
#<==做软链接
[[email protected] nginx-1.6.3]# ll -d /application/nginx-1.6.3/ /application/nginx
#<==检查
lrwxrwxrwx 1 root root   25 2016-07-29 17:37 /application/nginx -> /application/nginx-1.6.3/
drwxr-xr-x 6 root root 4096 2016-07-29 17:37 /application/nginx-1.6.3/

1.5.4 编写脚本

mkdir /server/scripts -p
cd /server/scripts/
cat >>nginx_rpm.sh<<EOF
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.3/ /application/nginx
EOF

~ 过程

[[email protected] nginx-1.6.3]# mkdir /server/scripts -p
[[email protected] nginx-1.6.3]# cd /server/scripts/
[[email protected] scripts]# vim nginx_rpm.sh#<==这是安装完rpm包要执行的脚本
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.3/ /application/nginx

1.5.5 打包

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 -h
sz nginx_rpm.sh
sz nginx-1.6.3-1.x86_64.rpm

~ 过程

[[email protected] scripts]# 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/
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.3-1.x86_64.rpm"}
fpm命令参数详解:
-s                #<==source,指定源类型
-t                #<==target,指定目标类型,即想要制作为什么包
-n                #<==name,指定包的名字
-v                #<==version,指定包的版本号
-d                #<==depend,指定依赖于哪些包,包有多个,用逗号隔开
-f                #<==force,第二次打包时目录下如果有同名安装包存在,则覆盖它
--post-install    #<==软件包安装完成之后所要运行的脚本;同--after-install
--pre-install     #<==软件包安装完成之前所要运行的脚本;同--before-instal

1.6 rpm常用命令组合

~ 查看

rpm -qpi包名            #<==查看rpm包详细信息
rpm -qpl包名            #<==查看rpm包里面的内容
rpm -qpR包名            #<==查看rpm包的依赖
rpm -qp --scripts 包名  #<==查看rpm包带的执行脚本,执行脚本不是以文件形式存在
rpm -qa                 #<==查看系统内所有已安装的rpm包

~ 安装

rpm -ivh包名            #<==安装rpm包
rpm -ivh --aid 包名     #<==解决rpm包循环依赖的问题

1.6.1 rpm命令的参数

~ 查看

-a        #<==all,所有
-q        #<==query,查询
-p        #<==package,包
-i        #<==info,信息
-l        #<==list,列表
-R        #<==requires,依赖
--scripts #<==显示脚本

~ 安装

-i        #<==install,安装
-v        #<==显示详细信息(Print verbose information)
-h        #<==hash,显示哈希值
--aid  Add suggested packages to the transaction set(事务集)when needed.

1.7 注意事项

1.7.1 相对路径问题

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命令识别而已

~ 过程

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

1.7.2 软链接问题

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/(加/,这个软链接代表一个目录)

1.8 安装rpm包

利用backup服务器测试。

安装rpm包的三种方法:

1.8.0.1 rpm命令安装

[[email protected] tools]# 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

1.8.0.2 yum命令安装rpm包

[[email protected] tools]# yum localinstall nginx-1.6.3-1.x86_64.rpm -y
#<==这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

1.8.0.3 搭建内网yum仓库※※※

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

时间: 2024-08-27 14:24:37

Linux 定制rpm包的相关文章

定制RPM包

目录 1. 安装软件的方式... 1 2. 定制RPM包... 1 2.1 RPM简介... 2 2.2 fpm工具介绍... 2 2.3 FPM安装  *****. 3 2.4 yum安装时如何解决依赖问题的... 4 3. 实战定制nginx的RPM包  *****. 4 3. 安装rpm包  *****. 7 4. 定制LNMP的RPM包思路... 8 1. 安装软件的方式 1 编译安装软件 优点:定制优化安装目录:按需开启功能:可定制(定制安装目录和软件功能),一般情况下不需要网络,可选

自动化部署必备技能——定制RPM包

回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能.存放位置都已经固定好了,不易变更. ===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了. 3.编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装.结合前两者的优点,暂未发现什么缺点.

一键自动化部署(定制rpm包,yum仓库)

部署--前篇 上午将MySQL多实例部署完成,由于有公司特定一些需求,需要源码安装,现在需要批量部署,如果一台台部署,就太过麻烦,而且浪费时间,这个时候自动化部署 就体现出价值了 我们将MySQL制作定制化rpm包,然后放到我们的yum仓库中,在将yum所有客户端,都指向yum源,之后就是喝喝茶,看看片,轻松批量部署了,废话不多说,开干. 如果MySQL多实例还没配置的,或不了解软件的安装方式 的 请参考:http://qiuyt.blog.51cto.com/1229789/1920686 一

如何搭建yum仓库与定制rpm包

当我们自动仳部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请注明出处.http://www.cnblogs.com/Csir/  本人导师---悠久之翼 #服务端1.#先保留平常下载下来的rpm包 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf 这样当我们yum安装软件的时候,文件就是被保存下来: /var/cache/yum/ #部署nginx,提供80端口服务#安装依赖包 yum in

linux之rpm包制作

难点:spec文件的编写 1,首先安装rpm-build命令 yum install rpm-build 2,介绍spec编写规则: #ll #drwxr-xr-x  2 root root 4096 Jul 29 13:50 BUILD #drwxr-xr-x  2 root root 4096 Jul 29 13:51 RPMS #drwxr-xr-x  2 root root 4096 Jul 29 13:51 SOURCES #drwxr-xr-x  2 root root 4096 J

定制rpm包及搭建yum仓库

定制rpm包及搭建yum仓库 第1章 定制rpm包 1.FPM打包工具 FPM的作者是jordansisselFPM的github:https://github.com/jordansissel/fpmFPM功能简单说就是将一种类型的包转换成另一种类型. 支持的源类型包: dir         将目录打包成所需要的类型,可以用于源码编译安装的软件包 rpm         对rpm进行转换 gem         对rubygem包进行转换 python      将python模块打包成相应

定制rpm包、搭建yum仓库

一.定制rpm包 1.环境 [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.9 (Final) [[email protected] ~]# uname -r2.6.32-696.el6.x86_64 [[email protected] ~]# /etc/init.d/iptables status iptables: Firewall is not running. [[email protected] ~]#

包管理 ----- Linux操作系统rpm包安装方式步骤

Linux操作系统rpm包安装方式步骤 2016年08月04日 07:00:26 阅读数:17140 转自 : http://os.51cto.com/art/201003/186467.htm 特别值得一提的是Linux操作系统有很多值得学习的地方,这里我们主要介绍Linux操作系统,包括介绍Linux操作系统等方面.Linux操作系统软件安装方法总结 一.rpm包安装方式步骤: 引用: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su

FPM定制RPM包

软件安装的常见方式: 1.编译安装: 优点:可以定制化安装目录,按需开启功能等. 缺点:需要查找并实验出合适的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件 优点:全自动化安装,不需要为依赖问题发愁. 缺点:自主性太差,软件的功能.存放位置都固定好了,不易变更(定制rpm包恰好解决这一问题) FPM打包工具: 1.简介: FPM的作者是Jordansissel FPM的GITHUB:https://github.com/jordansissel/fpm 官网:http://