linux包管理

两个常用的软件包管理工具

RPM 和 DPKG

distribution代表 管理机制 使用指令 在线升级指令
Red Hat/CentOS RPM rpm,rpmbuild yum
Debian/Ubuntu DPKG dpkg apt-get

RPM

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-----软件包名称

SRPM

是 Source RPM 的意思,也就是这个 RPM 档案里面含有原始码,扩展名为***.src.rpm

为何说 CentOS 是『社群维护的企业版』呢? Red Hat 公司的 RHEL 发布出后,连带会将 SRPM 发布出来。
社群的朋友就将这些 SRPM 收集起来幵重新编译成为所需要的软件,再重复释出成为 CentOS,所以才能号称与 Red Hat 的 RHEL 企业版同步啊!真要感谢 SRPM !如果想要理解 CentOS 是如何编译一支程序的, 也能够透过学习 SRPM 内含的编译参数,来学习的啊!

rpm包的管理

rpm -qa | grep 软件包名 //查询系统已安装的软件
rpm -ql 软件包名  //  列出所有的已安装文件
rpm -qc 软件包名  // 列出配置文档
rpm -qi 查询已安装软件包的信息
rpm -V 校验已安装到系统中的文件的改动情况
-V 后的值:
5 md5校验值
S 文件大小
L 链接文件
T 文件的创建时间
D 设备文件
U 文件的所属主
G 文件的所属组
M 文件的权限

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服务器
yum provides tre* //查询由哪个软件提供的

关于配置文件

配置文件路径: /etc/yum.conf

我们通过配置文件的设置,可以把从远程仓库安装的软件保存到本地
cachedir 设置缓存软件到本地的路径
keepcache 设置是否保存缓存的软件包,0 不保存, 1 保存
假如想把已安装好的软件包保存到本地,需要设置 keepcache=1

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0

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

自建 YUM 源(仓库),基于光盘镜像的 YUM 源

Packages :自带RPM包 # 重点
repodata :YUM源数据库 # 重点

在光盘镜像中还存放着一个repodata目录,这个目录下存放的yum源的数据库文件,也可以理解为这里记录了软件包的互相依赖关系。只要把光盘镜像挂载到服务器上,然后配好yum源为挂载的镜像,当使用yum安装软件的时候yum就会到这个目录下面去查询数据库,然后再到Packages目录下去拿rpm包进行安装,所以简单理解可以说repodata是记录Packages目录下所有 rpm 包的数据库

基于本地磁盘配置yum源

可扩展性强,就是可以向本地的仓库添加其他的 rpm 软件包
会占用本地的磁盘空间,只可以对本机提供 YUM 服务。

  1. 先在/目录下创建一个iso的空目录(不要在空目录内存放东西!目录名称可自定义)
    1.1 [root@localhost ~]# mkdir /iso

  2. 将光盘镜像挂载到刚刚创建的/iso目录
    [root@localhost ~]# mount /dev/cdrom /iso/
    mount: /dev/sr0 写保护,将以只读方式挂载

  3. 将原有的yum源文件移走备份

[root@shark ~]# mkdir /etc/yum.repos.d/back
[root@shark ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/

  1. 配置yum源
    [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Local-ISO.repo
    [cdrpm]
    name=cdrpm
    baseurl=file:///iso
    enabled=1
    gpgcheck=0

  2. 清理缓存并缓存新的数据
    [root@localhost ~]# yum clean all && yum makecache

基于 FTP 文件传输协议的 YUM 源

可扩展性强,可以向互联网上的任意主机提供 YUM 服务,前提是 互联网上的主机可以访问到 FTP Server
会占用 FTP Server 的磁盘空间
getenforce //获取防火墙状态
vim /etc/selinux/config //修改linux内核中防火墙的信息


image.png

systemctl stop firewalld
setenforce 0 //关了防火墙
1.先安装 FTP Server 软件
可以是任意能提供 FTP 服务的软件,这里使用的是 VSFTPD

yum  install  vsftpd   -y

2.保证下面的选项在配置文件中是打开的,一般是默认值

配置文件: /etc/vsftpd/vsftpd.conf
anonymous_enable=YES

3.启动服务,并检查监听端口
20端口传输数据
21端口传输控制信号

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

4.拷贝光盘上的软件包目录到 /var/ftp/ftpYum/ 下
mkdir /var/ftp/ftpYum

mount /dev/cdrom /media

cp -a /media/Packages/ /var/ftp/ftpYum/

createrepo /var/ftp/ftpYum/ //将依赖包安装到与Packages同一目录下

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Local-ISO.repo
[cdrpm]
name=cdrpm
baseurl=file://127.0.0.1/ftpYum
enabled=1
gpgcheck=0

yum clean all &&yum makecache

yum remove tree
yum install -y tree

[闫哥笔记]
(https://www.jianshu.com/p/9188afa43cfd

你可能感兴趣的:(linux包管理)