rpm与fpm
软件的安装方式
- 编译安装:优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长
- yum安装:优点是全自动化安装,不需要为依赖问题发愁,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。
- 编译源码:根据自己的需求做成 RMP包 ==> 搭建yum仓库 ==> yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,一般人不会定制RPM包。
RPM概述
RPM全称是Red Hat Package Manager(RedHat包管理器)。几乎所有的Linux发型版本都使用这种形式的软件包管理安装、更新和卸载软件。
rpm命令有5种基本功能(不包括创建软件包):安装、卸载、升级、查询和验证。
关于rpm命令的使用可以用rpm –help来获得
rpmbuild
rpmbuild是reahat系的原声打包命令,这个命令的使用难点主要在于spec文件编写,一个类似于kickstart的ks.cfg文件。
作为一个使用工具,种种繁琐,在没有替代品时还能存活。当有了其他简易工具时,他就到了完蛋的时候
fpm
fpm 是将一种类型的包转换成另一种类型
支持的源类型包
类型 | 说明 |
---|---|
dir | 将目录打包成所需要的类型,可以用于源码编译安装的软件包 |
rpm | 对rpm进行转换 |
gem | 对rubygem包进行转换 |
python | 将python模块打包成相对应的类型 |
支持目标类型包 | |
rpm | 转换为rpm包 |
deb | 转换为deb包 |
solaris | 装环卫solaris包 |
puppet | 转换为puppet模块 |
fpm安装
fpm是ruby写的,因此系统环境需要ruby,而且ruby版本号大于bshards运行的版本。
yum安装ruby模块
|
|
查看ruby的版本
|
|
替换gem源
ruby中国镜像:https://ruby-china.org/
|
|
- -r remove xx 删除一个gem源列表
- -l list gem源列表
安装错误
此问题提示 ruby的版本至少要求为1.9.3,在我们yum安装的ruby为1.8.7
|
|
解决方法:
升级ruby版本
安装低版本fpm
ERROR: Could not find a valid gem 'fpm' (>= 0) in any repository
原因:gem源失效,替换gem源即可
|
|
升级ruby
- 下载rvm
|
|
rvm会下载安装到/usr/local/rvm下
- 列出已知的ruby版本
|
|
- 按照提示安装ruby1.9.3
|
|
- 将安装的ruby切换为默认
如果想设置为默认版本,这样一来以后新打开的控制台默认的 Ruby 就是这个版本
错误:RVM is not a function
|
|
原因:需要添加到系统变量
|
|
安装低版本fpm
指定版本安装
|
|
查看安装完的fpm版本号
|
|
卸载一个安装版本
|
|
https://www.ruby-lang.org/zh_cn/downloads/
编译安装ruby
参考资料:
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 |
yum安装是如何解决依赖问题的?
在使用yum安装软件A时,yum会在下载完A的rpm包后,对该rpm包进行检查(rpm包会给出安装该rpm包所依赖的基础库和软件)。如果检查出A的安装还要依赖软件B,那么此时yum就会自动下载并安装B。B安装完毕后,就会继续安装A。如果是内网yum源的话,我们只需要把B放在内网yum源即可。如果检查出A的安装不需要其他软件的支持,那么yum会自动安装A。因此使用rpm -d添加依赖关系
打包fpm
|
|
相对路径问题
使用相对路径打包,会直接保存为/目录。这样就不会是我们指定的目录了。
|
|
制定依赖包
|
|
在安装时就会检测依赖包,如无此包就报错
|
|
安装完成后指定要执行的脚本
|
|
本地模拟yum安装自己打包的软件
|
|
初始化后启动MySQL并登陆
|
|
打包错误
原因未知
解决方法:可能是打包时会产生大量的缓存,导致空间不够,删除一些文件后问题再没出现过
|
|
YUM
什么是yum
yum主要用于自动安装、升级rpm软件包,他能自动查找并解决rpm包之间的依赖关系。要成功的使用yum工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软件仓库我们习惯称为yum源,网络上有大量的yum源,但由于收到网络环境的限制,导致软件安装耗时过长甚至失败。特别是当有大量服务器大量软件包需要安装时,缓慢的进度条令人难以忍受。因此我们在优化系统时,都会更换国内的源。
相比较而言,本地yum源服务器最大优点是局域网的快速网络连接和稳定性。有了局域网中的yum源服务器,即使在internet连接中断的情况下,也不会影响其他yum客户端的软件安装和升级
创建yum源
上传rpm包到此目录,此目录下面还可以包括文件夹
|
|
yum下载的文件缓存在
|
|
安装createrepo工具
|
|
初始化repodata索引文件
|
|
提供yum服务
可以用apache或nginx提供web服务,但用Python的http模块更简单,适用于内网环境。CentOS 6最小化安装后自带python。
- 利用python的http模块提供服务
|
|
- 利用nginx提供yum源服务
|
|
添加新的rpm包
|
|
每当该目录新增软件包需要更新源
|
|
本地客户端配置
/etc/yum.repos.d/test.repo
[test]
name=Server
baseurl=http://192.168.2.110
enable=1
gpgchek=0
使用配置的自定义的源安装PHP
|
|
yum命令
选项 | 说明 |
---|---|
install | 安装软件包 yum install httpd |
list | 列出yum仓库内文件 yum list httpd,可搜索带名称的特定软件包 |
search | 不急的软件报的确切名称,可以使用search函数,搜索与指定软件包的名称相匹配的所有可用软件包yum search httpd |
provides | 查找某个特定文件属于哪个软件包。yum provides /app/apache/confi/http.conf |
grouplist | 列出所有可用群组 |
groupinstall | 安装群组软件包yum groupinstall develment-tools |
repolist | 列出启用的软件库 |
repolist all | 列出所有软件库,包括禁用的也列出 |
–enablerepo | 安装来自特定软件库的软件包 |
–disablerepo | 不安装来自指定软件库的软件包yum –enablerepo=test –disablerepo=base,extras… install httpd |
chean all | 清理yum缓存内容 |
history | 查看yum历史记录 |
yum源
Yum源分为三大类:
- Base:就是你下载的光盘镜像里面的DVD1
- Extra:就是你下载光盘镜像的DVD2
- Epel:属于额外的,得到Epel官方获取
将光盘挂载到系统上,你会发现里面有个packages目录,里面全是rpm包
|
|
配置yum源
找一个镜像站点,国内常用镜像站点
系统yum源路径,执行yum时,它只会读取yum.repo.d下这个目录下的所有以.repo结尾的文件。
|
|
repo文件的写入是有其特殊格式的,如下:
|
|
所谓的自己配置Yum仓库就是把网上那些程序包全下载下来,在本地(内网)提供Yum。除了epel提供的所有包外,还有镜像光盘DVD1,DVD2!
yum服务配置文件
配置文件分为两部分main和repository
配置本地yum源
禁用默认的yum网络源,将yum网络源配置文件改名为CentOS-Base.repo.bak,否则会现在网络源中寻找适合的包,改名之后直接从本地源读取。也可以向上面一样自己写一个文件。
全局配置文件
main部分定义了全局配置选项,整个yum配置文件应该只有一个main,/etc/yum.conf
# /etc/yum.conf
[main]
# cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever。
cachedir=/var/cache/yum/$basearch/$releasever
# 设置 keepcache=1,yum 在成功安装软件包之后保留缓存的头文件 (headers) 和软件包。默认值为 keepcache=0 不保存
keepcache=[1 or 0]
# debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
debuglevel=2
logfile=/var/log/yum.log
# pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。
pkgpolicy=newest
# 指定一个软件包,yum会根据这个包判断你的发行版本,默认是RedHat-release,也可以是安装的任何针对自己发行版的rpm包
distroverpkg=CentOS-release
# tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
tolerant=1
# exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
exactarch=1
# retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。
retries=20
obsoletes=1
# gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
gpgcheck=1
# 该选项用户指定 .repo 文件的绝对路径。.repo 文件包含软件仓库的信息 (作用与 /etc/yum.conf 文件中的 [repository] 片段相同)。
reposdir=[包含 .repo 文件的目录的绝对路径] # 默认是 /etc/yum.repos.d/ 低下的 xx.repo后缀文件
# exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
exclude=xxx
第二部分repoitory
repoitory部分定义了每个源/服务器的具体配置,可以有一到多个,位于/etc/yum.repos.d/目录下的各文件中。这个字段其实也可以在yum.conf里面直接配置
repo文件的格式
|
|
变量
$releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
$arch,cpu体系,如i686,athlon等
$basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。