1.0 常用软件安装方式
常用的软件安装方式有源码编译安装, yum 安装 以及容器方式。
- 源码编译,优点可以按需安装软件功能,自定义安装目录,及安装选项。缺点也很明显,一个是依赖问题比较麻烦,安装复杂,另外安装时间太长(二进制安装很快,不过安装包比较大);
- yum 安装则是相反,安装很快,自动解决依赖问题,但是软件目录,和相关功能都是预定义好的,不方便定制;
2.0 制作rpm包 安装
2.1 打包软件包概述
下面介绍一种制作rpm包安装的方式,这种方法兼容了 编译 和 yum 安装;其实就是将安装好的软件,打一个rpm包,然后直接安装这个rpm即可。这种方法,初始准备比较麻烦,对环境比较依赖,之后使用就很简单了。不过基本只适用于你自己的环境,别人拿去可能就不能用来。
RPM打包流程:
- 先安装好软件包,比如 nginx,mysql(可以编译,可以yum);
- 配置安装的软件,主要是一些通用的配置;
- 安装fpm 工具,将前面的软件的所有文件,都打包成一个rpm格式的软件包(因为Linux一切皆文件,将软件安装后的文件打包,也就相当于把这个软件打包了。);
- 打包过程中,可以指定需要的依赖包(这些依赖包,在之后安装时会自动安装,也可以将这些依赖包,同时打包),还可以将脚本放入 rpm(这个脚本会在安装rpm包时,首先运行);
- rpm 安装 制作好的rpm包;
RPM包安装流程:
- 解压安装包;
- 运行打包时指定的 --before-install脚本,这个脚本中 可以做一个初始化设置,比如创建目录,创建用户等;
- 安装指定的依赖包(这些依赖包,可以yum安装。如果安装环境没有yum,可以将其打包到 rpm 包,由before-install 脚本进行安装,甚至可以将依赖包也制作成rpm包,一起安装 ),这就需要一开始在模板机上,先收集依赖包,后面会介绍包收集方式;
- 将解压到的文件,放到指定位置;
- 安装成功。
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都要包安装的包保存一份,还是很占空间的。
开启方法:
包缓存目录结构:
安装包会存放在对应yum源的packages目录下.
其实,我们平常使用yum clean all 清理yum 缓存时,不就是删除的这个目录吗。
2.2.2 测试包缓存
[root@lastack packages]# yum install nano
其实还有一种比较“变态”的做法,就是不去收集依赖,使用 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
可以看到当前有两个 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
2.3.1 升级ruby
我当前使用的阿里源,可以看到最多支持到2.0.0.648,这里使用rvm升级ruby, rvm 是ruby的一个版本管理器。
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
2. 安装一个2.3.3 版本的ruby
rvm install 2.3.3
指定版本
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 制作成功。
2.6 卸载rpm包
rpm -ev vsftp 卸载即可
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
2020-04-18 12:20 下午 1F
光明,制造瞎子 —王者荣耀
2020-04-20 9:41 上午 2F
目标是以科学的力量凌驾于超能力之上,为了伯伦希尔的荣耀。 —小绿和小蓝