fpm定制rpm
N 作为一个运维,常做的工作就部署各种服务,搭建各种服务,而重复的工作要怎么样才能快速的完成好
就比如我们指定目录安装:Nginx,Mysql ,PHP ,如果用源码安装,配置高,就算用写好的shell 脚本安装,编译也要十来分钟,但如果有自己预先定制的 rpm 包,那就要不到一分钟就能解决,这篇文章告诉你怎么来定制 rpm 包
环境 CentOS 7
[root@fpm_server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@fpm_server ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@fpm_server ~]# getenforce
Disabled
2
3
4
5
6
7
8
9
10
11
12
# 安装RPM 工具
安装ruby模块
yum install ruby rubygems ruby-devel -y
# 安装方式一
#添加国内源
gem sources -a http://mirrors.aliyun.com/rubygems/
#移除原生的Ruby仓库
gem sources --remove http://rubygems.org/
#安装fpm
gem install fpm
Building native extensions. This could take a while...
ERROR: Error installing fpm:
childprocess requires Ruby version >= 2.4.0. #按照上面的博文进行升级
#安装fpm 指定版本
gem install fpm -v 1.4.0
2
3
4
5
6
7
8
9
10
11
12
# 安装方式二
test -d fpm ||mkdir -p fpm && cd fpm
wget http://download.yfklife.cn/blog/ops/fpm/fpm-1.3.3.x86_64.tar.gz
tar xf fpm-1.3.3.x86_64.tar.gz
gem install ./*.gem
2
3
4
# FPM命令参数介绍
-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove
2
3
4
5
6
7
8
9
10
11
12
# FPM 实战打包
# 打包Nginx
fpm -s dir -t rpm -n nginx -v 1.20.2 -d 'pcre-devel,openssl-devel' --post-install /opt/nginx_rpm.sh -f /etc/nginx /usr/sbin/nginx
wget http://download.yfklife.cn/blog/ops/fpm/nginx_rpm.sh
2
# 打包PHP
fpm -s dir -t rpm -n php -v 7.2.6 -d 'zlib libjpeg freetype libpng gd curl zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel libjpeg-turbo-devel libcurl-devel libxslt-devel libmcrypt-devel mhash mcrypt' --post-install /root/soft/rpm-php.sh -f /usr/local/php/
wget http://download.yfklife.cn/blog/ops/fpm/rpm-php_7.2.sh
2
# 打包Mysql
fpm -s dir -t rpm -n mysql -v 5.7.20 -d 'ncurses-devel libaio-devel cmake' --post-install /server/scripts/mysql_rpm.sh /application/mysql-5.6.36 /etc/init.d/mysqld /etc/my.cnf
wget http://download.yfklife.cn/blog/ops/fpm/mysql_rpm-5.7.20.sh
2
3
下载打好包安装测试
yum localinstall nginx-1.20.2-1.x86_64.rpm -y
# Yum 私有仓库搭建
# 安装createrepo包
安装createrepo,安装yum源软件
yum install createrepo -y
创建yum仓库目录并初始化repodata索引文件
mkdir -p /application/yum/centos6.9/x86_64/ && cd /application/yum/centos6.9/x86_64/
拷贝rpm包到此目录
createrepo -pdo /application/yum/centos7.4/x86_64/ /application/yum/centos7.4/x86_64/
# 提供yum服务
python -m SimpleHTTPServer 80 &>/dev/null & #python的http模块
也可以用Nginx 做个代理
如果有新的rpm包放入必须更新
createrepo --update /application/yum/centos6.9/x86_64/
# 客户端修改,调整
客户端修改yum源
cat >/etc/yum.repos.d/local-1.repo<<OPO
[onlylady]
name=Server
baseurl=http://yum仓库IP #如果不是80端口需要加端口
enable=1
gpgcheck=0
OPO
2
3
4
5
6
7
8
删除本地缓存
yum clean all
显示本地yum源列表
yum --enablerepo=local --disablerepo=base,extras,updates list
安装nginx为例
yum --enablerepo=local --disablerepo=base,extras,updates,epel install nginx -y
# yum命令参数
列出所有可更新的软件清单命令:yum check-update
更新所有软件命令:yum update
仅安装指定的软件命令:yum install <package_name>
仅更新指定的软件命令:yum update <package_name>
列出所有可安裝的软件清单命令:yum list
删除软件包命令:yum remove <package_name>
查找软件包命令:yum search <keyword>
2
3
4
5
6
7
# 个人存储下载地址。。。
fpm-1.3.3.x86_64.tar.gz
mysql_rpm-5.7.20.sh
rpm-php_7.2.sh
rpm-php_7.4.2.sh
2
3
4