2. Linux 软件管理 002

发布时间 2023-11-29 00:09:45作者: 谱次·

3)搭建企业内部 Yum 仓库

利用 HTTPD 搭建 企业内部私有仓库。

[ 虚拟机演示:挂载一个新的 CD 光盘镜像源 ]

1)CD 光盘 镜像源

截图.png

// `scandisk` 扫描新加的磁盘

echo '- - -' > /sys/class/scsi_host/host0/scan

echo '- - -' > /sys/class/scsi_host/host1/scan

echo '- - -' > /sys/class/scsi_host/host2/scan

截图.png

 

2)部署 HTTPD

1. 安装 HTTPD

yum install httpd -y

 

2. 启用 并 开机自启

systemctl start httpd

systemctl enable httpd

 

3. 关闭防火墙 and SELinux

systemctl stop firewalld

systemctl disable firewalld

sed -i 's/enforcing/disabled/g' /etc/selinux/config

setenforce 0

截图.png

 

3)配置站点目录

1. 切换至 HTTPD 默认站点目录

cd /var/www/html

 

2. 创建子目录

mkdir centos/{7,8} -p

 

3. 验证

// `有安装` tree, 则不执行

// `无安装` tree, 则执行安

rpm -q tree || yum install tree -y

tree centos/

截图.png

 

4)挂载光盘

mount /dev/sr1 /var/www/html/centos/7

截图.png

 

5)验证仓库

http://192.168.18.141/centos/7/

截图.png

 

 

6)客户端编写 repo 配置文件

vim 1.repo

 

[Base]

name=CentOS7

baseurl=http://192.168.18.141/centos/$releasever

gpgcheck=0

enabled=1

yum repolist

yum list vsftpd

yum install vsftpd -y

截图.png

完成

 

// `scandisk` 扫描新增的磁盘

echo '- - -' > /sys/class/scsi_host/host0/scan

echo '- - -' > /sys/class/scsi_host/host1/scan

echo '- - -' > /sys/class/scsi_host/host2/scan

截图.png

 

// 将该 CD 光盘镜像挂载至 centos/8 站点目录

mount /dev/sr0 /var/www/html/centos/8/

截图.png

 

7)createrepo 命令

用于为 YUM 仓库 创建必要的元数据目录(repodata),以便 YUM 工具能够正确地查找和安装软件包。

// 举例

cd /var/www/html/centos

 

// 自建一个放置独立软件包的 repo 目录

mkdir testrepo && cd testrepo

 

// 上传独立软件包

截图.png

 

在这种情况下,即使我们编写了仓库配置文件,将其指向了特定的独立软件包存放目录。

但由于 我们没有为该目录生成必要的 repodata 元数据,导致无法成功索引和管理软件包数据。

// `编写仓库配置文件`

vim 1.repo

[Base]

name=CentOS7

baseurl=http://192.168.18.141/centos/$releasever

gpgcheck=0

enabled=1

 

[testrepo]

name=CentOS7

baseurl=http://192.168.18.141/centos/testrepo

gpgcheck=0

enabled=1

 

// 验

yum repolist

截图.png

 

给软件包目录生成 repodata 元数据目录

1. 切换至软件包目录

cd /var/www/html/centos/testrepo

 

2. "创建 repodata 元数据目录"

createrepo .

 

3. 验证 repodata 目录是否成功生成

ls -l

 

4. 给软件包目录`生成 repodata 元数据目录后`

// `成功索引到软件包`

yum repolist

截图.png

 

8)配置 epel 源

1. 同步网络 epel 源

// 编写 repo 配置文件

// `同步网络 epel 源`

vim epel.repo

[epel]

name=epel

baseurl=https://mirrors.cloud.tencent.com/epel/$releasever/$basearch

https://repo.huaweicloud.com/epel/$releasever/$basearch

https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch

gpgcheck=0

enabled=1

 

// 验证

yum repolist

截图.png

 

2. 下载相关仓库和元数据

// 下载相关仓库和元数据

// dnf reposync --repoid=epel --download-metadata -p /var/www/html // CentOS 8

 

// `基于 rsync 同步 epel 源`

rsync -avrt rsync://rsync.mirrors.ustc.edu.cn/epel/ /var/www/html/centos/epel // CentOS 7

 

// `下载相关 KEY 文件`

wget -P /var/www/html/centos/epel/ https://mirrors.cloud.tencent.com/epel/RPM-GPG-KEY-EPEL-8

截图.png

 

9)CentOS 7 小细节

< Linux 小技巧 >

Yum( Yellow dog Updater, Modified)是一款广泛用于 RedHat 和 CentOS 等系统的 RPM 软件包管理工具。

它建立在 RPM 包管理系统之上,具备自动下载和安装 RPM 包的能力。其中一个主要优点是它能够自动解决依赖关系,让我们不再需要手动逐个的下载和安装依赖的软件包,大大简化了软件包管理的过程。

并且 Yum 提供了一系列简洁而易记的命令,用于查找、安装、卸载单个软件包、或一组软件包,甚至是系统上的所有软件包。

当我们执行 yum install httpd 时,您会注意到 YUM 工具 不仅会安装指定的 httpd 软件包,还会自动安装所依赖的其他软件包。

这是因为许多软件包在运行时需要一些额外的组件或库来支持其功能,这些被称为 依赖关系。

然而,当我们执行 yum remove httpd 时,情况有所不同。YUM 工具会默认仅卸载指定的软件包 httpd,而不会自动删除其他可能仍然被其他软件包使用的共享依赖项。

这是为了防止意外地卸载其他软件包所依赖的组件,导致系统不稳定。

这种行为的目的是为了保持系统的完整性和稳定性。如果您确定某些共享依赖项不再被其他软件包使用,可以使用 yum autoremove 命令来自动删除不再需要的依赖项。

总之,YUM 在安装和卸载软件包时考虑了依赖关系,以确保系统的安全性和稳定性。

在卸载软件包时,它会默认保留可能被其他软件包使用的共享依赖项,除非您明确指定要删除不再需要的依赖项。

// 安装 httpd 软件包

yum install httpd

 

// 卸载 httpd 软件包

yum remove httpd

截图.png

截图.png

 

[ 那我们如何 干净卸载 所安装软件的所有软件包 ]

// 显示系统中`已经执行过的软件包操作历史记录`

yum history

 

// 显示`历史记录标识号为 3 `的操作的详细信息

yum history info 3

截图.png

 

撤销历史操作

// `撤消历史记录标识号为 3 的操作`

// 操作号为 3 的操作是一个安装、升级或删除软件包的操作, 运行此命令将会尝试将系统恢复到执行该操作之前的状态。

yum history undo 3

截图.png

 

[ CentOS 8 系统,安装多少包即会卸载多少包。]

截图.png

 

4)软件包组

// 列出系统中`可用的软件包组`

yum group list

 

// 安装一个名为 "Server with GUI" 的软件包组

// 这个软件包组通常包含用于图形用户界面(GUI)的软件和工具, 适用于服务器系统需要有图形界面的情况。

yum group install "Server with GUI"

截图.png

// 安装

yum group install "Server with GUI"

 

5)仓库缓存

清除目录 /var/cache/yum/ 缓存

// CentOS 7 `查看仓库缓存路径`

cat /etc/yum.conf

截图.png

 

du -sh /var/cache/yum/x86_64/7/查看缓存目录数据大小

yum clean all 清理 yum 的缓存。它会删除所有下载的 RPM 软件包和相关的元数据,以释放磁盘空间。

yum makecache 用于重新生成 yum 的元数据缓存。

du -sh /var/cache/yum/x86_64/7/

 

yum clean all

 

du -sh /var/cache/yum/x86_64/7/

 

yum makecache

 

du -sh /var/cache/yum/x86_64/7/

截图.png

 

或者使用 rm -rf 删除缓存目录下的数据也可以。

rm -rf /var/cache/yum/x86_64/7/*

截图.png

 

6)命令总结

// 显示 `仓库列表`

yum repolist [all|enabled|disabled]

 

// 显示 `软件包`

yum list httpd # 指定软件包

yum list all # 所有软件包

yum list installed # 已安装软件包

 

// `安装` 程序包

yum install epel-release # 安装epel源

 

// `卸载` 软件包

yum remove epel-release # 卸载epel源

 

// `查询`

yum info xxx

yum search xxx

yum deplist xxx

yum provides xxx

 

// `升级`

yum check-update

yum update xxx

 

// `缓存`

yum clean

yum makecache

 

// `历史记录`

/var/log/yum.log // 日志

yum history

yum history list

yum history info

yum history undo

 

`软件包组`

yum grouplist

yum groupinstall

yum groupupdate

yum groupremove

yum groupinfo

 

举例 1

// 挂载光盘镜像

mount /dev/sr0 /mnt

 

// 基于 rpm 安装软件包

rpm -ivh /mnt/Packages/httpd-2.4.6-95.el7.centos.x86_64.rpm

报错,缺依赖包。

截图.png

 

查询依赖来源于哪个软件包

yum provides libapr-1.so.0

截图.png

 

举例 2

文件要写全路径,而不只是文件名,否则可能无法查询到

// `环境准备`

yum install vsftpd

 

// `查询` /etc/vsftpd/vsftpd.conf 属于哪个软件包

rpm -qf /etc/vsftpd/vsftpd.conf

 

// `卸载`软件包

yum remove vsftpd-3.0.2-29.el7_9.x86_64

 

// 要写`文件全路径`才能查询到

yum provides vsftpd.conf // 查询`不到`

yum provides /etc/vsftpd/vsftpd.conf // 查询`到了`

 

// 或`通配查询`

// 尝试查找所有包含 vsftpd.conf 文件的软件包。

yum provides */vsftpd.conf

截图.png

截图.png

 

举例 3

使用 yum 和 dnf 命令失败最主要的原因

  1. yum 的配置文件格式或路径错误

解决方法:检查 /etc/yum.repos.d/*.repo 文件格式

  1. yum cache

解决方法:yum clean all

  1. 网络不通

解决方法:网卡配置

 

7)内核升级

范例 1

利用 elrepo 源在 CentOS 7 安装新版内核。

截图.png

1. 安装 ELrepo 的仓库配置文件

yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

 

2. 验证是否已生成 elrepo 配置文件

ll /etc/yum.repos.d/

 

3. 验证仓库

yum repolist

yum repolist all

截图.png

截图.png

 

// 启用

vim /etc/yum.repos.d/elrepo.repo

enable=1

 

// 验证

yum repolist all | grep -i kernel

截图.png

//

yum list *kernel*

 

// `安装新内核`

yum install kernel-lt.x86_64

截图.png

截图.png

 

reboot

内核选择菜单

截图.png

 

// 查看`系统内核版本`

uname -r

截图.png

 

如果后续发现新内核与部分软件不兼容如何卸载新内核。

// 切换回旧内核

uname -r

 

// 卸载新内核

1. yum remove

2. yum history undo 17

截图.png

[ 大家有无想过,上述情况我们是在有互联网环境的主机上完成内核升级的,并且我们无法指定内核版本,我们大多生产环境是没有互联网的,并且需要安装指定内核版本等情况,这个时候我们就会使用到更为常见的升级内核方式编译安装指定内核版本。]

 

范例 2

< Linux 小技巧 >

[ 当然,其实我们还有一种方式,可以在非互联网环境下安装好某个软件。]

[ 首先,我们在一台有网络的机器将该软件需要的所有软件包下载至某个路径。]

[ 而后,将该目录拷贝至无网络的主机,执行 rpm -ivh ./*.rpm 安装所有软件包即可 ]

// 这个命令的目的是下载名为 kernel-lt.x86_64 的软件包文件到指定的目录 /data/kernel

// 不会进行实际的安装。这对于提前获取软件包以备后续离线安装非常有用。

yum install kernel-lt.x86_64 --downloadonly --downloaddir=/data/kernel

 

// 安装所有软件包

rpm -ivh /data/kernel/*

 

// 重启验证

reboot

截图.png

 

举例

仅下载相关的依赖包,而不安装。< 拷贝至无网络主机安装 >

// 这个命令的目的是下载名为 nginx 的软件包文件到指定的目录 /data/nginx

// 不会进行实际的安装。这对于提前获取软件包以备后续离线安装非常有用。

yum install nginx --downloadonly --downloaddir=/data/nginx

 

// 安装所有软件包

ll /data/nginx

rpm -ivh /data/nginx/*

 

// 验证

systemctl start nginx

截图.png