定制rpm包概述

什么是定制rpm包


  • 将原本,使用源码安装的服务,打包成rpm包

为什么要定制rpm包


  • 使用源码安装,步骤繁琐复杂,浪费时间,把源码包打成rpm包安装时可以节省时间,提高工作效率,做好rpm包, 可以将rpm包放入yum仓库中,方便安装

如何定制rpm包


  • fpm
  • rpmbuild

安装fpm

  • fpm 是ruby语法写的一种,定制rpm包的工具,所以在安装fpm之前,需要先安装ruby环境。
# 1.下载阿里云的base源和epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 2.安装ruby环境
[root@Y ~]# yum -y install ruby rubygems ruby-devel
一共是ruby, rubygems ,ruby-devel三个依赖包

# 3.查看gem默认的源
[root@Y ~]# gem sources
*** CURRENT SOURCES ***
https://rubygems.org/

gem作用:gem和yum差不多,是包管理工具,yum来管理.rpm的包,gem来管理.gem包

# 4.删除gem默认官方源
[root@Y ~]# gem sources --remove https://rubygems.org/ #因为是国外的源 访问下载的很慢
https://rubygems.org/ removed from sources
[root@Y ~]# gem sources
*** CURRENT SOURCES ***

# 5.添加阿里云的gem源
[root@Y ~]# gem sources -a https://mirrors.aliyun.com/rubygems/
https://mirrors.aliyun.com/rubygems/ added to sources

[root@Y ~]# gem sources
*** CURRENT SOURCES ***
https://mirrors.aliyun.com/rubygems/ #换成功了

# 6.安装fpm
[root@Y ~]# gem install fpm -v 1.3.3 ## 贼慢

[root@Y ~]# tar xf fpm-1.3.3.x86_64.tar.gz #因为弄到了已有的fpm的压缩包,才可以这样操作
[root@Y ~]# gem install *.gem

定制rpm包_rpm包

报错原因:ruby版本是2.0,安装fpm工具需求是ruby版本要2.4.0以上

[root@Y ~]# rpm -qa|grep ruby
ruby-2.0.0.648-39.el7_9.x86_64

源码安装nginx

# 1.安装依赖
[root@Y ~]# yum install -y gcc gcc-c++ glibc pcre-devel openssl-devel

# 2.下载nginx源码包
[root@Y ~]# wget http://nginx.org/download/nginx-1.20.2.tar.gz

# 3.解压
[root@Y ~]# tar xf nginx-1.20.2.tar.gz

# 4.生成
[root@Y nginx-1.20.2]# ./configure --prefix=/opt/nginx-1.20.2 --with-http_ssl_module -- with-http_stub_status_module

# 4.编译和安装
[root@Y nginx-1.20.2]# make && make install

使用fpm定制rpm包

fpm
-s:指定将什么打成rpm包(dir将目录打成rpm包)
-t:打成什么包(rpm 打成rpm包)
-n:指定包名,-n如何指定,yum就如何装(ngx) yum install -y ngx
-v:指定版本号
-d:指定依赖包,在这指定后,yum安装的时候,会根据-d的内容自动安装对应的依赖
--post-install:安装rpm包之后,要执行的脚本
--pre-install:安装rpm包之前,要执行的脚本
--post-uninstall:卸载rpm包之后,要执行的脚本
--pre-uninstall:卸载rpm包之前,要执行的脚本
-f:指定要打包的路径

## 安装完nginx之后
1.做软链接
2.添加nginx的环境变量

## 先写脚本
[root@Y ~]# vim post_install_nginx.sh
ln -s /opt/nginx-1.20.2 /opt/nginx
echo 'PATH="/opt/nginx/sbin:$PATH"' > /etc/profile.d/nginx.sh

## fpm打包
fpm -s dir \
-t rpm \
-n nginx \
-v 1.20.2 \
-d 'openssl-devel,pcre-devel' \
--post-install /root/post_install_nginx.sh \
-f /opt/nginx-1.20.2

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.20.2-1.x86_64.rpm"}

## 使用其他机器测试
rpm -ivh nginx-1.20.2-1.x86_64.rpm
yum localinstall -y nginx-1.20.2-1.x86_64.rpm

[root@Y ~]# rpm -ivh nginx-1.20.2-1.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:nginx-1.20.2-1 ################################# [100%]


## 需要提前,下载好nginx需要的所有依赖包
rpm -Uvh *rpm
Preparing... ################################# [100%]
Updating / installing...
1:pcre-devel-8.32-17.el7 ################################# [ 20%]
2:libselinux-devel-2.5-15.el7 ################################# [ 40%]
3:krb5-devel-1.15.1-51.el7_9 ################################# [ 60%]
4:openssl-devel-1:1.0.2k-25.el7_9 ################################# [ 80%]
5:nginx-1.20.2-1 ################################# [100%]

定制rpm包_ruby_02

fpm工具底层,调用了rpmbuild这个工具,所以需要提前安装rpmbuild
解决方法:yum install -y rpm-build

定作fpm包并放入自制仓库

# 源码安装nginx
0.1 进入nginx官网:http://nginx.org/

0.2 点击download,并复制nginx源码包的链接地址

1.开启yum安装包缓存
[root@localhost ~]# vim /etc/yum.conf
keepcache=0 改成 keepcache=1

2.安装依赖包
[root@localhost ~]# find /var/cache/yum/ -type f -name '*.rpm'
[root@localhost ~]# yum install -y pcre-devel openssl-devel

3.查找yum缓存,把所有rpm包拷贝到opt目录下
[root@localhost ~]# find /var/cache/yum/ -type f -name '*.rpm'|xargs cp -t /opt/

4.把所有依赖包打成一个tar包
[root@localhost opt]# tar zcf nginx_require.tar.gz *.rpm

5.创建安装包存放目录和安装目录
### 安装包存放的目录
[root@localhost ~]# mkdir /pkg_tools
### 应用安装目录
[root@localhost ~]# mkdir /application

6.下载nginx源码包
[root@localhost ~]# wget -O /pkg_tools/nginx-1.20.2.tar.gz http://nginx.org/download/nginx- 1.20.2.tar.gz

7.解压
[root@localhost ~]# cd /pkg_tools/
[root@localhost pkg_tools]# ll
total 1040
-rw-r--r-- 1 root root 1062124 Nov 16 22:51 nginx-1.20.2.tar.gz
[root@localhost pkg_tools]# tar xf nginx-1.20.2.tar.gz

8.进入源码包目录
[root@localhost pkg_tools]# cd nginx-1.20.2/

9.生成
[root@localhost nginx-1.20.2]# ./configure --prefix=/application/nginx-1.20.2 --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module


10.编译(将生成代码里指定的功能和路径编译到源码中):
make # 编译完成后可以用echo $? 判断是否执行成功

11.安装nginx:make install
( 编译 && 安装| make && make install)

-----------------------------------------------------------

# 安装fpm工具

1.使用阿里云的base和epel源作成yum仓库:
base源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
epel源:
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.fpm是ruby语法写的定制rpm的工具,所以要安装ruby的环境:
[root@localhost ~]# -y install ruby rubygems ruby-devel

3..查看gem默认的源:
[root@localhost ~]# source
*** CURRENT SOURCES ***
https://rubygems.org/
## 因为gem官方源在国外,加载的很慢,所以使用阿里云的源

4.删除gem默认的官方源:
[root@localhost ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources

5.加入阿里云的源:
[root@localhost ~]# gem sources --add https://mirrors.aliyun.com/rubygems/

6.下载fpm包
[root@localhost ~]# wget http://test.driverzeng.com/other/fpm-1.3.3.x86_64.tar.gz

7.解压
[root@localhost ~]# mkdir fpm
[root@localhost ~]# ll
drwxr-xr-x 2 root root 6 Apr 29 09:00 fpm
-rw-r--r-- 1 root root 1288103 Jul 14 2016 fpm-1.3.3.x86_64.tar.gz
[root@localhost ~]# mv fpm-1.3.3.x86_64.tar.gz fpm
[root@localhost ~]# cd fpm/
[root@localhost fpm]# ll
total 1260
-rw-r--r-- 1 root root 1288103 Jul 14 2016 fpm-1.3.3.x86_64.tar.gz
[root@localhost fpm]# tar xf fpm-1.3.3.x86_64.tar.gz


8.安装fpm工具:
[root@localhost fpm]# gem install *.gem

---------------------------------------------------------------------------

# 将nginx源码包打成rpm包

## 1.创建脚本目录
[root@localhost ~]# mkdir /scripts

## 2.写安装后的脚本
[root@localhost ~]# vim /scripts/post_install_nginx.sh
id nginx &>/dev/null || useradd nginx -s /sbin/nologin -M
ln -s /application/nginx-1.20.2 /application/nginx
echo 'PATH="/application/nginx/sbin:$PATH"' > /etc/profile.d/nginx.sh

## 3.卸载后要执行的脚本

## 4.打rpm包
[root@localhost ~]# fpm -s dir -t rpm -n nginx -v 1.20.2 -d 'openssl-devel,pcre-devel' -- post-install /scripts/post_install_nginx.sh -f /application/nginx-1.20.2

--post-uninstall

## 5.运行fpm需要安装rpmbuild:
[root@localhost ~]# yum install -y rpm-build

------------------------------------------------------------------------------------

# nginx做yum仓库
1.安装nginx
[root@干净的虚拟机 ~]# yum install -y nginx

2.修改nginx配置文件
[root@web01 ~]# vim /etc/nginx/nginx.conf
42 root /yum_repo;
43 autoindex on;

3.启动nginx
[root@web01 ~]# nginx

4.创建/yum_rpeo目录
[root@web01 ~]# mkdir /yum_repo

5.创建nginx仓库目录
[root@web01 ~]# mkdir /yum_repo/nginx

6.安装制作yum仓库的命令
[root@web01 ~]# yum install -y createrepo

7.拷贝打包机器上所有rpm包到yum仓库中
[root@localhost ~]# scp nginx-1.20.2-1.x86_64.rpm root@10.0.0.7:/yum_repo/nginx
[root@localhost ~]# scp /opt/nginx_require.tar.gz root@10.0.0.7:/yum_repo/nginx
(注意ip地址)

# 8.解压依赖包
[root@web01 nginx]# tar xf nginx_require.tar.gz

# 9.制作yum仓库
[root@web01 nginx]# createrepo /yum_repo/nginx/

# 10.关闭防火墙,关闭selinux
[root@web01 nginx]# systemctl stop firewalld
[root@web01 nginx]# setenforce 0
---------------------------------------------------------------------------------
# 测试其他机器
1.压缩所有其他系统的yum源
[root@db01 ~]# gzip -r /etc/yum.repos.d/

2.手写yum源配置文件
[root@db01 ~]# vim /etc/yum.repos.d/nginx.repo
[yjt_nginx]
name=Ningx Repository By YJT
baseurl=http://10.0.0.7/nginx/
gpgcheck=0
enabled=1

3.测试
[root@db01 ~]# yum repolist
Loaded plugins: fastestmirror
Determining fastest mirrors
yjt_nginx
| 2.9 kB 00:00:00
yjt_nginx/primary_db
| 16 kB 00:00:00
repo id repo name
status
yjt_nginx
Ningx Repository By YJT
22
repolist: 22

[root@db01 ~]# yum install -y nginx
-------------------------------------------------------------------------------------
########## 以下是漏查
19.为nginx做个软链接:ln -s /opt/nginx-1.20.2/ /opt/nginx

20.在环境变量中添加nginx,让nginx程序直接执行

21.更新环境变量:source /etc/profile

22.启动nginx服务:nginx

23.检查端口是否开启:netstat -lnutp

24.检查是否有nginx的进程:ps -ef

25.关闭防火墙:systemctl stop firewalld

26.关闭selinux:setenforce 0

27.在浏览器上输入自己的ip地址

28.修改nginx的配置文件:
vi /opt/nginx/conf/nginx.conf
将下面代码放入到下图位置,并将代码下面的配置文件删除
server {
listen 80;
server_name localhost;
location / {
# root html;
root /data/yum_data/;
# index index.html index.htm;
autoindex on;
access_log off;
}
}

29.创建上面代码写的目录:mkdir /data/yum_data -p

30.重新加载nginx,使网页变成下图所示:nginx -s reload

31.在yum_data下创建nginx目录:
mkdir /data/yum_data/nginx

32..将打包好的nginx的rpm包放入到nginx目录中

33..将nginx需要的依赖包放入到nginx目录中:
openssl
yum install openssl-devel -y -- downloadonly --downloaddir=/data/yum_data/nginx/
pcre:
yum install pcre-devel -y -- downloadonly --downloaddir=/data/yum_data/nginx/

定制rpm包_rpm包_03

34.将nginx做成仓库: 
createrepo /data/yum_data/nginx

定制rpm包_ruby_04

35.在另一台终端里加入nginx的yum仓库

定制rpm包_ruby_05

36.将其他yum源压缩,只留下nginx仓库

定制rpm包_nginx_06

37.下载nginx并自动解决它的依赖关系

38.查看opt是否生成脚本里的软链接

定制rpm包_nginx_07

39.查看环境变量是否添加成功

定制rpm包_nginx_08