Linux 下的软件仓库(附加详细实验案例)
Windows 连接 Linux 工具:
首先在终端查看 ip 地址为多少,然后打开 Linux 工具,点击会话,选择 SSH 选项,然后输入查看的 ip 地址和用户名 root ,最后点击“是”。
随后输入该主机的密码,便连接成功。
一、Linux 中常见的软件包类型
1.RPM 包(Red Hat Package Manager)
-
适用发行版:Red Hat、CentOS、Fedora、openSUSE 等。
-
文件扩展名:
.rpm
-
特点:适合 Red Hat 系列系统。依赖关系需要手动解决(使用
rpm
时),或自动解决(使用dnf
或yum
时)
2.DEB 包(Debian Package)
-
适用发行版:Debian、Ubuntu、Linux Mint 等。
-
文件扩展名:.deb
-
特点:适合 Debian 系列系统。依赖关系需要手动解决(使用
dpkg
时),或自动解决(使用 atp 时)
3.bz2 | gz | xz 压缩包
1)需要源码安装、需要编译
如:ntfs-3g_ntfsprogs-2017.3.23.tgz 需要编译“configure”
2)绿色软件,可直接使用(解压之后不用任何操作,可以直接运行使用)
如:Firefox-latest-x86_64.tar.bz2 是绿色软件,直接使用
将 software.tar 资源包拖入Linux 工具中的 Sftp 中,查看可看见已存在该资源包。
将 software.tar 资源包解压到 mnt 目录中。
解压 firefox 目录,其中绿色的 firefox 可以直接使用,叫做绿色软件
二、rmp 命令详解
1.rmp 软件包的名称结构
[dhcp-server]-[4.3.6-30].[el8].[x86_64].[rpm]
以下图画线的软件包为例:
kolourpaint-libs-4 | 10.5-4 | el7 | x86_64 | rpm |
软件名称 | 软件版本 | 软件的授权协议版本 | 软件架构 | 软件类型后缀 |
2.rmp 命令管理软件包
-ivh | 安装 |
-a | 所有 |
-f | 文件 |
-p | 软件包 |
-q | 查询 |
-l | 软件安装文件列表 |
-e | 卸载 |
-c | 配置文件 |
-d | 说明 |
--info | 软件信息 |
--force | 强制 |
--nodeps | 忽略依赖性 |
--script | 查询软件在安装或卸载过程中的运行脚本 |
-Kv | 检测软件 md5 校验码 |
-V | 检测已安装软件在系统中的文件被修改信息 |
-ivh:rpm -ivh linuxqq_2.0.0-b2-1082_x86_64.rpm (安装 linuxqq)
下面画线的两个软件:在安装 qq 之前系统中必须已经安装好了这两个软件,叫做 qq 的依赖性。
--nodeps:忽略依赖性,qq 可以正常安装。
-qa:查询系统中安装的所有软件的名字,通过 wc -l 可知共有1190个软件。
-qf:通过命令查询 qq 的安装包。
先通过 which qq 命令找到 qq 存在的位置,然后删除,此时 /usr/local/bin/qq 这个命令显示找不到,便可用 rpm -qf /usr/local/bin/qq 找到命令的安装包。
--force:强制
然后通过找到的安装包进行安装,因前面安装过 qq ,所以需要强制安装。
-qp:查询软件包里面的信息(若没有安装,可用 -qp 查询软件包信息,若已安装,不用 p 也可,直接用 -q 查询)
-ql:查询软件安装以后,在系统中生成的文件
-qc:查找软件的配置文件
-d:查找软件的说明文件
--info:查看软件信息
--scripts:查询软件在安装或卸载过程中的运行脚本。通过查看软件运行脚本,可知 FluffyMcAwesome-A-6 最好不要下载,容易导致服务器崩塌。
-- Kv:检验是否有篡改。将 linuxqq_2.0.0-b2-1082_x86_64.rpm 复制一个名为 linuxqq_2.0.0-b3-1082_x86_64.rpm 的软件,然后导入 lee 文件,将 linuxqq_2.0.0-b3-1082_x86_64.rpm 追加进去,进行篡改。然后分别用 -Kv 检验软件是否有篡改,有篡改过的软件最好不要安装。
三、本地软件仓库的构建
确认虚拟机已有光盘镜像,并且光驱是亮着的。
在根下建立 rhel9 光盘读取目录,也就是挂载点,然后将 /dev/sr0 光盘设备挂载到 rhel9 目录上。因挂载的设备是光盘,而光盘是不可以写入内容的,只能读,所以会出现警告。
查看 rhel9 光盘中的软件,并配置 AppStream 和 BaseOS 这两个软件(AppStream 是应用,BaseOS 是系统基本软件)。
AppStream 和 BaseOS 这两个软件仓库位置分别在 file:///rhel9/AppStream 和 file:///rhel9/BaseOS ,需要告诉系统才能访问。必须进入到 /etc/yum.repos.d/ 中,编辑的文件名称必须以 .repo 结尾,否则不识别。
[AppStream] 仓库名称
name=AppStream 仓库描述
baseurl=file:///rhel9/AppStream 仓库地址
gpgcheck=0 安装软件时是否检测软件的 gpgkey(软件授权)
安装 gcc ,读取了 AppStream 和 BaseOS 这两个软件,并在 AppStream 中找到了 gcc。
-y:直接同意安装
四、网络软件仓库的构建
将软件仓库通过网络共享出去
1.在本地主机构建软件仓库
安装 apache ,目的是可以使当前主机通过网络使用 http:// 来共享资源。
开启 httpd 服务,因为系统的火墙会拒绝 httpd 的开放功能,所以需要关闭火墙。
/var/www/html:此目录是 httpd 程序默认共享目录,然后导入 lee 内容到 /var/www/htmlindex.html 中,默认发布文件。
通过 ip a 查看 ip 地址,然后在浏览器访问 192.168.10.100,可以看见里面的内容 lee。
卸载原始挂载,建立新的挂载到默认发布目录中的子目录,这样就可以访问 http://本机ip/rhel9,即可访问到仓库中的资源。
然后在本地主机中的浏览器访问 192.168.10.100/rhel9 ,显示访问成功,能够查看里面的软件信息。
2.测试主机共享本地主机的软件
测试主机没有挂载,也没有镜像。先手动设定 ip 地址,然后刷新并激活。
查看是否成功配置 ip ,然后 ping 本地主机的 ip ,能 ping 通也就可以访问,可查看本地主机的软件信息(http://192.168.10.100/rhel9/AppStream/ 和 http://192.168.10.100/rhel9/BaseOS/)。
在测试主机中配置好网络,确保测试主机和已经发布资源的主机可以网络通信(rhel9.repo 为编辑测试主机的文件)
然后列出 gcc 的软件信息,成功读取了名为 haha 和 hehe 的内容。gcc 的软件从本地主机来的,因共享了网络,所以测试主机可直接安装 gcc。
3.设定永久命令(开机自动运行)
重启后,访问不了本地主机中 rhel9 的软件信息(在命令行操作的命令大多数都是临时的,只有改变了文件,将操作的内容记录在文件中才会是永久的)。
重新进行挂载,才能访问成功。
/etc/rc.d/rc.local:开机自运行脚本(主机打开后,里面的内容会自动运行)
将需要主机自动运行的命令编辑到脚本中,并给 /etc/rc.d/rc.local 文件加上可执行权限,才能在开机的时候运行。
然后现在再将主机重启,此时依然可以成功访问本地主机的 rhel9 的软件信息。
在本地主机中,AppStream 和 BaseOS 这两个软件仓库位置改变了,将地址修改为 file:///var/www/html/rhel9/AppStream 和 file:///var/www/html/rhel9/BaseOS ,可以提高效率,无需通过网络访问。
五、dnf 命令使用详解
dnf repolist #列出仓库信息dnf clean all #清除系统中已经加载的仓库缓存信息 /var/cache/dnfdnf makecache #加载新的信息缓存查询软件包dnf list all #列出所有软件dnf list available #列出未安装软件dnf list installed #列出已安装软件安装和卸载软件包dnf install #安装dnf remove #卸载dnf reinstall #重新安装dnf search #搜索dnf whatprovides #搜索包含文件的软件包dnf history #dnf 执行历史dnf history info #dnf 执行历史详细信息
1.处理单个软件包
dnf repolist:列出软件仓库信息
dnf clean all:清除系统中已经加载的仓库缓存信息。清理后从 10 个数据变为 6 个数据
dnf makecache:加载,将原来清理的信息再缓存一遍(作用:旧的信息清理后,还需将新的信息加载进来)
dnf list all:列出所有软件
可查到所有软件共 6767 个,已安装 1207 个。
dnf list available:目前还没安装的,但可以安装的软件(共有 5559 个软件未安装)
dnf list installed:目前已经安装的软件(共 1213 个软件,前面的一些信息的行数也算进去了)
dnf install:安装软件
dnf 与 rpm 的区别: rpm 不能解决依赖性的问题,只能显示依赖性有哪些;而 dnf 可直接将依赖性的软件一同安装,所以 dnf 是 rpm 的上层管理工具,会更智能。
dnf remove:删除软件
以 linuxqq 为例,将 linuxqq 的软件删除。
dnf reinstall:重新安装
假设不小心将根下的 ls 删除了,根据 ls 的位置查询 ls 的软件包,若直接安装该软件包,会显示已经安装了,所以需要 reinstall 重新安装,将 ls 软件包的命令重新安装回来。
dnf search:通过文件的信息搜索软件包
以搜索 firefox 为例,可搜索到 firefox 的软件包。
dnf whatprovides:搜索包含文件的软件包
以 linuxqq 的依赖性软件包 libgdk-x11-2.0.so.0 为例,用 search 无法找出安装包的名字,得用 whatprovides 来搜索。因为不知道该软件包的位置,所以用 */ 在任何路径中搜索。
dnf history:查看历史信息
dnf history info 序号:查看历史详细信息
在系统中安装、重装、删除会被历史记录下来,查看不会被记录。
2.处理软件组
软件组包含的软件很多,都是为了软件组这一大的功能所准备。
软件组管理命令:
dnf group list | 列出软件组 |
dnf group list --installed | 列出已安装的软件组 |
dnf group list --available | 列出未安装的软件组 |
dnf group list --hidden | 列出隐藏的软件组 |
dnf group install 软件组名称 | 安装软件组 |
dnf group info 软件组名称 | 查看软件组信息 |
dnf install 软件组名称 --downloadonly --dest=下载的位置 | 只下载不安装软件组 |
①dnf grouplist:列出软件组
②dnf grouplist --installed:列出已安装的软件组
③dnf grouplist --available:列出未安装的软件组
④dnf grouplist --hidden:列出隐藏的软件组
⑤dnf groupinstall "Java Platform":安装软件组“Java Platform”
⑥dnf group info "Java Platform":查看软件组“Java Platform” 的信息
⑦dnf install gcc --downloadonly --dest=/mnt:将 gcc 软件组下载到 mnt 目录中
--downloadonly:只下载不安装
--dest:下载到哪里
安装过后软件包会消失,下载不会。查看 mnt 目录可看到,安装 gcc 所需要的软件包依然存在。