Linux 软件包管理
老师笔记
一、 两大流行软件包管理工具
RPM 和 DPKG
二、RPM 和 SRPM
RPM 全名是 RedHat Package Manager
命名规则
httpd-2.4.6-67.el7.centos.x86_64.rpm
| | | | | | |
| | | | | | |___.rpm-------软件包后缀名,一般为 *.rpm 或 *.src.rpm
| | | | | |________.x86_64----适用硬件平台,一般为 x86_64、i386 等
| | | | |_______________.centos----适用操作系统,noarch为通用版本
| | | |_____________________.el7-------发行商版本号,el5为CentOS5与HREL5以下使用
| | |________________________.67--------编译版本号,表示第几次编译
| |_____________________________.2.4.6-----软件版本号,分别为:主版本号.次版本号.修正号
|___________________________________.httpd-----软件包名称
平台 noarch:
就是没有任何硬件等级上的限制。一般来说,这种类型的 RPM 档案,里面应该没有 binary program 存在, 较常出现的就是属亍 shell script 方面的软件。
MD5校验
[root@kvm-docker ~]# md5sum anaconda-ks.cfg
bb6e974d74a51b24d0576edca461a03b anaconda-ks.cfg
SRPM
是 Source RPM 的意思,也就是这个 RPM 档案里面含有原始码,扩展名为***.src.rpm
为何说 CentOS 是『社群维护的企业版』呢? Red Hat 公司的 RHEL 发布出后,连带会将 SRPM 发布出来。
社群的朋友就将这些 SRPM 收集起来幵重新编译成为所需要的软件,再重复释出成为 CentOS,所以才能号称与 Red Hat 的 RHEL 企业版同步啊!真要感谢 SRPM !如果想要理解 CentOS 是如何编译一支程序的, 也能够透过学习 SRPM 内含的编译参数,来学习的啊!
rpm 包的安装:
rpm 包安装工具,无法解决软件包的依赖性
rpm -ivh 软件包名
rpm 包的管理
rpm -qa | grep 软件包名 //查询系统已安装的软件
rpm -qi 查询已安装软件包的信息
rpm -ql 软件包名 // 列出所有的已安装文件
rpm -qc 软件包名 // 列出配置文档
rpm -qf //查询这个文件是哪个软件包安装的,需要输入绝对路径的完整文件名
rpm -V 校验已安装到系统中的文件的改动情况
-V 后的值:
5 md5校验值
S 文件大小
L 链接文件
T 文件的创建时间
D 设备文件
U 文件的所属主
G 文件的所属组
M 文件的权限
经典实例
rpm2cpio 命令可以从一个 rpm 包中提取出文件。
当不小心删除了系统里的一个重要的配置文档,该怎么找回来
首先, 查询这个文件是哪个软件包安装的
rpm -qf 绝对路径的完整文件名
之后,将需要的文件提取到当前的工作目录
rpm2cpio 软件包名.rpm | cpio -idv ./要提取的文件路径
要提取的文件路径 需要是 这个软件包安装到系统中后,这个文件的路径。
比如 /usr/bin/tree 命令如下:
- rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -idv ./usr/bin/tree
YUM 安装
YUM 是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke开发团队进行改进,遂有此名。yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header, header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。它能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。自己本身也可以做yum服务器,本身可以根据光盘镜像做yum服务器。
配置文件
通过配置文件的设置,可以把从远程仓库安装的软件保存到本地。
配置文件路径: /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
...略...
cachedir 设置缓存软件到本地的路径
keepcache 设置是否保存缓存的软件包,0 不保存, 1 保存
假如想把已安装好的软件包保存到本地,需要设置 keepcache=1
PID 文件
/var/run/yum.pid
这个文件在每次使用 yum 命令时被创建,正常安装软件结束后被删除。有时候非正常退出 yum install 命令时,这个文件会保留,并且里面写入了本次 yum install 命令的进程号。
因为 YUM 是单进程的,就是每次只能运行一个 yum install 命令, 所以假如上次的命令没有正常结束,本次的命令就无法执行,此时就会报错,解决方法就是删除 /var/run/yum.pid 文件后,重新执行 yum install 命令即可。
YUM 源配置文件
- /etc/yum.repos.d
ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo docker-ce.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
在这个目录下存放了可以使用的软件包仓库的地址等信息,都是以 .repo 结尾的文件。
- 文件内容:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
- [base] 代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库名称
- name 为库的名称,自定义但不需要太长
- mirrorlist=:列出这个软件库可以使用的软件仓库的URL列表,如果不想使用,可以注解到这行;
- baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去查找仓库URL, baseurl 则是指定固定的一个软件库URL!
- baseurl 支持的传输协议,可以为
file://
ftp://
http://
https://- enabled 为是否启用库 1 代表启用;0 代表关闭
- gpgcheck 为检查软件包的签名,1 为检查;0 为不检查
- gpgkey 数字签名的公钥位置
基本用法
# 安装软件
[root@localhost ~]# yum -y install httpd # -y表示后面的交互式询问默认选为yes
# 更新所有软件(包括内核)
[root@localhost ~]# yum update
# 升级指定软件
[root@localhost ~]# yum update httpd
# 列出所有可更新的软件
[root@localhost ~]# yum check-update
# 列出所有可安装的软件清单
[root@localhost ~]# yum list
# 查找软件包
[root@localhost ~]# yum search httpd
# 删除软件包
[root@localhost ~]# yum remove httpd
# 清理yum的缓存
[root@localhost ~]# yum clean all
# 生成yum的缓存
[root@localhost ~]# yum makecache
// 查询 pstree 文件由那个软件包安装
yum provides pstree
软件包组
yum [群组功能] [软件群组]
选项与参数:
grouplist :列出所有可使用的“软件群组组”,例如 Development Tools 之类的;
groupinfo :后面接 group_name,则可了解该 group 内含的所有软件名;
groupinstall:这个好用!可以安装一整组的软件群组,相当的不错用!
groupremove :移除某个软件群组;
自建 YUM 源(仓库)
(a)基于光盘镜像的 YUM 源
节省硬盘空间,但是不可扩展
CentOS_BuildTag :制作标签
EFI :EFI启动方式文件
EULA :最终用户许可协议
GPL :GPL授权协议
images :网络PXE启动文件
isolinux :挽救模式文件
LiveOS :微型系统镜像
Packages :自带RPM包 # 重点
repodata :YUM源数据库 # 重点
RPM-GPG-KEY-CentOS-7 :公钥信息文件
RPM-GPG-KEY-CentOS-Testing-7 :公钥信息文件
TRANS.TBL :光盘目录
在光盘镜像中还存放着一个repodata目录,这个目录下存放的yum源的数据库文件,也可以理解为这里记录了软件包的互相依赖关系。只要把光盘镜像挂载到服务器上,然后配好yum源为挂载的镜像,当使用yum安装软件的时候yum就会到这个目录下面去查询数据库,然后再到Packages目录下去拿rpm包进行安装,所以简单理解可以说repodata是记录Packages目录下所有 rpm 包的数据库。
1. 先在/目录下创建一个iso的空目录(不要在空目录内存放东西!目录名称可自定义)
1、 [root@localhost ~]# mkdir /iso
2. 将光盘镜像挂载到刚刚创建的/iso目录
1、[root@localhost ~]# mount /dev/cdrom /iso/
mount: /dev/sr0 写保护,将以只读方式挂载
3. 将原有的yum源文件移走备份
1、[root@shark ~]# mkdir /etc/yum.repos.d/back
2、[root@shark ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/
4. 配置yum源
1、[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Local-ISO.repo
[cdrpm]
name=cdrpm
baseurl=file:///iso
enabled=1
gpgcheck=0
5. 清理缓存并缓存新的数据
[root@localhost ~]# yum clean all && yum makecache
(a)完成
(b)基于本地磁盘配置yum源
可扩展性强,就是可以向本地的仓库添加其他的 rpm 软件包
会占用本地的磁盘空间,只可以对本机提供 YUM 服务。
1. 先安装 createrepo 工具
createrepo建立关系依赖包,生成元数据
1、[root@shark ~]# yum -y install createrepo
2. 先把光盘镜像里的Packages目录拷贝到本地磁盘(目录名称自取,后面保持一致)
1、[root@localhost ~]# mkdir /localYum
2、[root@localhost ~]# cp -a /iso/Packages/ /localYum/
3. 生成元数据
createrepo /localYum/Packages
查看生成的 repodata 目录
ll /locaYum/Packages/repodata/
4. 配置yum源
vim /etc/yum.repos.d/CentOS-Local.repo
[localrpm]
name=localYum
baseurl=file:///locaYum/Packages
enabled=1
gpgcheck=0
5. 清理缓存并缓存新的数据
(c)基于 FTP 文件传输协议的 YUM 源
可扩展性强,可以向互联网上的任意主机提供 YUM 服务,前提是 互联网上的主机可以访问到 FTP Server
会占用 FTP Server 的磁盘空间
1、先安装 FTP Server 软件
可以是任意能提供 FTP 服务的软件,这里使用的是 VSFTPD
yum install vsftpd -y
2、保证下面的选项在配置文件中是打开的,一般是默认值
配置文件: /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
3、启动服务,并检查监听端口
systemctl start vsftpd
[root@shark ftp]# ss -ntal |grep 21
LISTEN 0 1024 127.0.0.1:9121 *:*
LISTEN 0 32 :::21 :::*
4、拷贝数据包到 FTP Server 的根目录下的指定文件夹下
这里为了演示方便,可以直接拷贝 ISO 光盘镜像中的数据包目录到 /var/ftp/ftpYum/ 目录下
实验环境
FTP server 地址 127.0.0.1
FTP server 根目录 /var/ftp
rpm 软件包存放的目录是 /var/ftp/ftpYum/Packages
我们计划把创建的 源数据目录 repodata 放在 /var/ftp/ftpYum 下
这个可以使用 -o 选项实现, o 是小写字母的 o
拷贝光盘上的软件包目录到 /var/ftp/ftpYum/ 下
mkdir /var/ftp/ftpYum
mount /dev/cdrom /media
cp -a /media/Packages/ /var/ftp/ftpYum/
5、创建源数据
cd /var/ftp
createrepo -o ftpYum --baseurl=ftpYum/Packages ftpYum/Packages
-o 源数据存放在这个目录下 查找软件包的时候这个作为基础 url 对这个目录下的软件包创建源数据
源码安装
获得源码包途径
官方网站,可以获得最新的软件包。
Nginx: www.nginx.org
安装源码包 准备工作
1. 准备编译环境,如编译器
gcc
gcc-c++
make
一般我们会安装一个开发工具包。这个工具包可以使用如下命令安装
yum -y groupinstall "Development Tools"
2. 准备软件自身所依赖的软件包
软件自身依赖的软件包信息,这个软件的官方网站都会提示。
比如 Nginx 需要 pcre 等,用于支持正则表达式,地址重写rewrite
zlib-devel 用于压缩
yum -y install pcre pcre-devel zlib-devel openssl-devel
3. 进行配置
编译时配置参数的意义
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-pcre
开始编译
编译需要用的 make,取保已经安装 make
yum install make
取到源码解压的目录下执行
make
或者
make -j 2
-j 后面跟的是计算机的 cpu核心数
安装
还是在源码解压后的目录下执行
make
make install