Linux中的软件管理
Linux中的软件包
软件包的类型
Linux中软件安装相关的格式主要有三种,按系统差别和安装类别进行区分.
DEB ##UBLinux DEBLinux系统使用的安装包格式,RHEL无法安装
RPM ##Redhat CentOS Fadora系统使用的安装包格式
bz2|gz|xz等 ##打包的软件包
其中,打包的软件包又分为两种.
- 绿色软件,可以直接使用,无需安装.
- 对源码进行打包,需要编译才能安装.
绿色软件也就是我们常说的免安装软件,软件运行所需要的内容已经整合在了包内,运行命令即可启动.源码编译软件则需要通过对源码的编译来在本地进行安装,编译的速度很大程度上取决于CPU的性能.
不难看出,越繁琐的安装方式自定义性和了解到的程序内容越多,而rpm则更亲民,只要运行指令安装即可,缺点则是无法选择安装位置等自定义选项.
软件包的名称结构
通常来说,未经修改的软件包名称都符合一个固定的名称结构规则,当然也可能视情况缺失其中一部分,了解软件包的名称结构有助于我们判断是否可以安装或版本是否是我们需要的等信息.
##以ntfs-3g的rpm安装包为例
ntfs-3g-2017.3.23-11.el8.x86_64.rpm
ntfs-3g
部分是软件的名称
2017.3.23-11
是软件的版本,这里指2017年3月23日-11版本
el8
是授权协议版本,常与系统有关,有助于判断是否可以安装
x86_64
是软件的架构
rpm
是软件类型的后缀,用来识别软件包格式,入rpm/deb的区分
软件的管理
rpm命令管理软件包
rpm格式的软件包通常使用rpm命令来进行管理,不限于安装卸载查看等日常需求.
rpm -ivh ##安装参数集合,最常用
## -i install 安装
## -v verbose 显示日志
## -h hash 比对hash
-a ##所有
-f ##文件
-p ##指定目标为软件包
-q ##查询命令
-l ##软件/软件包所安装的文件列表
-e ##卸载命令,最常用
-c ##查看指定软件的配置文件
-d ##查看说明
--info ##显示软件/软件包的信息
--force ##强制,常用于覆盖安装已经安装但是出现部分问题的软件
--nodeps ##忽略依赖性警告
--scripts ##查询软件安装/卸载过程中会运行的脚本,方便粗略检查安全性
--Kv ##检测软件md5校验码
-V ##查询已安装软件在系统中的文件被修改的情况
不难看出,rpm指令不进能对已安装软件进行信息查询也能对未安装的软件包进行信息查询,除了部分对已安装软件指定的命令以外,其他命令前添加-qp
参数都能实现对软件包的查询.
DNF命令及其相关
rpm可以进行对软件包的安装和本地软件的管理,但是很显然你需要先获取软件.如果能够对需要的软件进行检索,下载,安装,管理那就更方便了.之前的版本通过yum
命令来实现相关功能,而RHEL7企业版之后添加了新的管理工具dnf
.
dnf
命令可以实现从软件源中查询需要的软件,下载/安装目标软件,安装时可以查询需要的依赖并同时进行安装,极大简化了软件管理的流程.
DNF基础命令
##软件安装相关
dnf install 软件名 ##最常用的软件安装命令
dnf remove 软件名 ##软件卸载命令
dnf reinstall 软件名 ##重新安装指定软件,常用于覆盖已经安装软件的部分文件
dnf search 软件名 ##从软件源中查询复合目标内容的软件包
dnf whatprovides 指定文件 ##当不知道需要安装什么软件包时,通过查找包含目标文件的包来进行检索
##软件源相关
dnf repolist ##查询本地的软件源列表
dnf clean all ##把已经识别的软件源的信息清除掉,方便保存新信息
dnf list all ##列出能从软件源中识别到的所有软件包
dnf list available ##列出未安装的软件包
dnf list installed ##列出已安装的软件包
##dnf操作相关
dnf history ##查看dnf命令执行的历史
dnf history info ##查看dnf命令执行历史的详细信息
##其他
dnf group list ##列出软件组
dnf group list --hidden ##列出隐藏软件组
dnf group info "组名" ##列出软件组的信息
关于这些命令有两个需要专门拿出来提一提的.
dnf whatprovides 指定文件
,如果不清楚需要查询文件的目录归属时,*/文件名
往往是个不错的方法.
dnf clean all
所清理的信息保存在/var/cache/dnf
目录中,清理的本质是清理掉了这个目录下的保存文件.
软件源配置文件的书写
软件源包含可安装软件的内容和调度信息,通过修改软件源的配置文件可以实现修改源或者添加新的软件源.
在Linux中,软件源的配置文件位于/etc/yum.repo.d/
目录中,在该目录中保存的后缀为.repo
的文件都视作软件源配置文件.
虽然通常来说软件源都是网络源,但当我们无法联网时使用本地源也可以搭建自己的软件源,而且这种方式也方便我们读配置文件编写理解.
##前期准备
通过 mount 命令将RHEL8.2的镜像文件挂在到系统中,因为镜像文件中天然包含试验可用的一些软件包.
mkdir 挂载位置
mount 镜像文件 挂载位置 ##将镜像挂载到本地
##编写配置文件
cd /etc/yum.repo.d/ ##跳转到配置目录
vim Test.repo ##新建并编写配置文件,为了排除已经存在的配置文件的干扰,推荐删除或移动其他repo文件
##编写完成后进行测试
dnf clean all ##清理本地仓库保存信息
dnf repolist ##查询软件源列表,能够看到刚刚添加的信息.
dnf search gcc ##从刚刚建立的本地仓库中检索gcc
dnf search gcc -y ##进行安装,过程中自动执行yes
通过上述操作,我们可以建立并识别一个本地软件源,并从中下载存在的软件包.
以下为实例的配置文件编写.
[AppStream] ##仓库名字
name=AppStream ##概述
baseurl=file:///Test/Appstream ##仓库的位置,'file://'表示协议,'/'表示根目录,因此才会出现三个'/'
gpgcheck=0 ##验证签名用,0表示不验证
enabled=1 ##是否启用该软件源仓库,1表示启用
[BaseOS]
name=BaseOS
baseurl=file:///Test/BaseOS
gpgcheck=0
enabled=1
通过上述方式我们在配置文件中创建了两个本地仓库,所处位置分别在挂载目录下的AppStream
目录和BaseOS
目录下,均不启用验证而且软件源均开启.
远端软件源仓库的创建
配置好了本地仓库,远端仓库的配置其实也大同小异,只要在服务端开启Apache HTTP服务器,并将软件源需要的目录和文件放到服务器能够支持的目录下即可.
如下进行流程简述.
##服务器准备工作
dnf search httpd ##检索Apache服务器所需要的包
dnf install httpd -y ##安装
systemctl status httpd ##查询httpd服务状态
systemctl enable --now httpd ##应用并即时开启
systemctl status httpd ##检测开启情况
/var/www/html ##服务器共享文件目录
这时已经可以通过浏览器对本级网址进行访问了,那么将仓库目录挂在到该目录下并修改配置文件即刻实现远端仓库的创建.
mkdir /var/www/html/Test
mount 镜像文件 /var/www/html/Test/
cd /etc/yum.repo.d/
vim Test.repo
##修改情况
[AppStream] ##仓库名字
name=AppStream ##概述
baseurl=http://172.25.254.36/Test/AppStream ##修改为IP地址表示
gpgcheck=0 ##验证签名用,0表示不验证
enabled=1 ##是否启用该软件源仓库,1表示启用
[BaseOS]
name=BaseOS
baseurl=http://172.25.254.36/Test/BaseOS
gpgcheck=0
enabled=1
这样,在本次系统登录中就可以实现通过http协议对仓库进行访问了,如果有人能连接到你的计算机那么他也可以使用该仓库.
但mount
挂载只对本次登陆有效,如果你重启或者关机,镜像并不会自动挂载到对应位置.
为了应对这一问题,我们可以在开机自启动脚本中写上挂载相关命令,使其可以开机自动运行已实现挂载操作.
vim /etc/rc.d/rc.local ##开机启动脚本配置文件
chmod +x /etc/rc.d/rc.local ##附加执行权限
sh /etc/rc.d/rc.local ##执行脚本,实现挂载
##自启动脚本中的修改
mount 镜像文件 /var/www/html/Test/
这样,在系统启动时就会自动将镜像挂载到Apache服务器可用目录下,实现远端仓库的自启动.
从零开始创建软件源仓库
虽然很简单的就成功了,但是有一个问题不知道你有没有考虑过.
一个目录下装着很多软件包,但他是怎么被识别为软件源的呢?
当一个目录下包含软件包的总结和目录相关文件时,它被视作一个软件源.
目录是否被视作软件源的根本区分就在于这些文件.
当然,手动创建这些文件是低效而且不可行的,我们可以通过相关命令来进行创建.
Createrepo命令软件源仓库
createrepo
命令用于对目录下的软件包进行扫描并创建软件源所需的目录相关文件.
通过以下操作我们能够很简单的将一个目录转化为软件源.
需要注意的是它只能对rpm文件进行管理,请保证目录下不存在其他文件.
dnf install createrepo -y ##安装命令所需软件包
cd /var/www/html/Cache/ ##进入新创建的只包含软件包的目录
createrepo -v /var/www/html/Cache/ ##对该目录创建相关文件
下载DNF命令所用的软件包
使用dnf
命令安装软件包不会再本地留下软件包,部分时候我们可能需要软件包留档或进行其他操作.这种需求可以使用yumdownloader
来实现.当然,我们并不知道yumdownloader
属于哪个软件包,所以还是需要用dnf
进行查询.
dnf whatprovides */yumdownloader ##查询命令归属的包
##安装完成后
yumdownloader 软件名 ##在当前目录下载软件包
yumdownloader 软件名 --destdir=dir ##指定下载到的目录
yumdownloader 软件包 --resolve ##同时下载软件包需要的依赖包
通过这种方式就可以对需要的软件包及其依赖进行留档保存.
- 实验截图