目录
-qp 查询软件包 -qpl 查询该软件包如果在系统安装之后会产生哪些文件
dnf group list “ ” 查看特定未隐藏的软件组
一、linux中软件包的类型
首先要保证能够与外界网络通信ping www.baidu.com:
cat /proc/cpuinfo 查看cpu类型
hostnamectl 查看linux版本
软件包类型:
DEB
RPM:可以直接用rpm命令管理
bz2、gz、xz(分为绿色版和编译版,绿色版 直接解压可用,编译版需要源码编译)
在rhel8中只能使用绿色软件,源码编译软件和RPM软件
二、软件包的名称结构
kolourpaint 软件名称
4.10.5-4 软件版本
el7 软件的授权协议版本
x86_64 软件架构
rpm 软件类型后缀
三、 rpm命令管理软件包
-ivh | 安装参数组合 -i install -v verbose -h hash |
-a | 所有 |
-f | 文件 |
-p | 软件包 |
-q | 查询 |
-l | 软件安装文件列表 |
-e | 卸载 |
-c | 配置文件 |
-d | 说明 |
--info | 软件信息 |
--force | 强制,当有文件损坏时可强制重新安装 |
--nodeps | 忽略依赖性,但是不保证软件下载后可以用 但是当两个软件互相依赖时可以强制先下载一个 |
--scripts | 查询软件在安装或卸载时的运行脚本 |
-Kv | 检查软件md5校验码,如果查询到校验码是bad,说明软件包不是原版,被篡改过 |
-V | 检测已安装软件在系统中的文件被修改信息 |
-ivh安装
qq没有依赖性,可以直接安装,但有些软件有依赖性,例如wps在直接安装时显示缺失文件,此时必须手动解决依赖性,否则即使安装好也无法正常使用软件。
-qa查看所有已安装软件
-ql查看软件安装文件列表
-qf查看/mnt/在哪个软件里
-qc查看软件的配置文件
-qd查看软件说明
--info查看软件相关信息
-qp 查询软件包 -qpl 查询该软件包如果在系统安装之后会产生哪些文件
--scripts 查询软件在安装或卸载过程中的运行脚本
postinstall 安装后运行的东西
postuninstall 卸载后运行的东西
可以看出A不可装(安装时窃取权限,卸载时删根)
-Kv检测软件md5校验码
修改b3安装包,可以看见b3校验码是错误(BAD)的,说明该软件包是被篡改过的
四、本地软件仓库的搭建
本地软件仓库类似于手机的软件商店。
大多数软件都有依赖性,搭建软件仓库可以避免安装软件时手动解决依赖性的问题,由系统自动检测并安装。
操作系统的供应商提供了安装软件的镜像,类似于u盘,需要将其插入到某一个目录中才可以看到其中的内容。
挂载镜像到自建的目录上
创建目录,名字任意,将镜像插入该目录中:
软件安装包存放在AppStream和BaseOS中,均为系统厂商提供的软件
AppStream中存放所有的应用软件,BaseOS中存放系统基本环境软件
这些软件在默认情况下有些已经安装,有些是没有安装的
到目前为止,/westos已经可以看做一个软件仓库,但由于/westos是用户自己建立的,因此需要在westos.repo文件中告知系统。
westos.repo文件编写
在别的目录下设置也可以,但需要大量配置。默认情况下yum.repos.d中是有内容的,在企业中不能乱删除
实验环境中可以清空该目录,编写westos.repo文件:
文件名字任意,但必须以repo会后缀,且必须在yum.repos.d目录下编写,否则系统不识别。yum.repos.d目录下的所有文件中的所有仓库都必须真实可用,否则将导致软件安装失败。
[AppStream] 仓库名字,可以任意取,但不能出现空格
name=local AppStram 介绍仓库名字
baseurl=file:// 仓库访问地址
浏览器中如何访问本机文件? file://目录路径 例如访问/mnt下的文件
gpgcheck=0 不检测软件是否授权
pgp是gpg的反商业码,用来做签证,商业版意味着厂商在提供操作系统的同时也承担了相应的责任,如果用户安装了厂商没有授权的第三方软件,厂商将不再保证系统的稳定性。gpgcheck=0 意味着当用户在这个软件仓库中安装软件时,系统不检验该软件是否授权;gpgcheck=1意味着安装软件前,系统将检测该软件是否有授权。系统将在以下秘钥中存放了签证的信息。
如果文件中编写的是gpgcheck=1,则下面需要补充秘钥的位置,软件在下载前会在秘钥中进行签证对比,如果对比成功说明软件是授权的,如果对比不成功则会拒绝用户的下载请求。
enabled=1 默认为1,该句可以不写。等于1说明仓库是启动的,如果enabled=0,说明仓库停用
[BaseOS] 仓库名字,可以任意取,但不能出现空格
name=local BaseOS 介绍仓库名字
baseurl=file:// 仓库访问地址
gpgcheck=0 不检测软件是否授权
enabled=1 默认为1,该句可以不写。等于1说明仓库是启动的,如果enabled=0,说明仓库停用
至此本地软件仓库搭建完毕,接下来进行测试
dnf install命令测试
普通安装wps时报错,因为缺少依赖性软件
使用dnf install从本地软件仓库中安装wps,系统将自动下载缺失的依赖性软件,按y确定安装,wps安装成功
五、构建共享型网络软件仓库
构建共享网络软件仓库,可以避免重复在多个主机上安装镜像,浪费企业资源。通过网络(超文本传输协议http)将一台主机的镜像共享出去,其他主机将不需要再安装镜像。
安装httpd软件
目的是使本机能对外共享系统中的文件
关闭系统火墙后打开httpd软件
查看本机ip,在浏览器中可以访问本机
共享本机镜像
由于httpd不会将系统中的所有文件共享出去,而是只共享系统中/var/www/html/位置存放的文件,因此可以在/var/www/html/中新建一个目录westos,将原本挂载在/westos中的镜像卸掉,重新挂载在/var/www/html/westos中,就可以在浏览器中访问到westos中的内容
修改westos.repo文件内容
修改软件仓库的访问地址
至此共享网络软件仓库搭建完毕,只要其他主机可以与本机进行通信,就可以通过访问本机ip下的westos目录从而查看镜像中的内容,即进入共享软件仓库,接下来进行测试
测试
可以正常访问仓库中的软件列表
但此时仍存在问题,由于mount命令在开机时不会自动运行,因此当系统重启后,镜像不会再挂载在httpd可以访问的/var/www/html/目录下,因此需要编写/etc/rc.d/rc.local文件(rc.local是开机自动运行脚本),使mount可以在开机时自动运行,自动将镜像挂载在/var/www/html/westos下
开机自动挂载镜像
进入/etc/rc.d/rc.local,将mount命令的内容放进去,并根据提示为其赋予权限
六、软件仓库管理命令dnf的使用
软件仓库中的所有软件都由dnf命令进行管理
dnf repolist列出仓库信息
这些数据存放在/var/cache/dnf/下
dnf clean all清除系统已经识别的信息
dnf list 重新加载系统已识别的信息
dnf list all 列出所有软件
dnf list installed 列出已经安装的软件
dnf list available 列出未安装的软件
dnf install 安装软件 -y强制安装不提示
dnf reinstall 重新安装
当软件中包含的文件有损坏时,可以重新安装软件包恢复损坏文件
dnf remove 卸载
dnf search 搜索
根据软件名字搜索
根据内容搜索
dnf whatprovides 查找包含文件的软件包
dnf history 查看软件安装或卸载历史
dnf history info 查看特定历史的详细信息
dnf group list 查看所有未隐藏的软件组
dnf group list “ ” 查看特定未隐藏的软件组
dnf group install “ ” 安装软件组
dnf group list --hidden 查看隐藏软件组
--downloadonly 下载软件包
下载软件,但不安装软件
--destdir 指定下载的软件包存放的位置
例如指定下载到/mnt目录下
七、epel拓展源的安装及使用
有些拓展软件是收费的,系统中没有,可以借助epel源安装这些软件
阿里云下载epel镜像
进入网址,按步骤下载epel镜像
epel镜像-epel下载地址-epel安装教程-阿里巴巴开源镜像站
1)下载epel配置包
2)将官方地址更换为阿里云地址
配置完成
测试
可以找到收费软件ansible
删除epel源
如果不再使用epel,可以删除epel源配置包,并清除残余文件
八、手动解决软件仓库中的依赖性缺失
当epel源和系统提供的镜像中都没有所需要的包时,就需要自己搜索并安装该包
例如,当安装ansible软件时,提示缺失sshpass,进入浏览器搜索该包
下载时注意版本
wget 下载sshpass包
软件仓库中没有该包,因此手动安装该sshpass包,此时可以安装成功ansible
九、 第三方软件仓库的搭建
为避免多台主机重复ansible的安装步骤,可以从扩展源中将软件下载下来,在本地构建一个ansible仓库(第三方软件仓库),通过网络共享出去
在/var/www/html/创建ansible目录
在此处建目录是因为httpd可以将其共享出去
将ansible的安装包下载到ansible目录中
将手动解决依赖性sshpass也放进ansible目录中
可以在浏览器访问该目录
将主机变为内部主机
删除epel源,清除系统之前加载的信息,该主机变为内部主机,无法再从外部网络寻找ansible
指定该主机从内网寻找ansible软件
编写westos.repo文件
dnf 命令执行的原理并不是看软件是否存在,而是去读取repodate中的数据,这些数据中包含了软件的基本信息,例如依赖性等。这些数据会被加载到/var/cache/dnf中。而我们在/var/www/html/下创建ansible目录里缺少这些数据,因此需要让软件自动扫描并生成这些数据。
由于ansible仓库不可用,暂时停用
安装createrepo软件
createrepo软件用来扫描并生成dnf执行所需的数据,安装好后进行扫描,扫描成功后进入ansible下的repodata目录可以看到已经出现所需的数据
开启ansible仓库
ansible仓库搭建完毕
可以查看ansible仓库列表
软件仓库和软件存放目录有本质区别,软件仓库中必须有所需的数据。
总结:构建ansible共享软件仓库的步骤
1、部署用镜像搭建的软件源并完成本地仓库的配置
2、安装epel源
3、dnf install httpd createrepo -y (httpd用来共享,createrepo用来扫描数据)
4、手动解决sshpass依赖性(浏览器搜索sshpass for rpm并下载rhel8版本的rpm包)
5、rpm -ivh sshpass-xxx.el8.rpm
6、mkdir /var/www/html/ansible
7、dnf install ansible --downloadonly --destdir=/var/www/html/ansible -y
8、cp sshpass-xxx.el8.rpm /var/www/html/ansible
9、createrepo -v /var/www/html/ansible
(若之后ansible目录中有软件新加入,则需要再次执行扫描createrepo -v /var/www/html/ansible)
测试:
删除epel包及其残留文件(此时dnf无法搜索到ansible软件)
vim /etc/yum.repos.d/westos.repo 编写 [ansible] 的内容
此时若可以dnf install ansible -y安装ansible软件,说明ansible仓库搭建成功