rpm包制作以vsftpd为例

逸兴
逸兴
逸兴
57
文章
25
评论
2019-09-1710:47:482 5189字阅读17分17秒
摘要

将一些常用的软件编辑配置好后,制作成RPM包,这样就可以到处安装,而不用重复编辑配置。

1.0 常用软件安装方式

常用的软件安装方式有源码编译安装, yum 安装 以及容器方式。

  • 源码编译,优点可以按需安装软件功能,自定义安装目录,及安装选项。缺点也很明显,一个是依赖问题比较麻烦,安装复杂,另外安装时间太长(二进制安装很快,不过安装包比较大);
  • yum 安装则是相反,安装很快,自动解决依赖问题,但是软件目录,和相关功能都是预定义好的,不方便定制;

2.0 制作rpm包 安装

2.1 打包软件包概述

下面介绍一种制作rpm包安装的方式,这种方法兼容了 编译 和 yum 安装;其实就是将安装好的软件,打一个rpm包,然后直接安装这个rpm即可。这种方法,初始准备比较麻烦,对环境比较依赖,之后使用就很简单了。不过基本只适用于你自己的环境,别人拿去可能就不能用来。

RPM打包流程:

  1. 先安装好软件包,比如 nginx,mysql(可以编译,可以yum);
  2. 配置安装的软件,主要是一些通用的配置;
  3. 安装fpm 工具,将前面的软件的所有文件,都打包成一个rpm格式的软件包(因为Linux一切皆文件,将软件安装后的文件打包,也就相当于把这个软件打包了。);
  4. 打包过程中,可以指定需要的依赖包(这些依赖包,在之后安装时会自动安装,也可以将这些依赖包,同时打包),还可以将脚本放入 rpm(这个脚本会在安装rpm包时,首先运行);
  5. rpm 安装 制作好的rpm包;

RPM包安装流程:

  1. 解压安装包;
  2. 运行打包时指定的 --before-install脚本,这个脚本中 可以做一个初始化设置,比如创建目录,创建用户等;
  3. 安装指定的依赖包(这些依赖包,可以yum安装。如果安装环境没有yum,可以将其打包到 rpm 包,由before-install 脚本进行安装,甚至可以将依赖包也制作成rpm包,一起安装 ),这就需要一开始在模板机上,先收集依赖包,后面会介绍包收集方式;
  4. 将解压到的文件,放到指定位置;
  5. 安装成功。

2.2 依赖包收集

这里的依赖包收集,使用yum 包缓存方式。yum 安装软件包时,会将依赖包一起安装。这里安装时会先下载依赖包,我们这里就是使用这些下载的包。

安装前,最好是做一个初始的系统,最小化安装,这样才能最大限度的解决环境依赖问题。可以用虚拟机,做个快照,用起来方便。

这里以7.5 的环境为例:

[root@lastack ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
[root@lastack ~]#
[root@lastack ~]# uname -a
Linux lastack.example 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@lastack ~]#

2.2.1 开启yum包缓存

这里也可以不要包缓存,直接yum downloader 只下载,不安装即可,downloader 更简单些,不嫌麻烦可以使用“包缓存” 哈哈。

centos 的yum包缓存,默认是关闭的,不然每次yum都要包安装的包保存一份,还是很占空间的。

开启方法:

rpm包制作以vsftpd为例

 

包缓存目录结构:

rpm包制作以vsftpd为例

安装包会存放在对应yum源的packages目录下.

rpm包制作以vsftpd为例

其实,我们平常使用yum clean all 清理yum 缓存时,不就是删除的这个目录吗。

rpm包制作以vsftpd为例

2.2.2 测试包缓存

[root@lastack packages]# yum install nano

rpm包制作以vsftpd为例

其实还有一种比较“变态”的做法,就是不去收集依赖,使用 Inotify 监整个文件系统,安装前后哪些文件发生变化了,统统打包。

2.3 安装fpm

打包工具, 这里选择 fpm, 另外还有些打包工具, 不过都比较复杂,fpm相对简单些。

要安装一个依赖工具:

yum install rpm-build -y

fpm 使用gem安装,要先安装ruby环境。

1.安装ruby模块

yum -y install ruby rubygems ruby-devel

2.添加剂阿里云的rubygems仓库,国外仓库比较慢

gem sources -a http://mirrors.aliyun.com/rubygems/

3.查看当前使用ruby源

gem source -l

rpm包制作以vsftpd为例

可以看到当前有两个 ruby源,移除那个原生的源。

[root@lastack ~]# gem source --remove https://rubygems.org/
https://rubygems.org/ removed from sources
[root@lastack ~]# gem source -l
*** CURRENT SOURCES ***

http://mirrors.aliyun.com/rubygems/
[root@lastack ~]#

开始安装 fpm ,安装时需要指定版本 1.3.3

# 安装报错,需要ruby 版本大于2.3.0,当前的ruby版本是2.0.0 ,接下来升级ruby

rpm包制作以vsftpd为例
rpm包制作以vsftpd为例

2.3.1 升级ruby

我当前使用的阿里源,可以看到最多支持到2.0.0.648,这里使用rvm升级ruby, rvm 是ruby的一个版本管理器。

rpm包制作以vsftpd为例

1.安装rvm

curl -L get.rvm.io | bash -s stable

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

curl -L get.rvm.io | bash -s stable

source /usr/local/rvm/scripts/rvm

 查看当前rvm仓库中的已知ruby版本

rvm list known

rpm包制作以vsftpd为例
列出ruby版本

2. 安装一个2.3.3 版本的ruby

rvm install 2.3.3

rpm包制作以vsftpd为例
等待安装

指定版本

rvm use 2.3.3

设置默认版本

rvm use 2.3.3 --default

查看ruby版本:

ruby -version

[root@lastack ~]# ruby -version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
[root@lastack ~]#

3. 安装fpm

gem install fpm -v 1.3.3

source /etc/profile

[root@lastack ~]# fpm --version
1.3.3
[root@lastack ~]#

2.4 开始打包

到了这里,准备环境终于完成了,接下来开始打包相关的步骤:

打包以vsftpd为例:

首先先写一个安装开始时候的脚本,就是准备一些环境,这些通过文件覆盖并不好实现的内容,对于vsftpd主要有这么几点:(最好到/ 下去写)

1.创建系统账户,用于宿主账户;

2.创建数据目录;

3.更改数据目录属主。

[root@lastack /]# cat vsftpd_install.sh 
#!/bin/bash

useradd vsftp -s /sbin/nologin
mkdir -p /var/ftp/{test01,test02}
chown -R vsftp.vsftp /var/ftp

[root@lastack /]#

rpm 包在安装时会运行一个脚本叫做 --before-install (就是上面那个,准备初始环境的)。同理,在卸载时也会运行一个卸载脚本,用来清理一些文件什么的,叫做--after-remove。其实,安装和卸载前后,都会可以运行相应的脚本,具体的参数,后面有介绍。

[root@lastack /]# cat vsftpd_remove.sh 
#!/bin/bash

userdel vsftp


[root@lastack /]#

制作rpm包:vsftpd安装,可以参考前面的文章

fpm -s dir -t rpm -n vsftp -v 3.0.2 --before-install vsftpd_install.sh --after-remove vsftpd_remove.sh /usr/share/man/man5/vsftpd.conf.5.gz /usr/share/man/man8/vsftpd.8.gz /usr/share/doc/vsftpd-3.0.2 /usr/sbin/vsftpd /usr/lib/systemd/system/vsftpd* /usr/lib/systemd/system-generators/vsftpd-generator /etc/vsftpd /etc/pam.d/vsftpd /etc/logrotate.d/vsftpd

[root@lastack /]# ll vsftp-3.0.2-1.x86_64.rpm
-rw-rw-r-- 1 root root 166920 Sep 18 16:34 vsftp-3.0.2-1.x86_64.rpm
[root@lastack /]#

vsftp-3.0.2-1.x86_64.rpm 这是制作的rpm包

fpm 参数:

  • -f :强制覆盖, 已有同名rpm包会强制覆盖;
  • -n :指定的rpm包名;
  • -p :指定的rpm包文件放置位置;
  • -v :指定的rpm包版本;
  • -d :指定依赖的软件, 如 【-d  'name' 】也可以指定软件包版本  【-d ‘name > version' 】 例如:  【-d  'ruby >= 2.3.0' 】;
  • -a :指定系统架构,如果是noarch则为’-a all’ 或者 ‘-a native’ [x86_64] 当软件不区分64位或32位的时候可以 noarch;
  • -s :指定INPUT的数据类型 ([“-s dir”] 省略数据类型);
  • -m :指定打包人员[Packager] ([ -m ‘user’]);
  • -C :指定打包的相对路径,如-C /tmp/apr/ 而打包机器的数据包路径是/tmp/apr/{opt,usr,etc} 那安装这个rpm包后,在本地的数据就是/opt/,/usr/,/etc/;
  • -t :指定需要制作成什么包,可选项有(deb,rpm,solaris,etc)
  • 最后是要打进去的文件路径

2.5 测试RPM包

找一台新机器,发送rpm包。并安装。

# 推送rpm包,生产环境中可以做一个本地的yum仓库,用来存放这些rpm包
[root@lastack /]# scp vsftp-3.0.2-1.x86_64.rpm root@192.168.56.11:/root/
The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
ECDSA key fingerprint is SHA256:e10LbCAztVAVwuuvft9+2eiSmSSWomL0bt40Lp9rNGE.
ECDSA key fingerprint is MD5:82:f0:67:88:e6:40:cc:fe:4f:d8:63:f7:07:ce:af:4a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.11' (ECDSA) to the list of known hosts.
root@192.168.56.11's password:
setterm: $TERM is not defined.
vsftp-3.0.2-1.x86_64.rpm 100% 163KB 19.6MB/s 00:00
[root@lastack /]#

# 测试机安装 vsftp-3.0.2-1.x86_64.rpm,直接rpm -ivh 安装即可
rpm包制作以vsftpd为例

可以看下解压的文件:

rpm包制作以vsftpd为例
rpm包制作以vsftpd为例

启动服务,运行下:

rpm包制作以vsftpd为例

客户端连接测试:

rpm包制作以vsftpd为例
rpm包制作以vsftpd为例

rpm 制作成功。

 

2.6 卸载rpm包

rpm -ev vsftp 卸载即可

rpm包制作以vsftpd为例

3.0 在rpm包制作过程中,可以添加一些其他信息,有些参数可以参考下:

--description         :rpm包描述
--conflicts         :指定冲突软件
--url                 :指定站点,一般是官网地址
--verbose             :安装时打印详细过程
--after-install     :包安装之后执行的脚本 也可写作 --post-install FILE
--before-install     :包安装之前执行的脚本
--after-remove         :包卸载之后执行的脚本
--before-remove     :包卸载之前执行的脚本
--after-upgrade     :包更新之后执行的脚本[仅支持 deb 和 rpm 这两种包]
--before-upgrade     :包更新之前执行的脚本
--no-depends         :表示没有依赖包,和前面的-d指定依赖,不能共用
--config-files         :指定配置文件,也可以是目录
--directories         :指定包目录

这是写常用的,基本可以满足平常需要了,还有一些其他参数,可以看下fpm --help



https://www.hugbg.com/archives/523.html
逸兴
  • 本文由 发表于 2019-09-1710:47:48
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
自动更新SSL证书 默认分类

自动更新SSL证书

现在免费的SSL证书只有三个月有效期,有一个博客和图床都用的ssl证书到期需要重新签发,挺麻烦的。原本想着写个脚本通过阿里云的 OpenAPI 进行证书的签发和部署,但是偶然发现了 ACME 这个项目...
推导式、生成式与生成器 基础语法

推导式、生成式与生成器

推导式 概述 Python中的推导式是一种快速、简洁的数据结构创建方式,不需要手动创建数据结构中的每一个元素,类似于给出一个规律,python会根据这个规律自动填充数据结构。支持有列表推导式、字典推导...
CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾) 默认分类

CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾)

一、漏洞详情 Windows Server是由微软开发的操作系统系列,专为服务器环境设计,用于管理网络、数据存储和应用程序的运行。它为企业和组织提供了稳定、可靠的服务器平台,支持各种规模的网络基础设施...
Django DRF禁用URL末尾斜杆(:) 点点滴滴

Django DRF禁用URL末尾斜杆(:)

一、关于URL末尾斜杆 比如http://127.0.0.1:8000/api/v1/register 和 http://127.0.0.1:8000/api/v1/register/, 这两个是同一...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  2   博主  0
    • root root

      光明,制造瞎子 —王者荣耀

      • 浮光 浮光

        目标是以科学的力量凌驾于超能力之上,为了伯伦希尔的荣耀。 —小绿和小蓝