CentOS学习笔记-离线下载软件包的方式及对比
CentOSLinuxrpm离线以离线部署KVM为例,研究对比下载获取离线软件包的方法和它们各自的特点。CentOS系统的版本是CentOS Linux release 7.9.2009 (Core)
,目的是能够离线部署kvm。初始情况下,有两个虚拟机,它们的系统情况相同,都是空系统,没有额外装什么软件。区别在于,一个可以联网,称作在线机,一个不能联网,称为离线机。
一、工具一:repotrack
使用repotrack --help
可以查看它的帮助手册。可知,repotrack的作用是把给定的pkg和它的依赖的信息更新到最新,它会下载我们所指定的pkg和它所有的依赖。
这里所说的依赖不是以当前的系统为基础,而指的是最原始、最全面的依赖。所以它下载的软件包会很多,体积会很大。但是好处就是,只要是同一个版本的系统,就都可以安装,不会因为在线机本身已有了某个依赖包而不去下载,继而出现在离线机中提示缺少依赖包的情况。
在它的帮助手册中还介绍了可用的选项和功能,其中我认为重要的是选项-p DESTDIR
,它的作用是指明下载的pkg将要存放在什么地方。
1. 使用在线机下载需要的pkg及依赖包
使用的命令是:
mkdr kvm-rpmpkgs
repotrack qemu-kvm libvirt virt-install virt-manager virt-top libguestfs-tools mesa-libGLES-devel.x86_64 mesa-dri-drivers -p kvm-rpmpkgs
结果如下
2. 使用zip工具把目录打包
使用的命令是
zip -r kvm-rpmpkgs.zip kvm-rpmpkgs/
生成的压缩包大小为400多M。结果如下:
3. 把压缩包拷贝到离线机上
4. 在离线机上安装kvm
4-1. 解压缩
使用的命令是unzip kvm-rpmpkgs.zip
4-2. 进入到解压缩的目录中安装
使用的命令是:
cd kvm-rpmpkgs
rpm -Uvh --force --nodeps *.rpm
需要注意的是,这里安装软件包所使用的命令是rpm
,完整的格式是rpm -Uvh --force --nodeps *.rpm
,这里的几个选项的含义如下:
- -U:更新软件包,如果rpm比系统现有的版本更高,那么就更新系统的包
- -v:输出更多执行细节,也就是显示执行过程
- -h:在软件包安装的过程中打印哈希值
- --force:等价于--replacepkgs --replacefiles两个选项,前者指重新安装已有的软件包,后者指忽略包之间的文件冲突
- --nodeps:不验证软件包的依赖关系
4-3. 验证安装结果
安装之后,还要经过一些kvm特有的系统设置(这些设置与离线不离线无关,因此不在这里细讲),然后使用命令virt-manager
就可以打开kvm虚拟机管理器的图形界面了。如下图所示
二、工具二:yumdownloader
yumdownloader
工具只下载指定的软件包本身,不下载它的依赖。如果要下载依赖,需要用--resolve
选项来明确指明。但是请注意,这种情况下它下载哪些依赖包,是根据系统本身缺少哪些包来决定的。也就是说,我们必须保证在线机与离线机有完全相同的软件环境,yumdownloader
下载的软件包才能正确安装。在我看来,这是一个非常严格的要求。它的优势在于,在线机与离线机环境完全相同的话,要下载拷贝的软件会比较小。
yumdownloader
还可以用--destdir=DESTDIR
来指定软件包的存放位置。
1. 使用在线机下载需要的pkg及依赖包
使用的命令是:
mkdir kvm-rpmpkgs-yumdownloader-01
yumdownloader --resolve --destdir=kvm-rpmpkgs-yumdownloader-01 qemu-kvm libvirt virt-install virt-manager virt-top libguestfs-tools mesa-libGLES-devel.x86_64 mesa-dri-drivers
结果下载了59个文件
2. 使用zip压缩软件包
使用的命令是:
zip -r kvm-rpmpkgs-yumdownloader-01.zip kvm-rpmpkgs-yumdownloader-01/
这次的压缩包大概20M,比repotrack
小了很多
3. 把压缩包拷贝到离线机上
4. 在离线机上解压缩并安装
使用的命令是:
cd kvm-rpmpkgs-yumdownloader-01
rpm -Uvh --force --nodeps *.rpm
5. 验证安装结果
使用virt-manager
打开kvm虚拟机管理的图形界面(其实不需要做什么设置,直接就可以打开),如下图所示
6. 验证在线机与离线机软件环境不同的情况
6-1. 在线机安装kvm
在线机上,利用刚才已经下载好的软件包,安装kvm,使用的命令是:
cd kvm-rpmpkgs-yumdownloader-01
rpm -Uvh --force --nodeps *.rpm
6-2. 在线机上再次使用yumdownloader
工具下载软件包
使用的命令是:
mkdir kvm-rpmpkgs-yumdownloader-02
yumdownloader --resolve --destdir=kvm-rpmpkgs-yumdownloader-02 qemu-kvm libvirt virt-install virt-manager virt-top libguestfs-tools mesa-libGLES-devel.x86_64 mesa-dri-drivers
这次我们把下载的包放在了02文件夹中。这次下载了7个文件。
6-3. 压缩、拷贝到离线机
在这之前,离线机恢复了快照,现在处于没有安装过kvm之前的状态。
这次的压缩包只有3M左右。
6-4. 在离线机上解压缩并安装
使用的命令是:
cd kvm-rpmpkgs-yumdownloader-02
rpm -Uvh --force --nodeps *.rpm
软件安装是没有问题的,因为我们用--nodeps
让它不检查依赖关系,但是使用命令virt-manager
来启动图形界面的时候就失败了,表示缺少一些模块。
三、工具三:yum的downloadonly插件
这个插件的使用方法是yum install --downloadonly --downloaddir=DESTDIR pkg_name1 pkg_name2
,它的作用与yumdownloader
命令一样,也是仅会将主软件包和基于你现在的操作系统所缺少的依赖关系包一并下载。
在已经安装了kvm的在线机上执行如下命令,下载kvm软件包:
mkdir kvm-rpmpkgs-downloadonly
yum install --downloadonly --downloaddir=kvm-rpmpkgs-downloadonly qemu-kvm libvirt virt-install virt-manager virt-top libguestfs-tools mesa-libGLES-devel.x86_64 mesa-dri-drivers
结果就是什么都没有下载。
可见确实和yumdownloader
一样的功能,没有再做更多的测试了。