SUSE 12 SP5离线安装RPM包时如何下载全部依赖包
SUSE 12 SP5离线安装RPM包时如何下载全部依赖包
完全理解你手动逐个找依赖的崩溃感——RPM的依赖链一旦长起来,确实会陷入“缺包→找包→安装又缺包”的死循环,尤其是很久没碰RPM系的话,这种体验太折磨人了😅。结合你提到的Docker思路,下面给你几个高效的解决方案,都是能一次性搞定所有依赖的:
方法一:用SUSE官方工具zypper批量下载(最推荐)
SUSE的包管理器zypper本身就支持只下载包和所有依赖,不用实际安装。你可以用Docker启动一个和离线机器完全一致的SUSE 12 SP5容器,在容器里完成下载,再把包拷贝出来:
启动SUSE 12 SP5容器
在你的Devuan机器上运行Docker命令,拉取并启动对应版本的容器:docker run -it --name suse12_dl opensuse/leap:12.5(如果
opensuse/leap:12.5镜像找不到,可以试试registry.suse.com/suse/sles12sp5,这是SUSE官方的SLES镜像)配置zypper源(确保能正常下载)
进入容器后,先刷新源列表,如果源不可用,添加官方的SP5源:# 先刷新现有源 zypper refresh # 如果刷新失败,添加官方OSS源 zypper addrepo https://download.opensuse.org/distribution/leap/12.5/repo/oss/ sles12sp5-oss zypper refresh下载目标包及所有依赖到指定目录
- 如果目标包是官方源里的,直接用包名下载:
# 把所有包下载到/tmp/offline_rpms目录 zypper --pkg-cache-dir /tmp/offline_rpms download --download-only 你的目标包名 - 如果目标包是第三方的(比如你自己手里的
.rpm文件),先把这个包拷贝到容器里,再下载它的依赖:# 在宿主机上把本地的rpm包拷贝到容器里 docker cp ./your-package.rpm suse12_dl:/tmp/ # 回到容器里,下载这个包的所有依赖 zypper --pkg-cache-dir /tmp/offline_rpms install --download-only /tmp/your-package.rpm
- 如果目标包是官方源里的,直接用包名下载:
把下载好的包拷贝到宿主机
退出容器后,用Docker cp命令把容器里的包目录拷贝到本地:docker cp suse12_dl:/tmp/offline_rpms ./suse_offline_rpms现在
./suse_offline_rpms目录里就有所有需要的包了,直接拷贝到离线机器上即可。
方法二:在离线机器上用本地包批量安装(可选优化)
如果需要多次安装或者安装多个包,你可以把下载的RPM包制作成本地仓库,这样离线机器上用zypper安装会更方便:
- 在离线机器上,把所有RPM包放到一个目录,比如
/root/offline_repo - 安装
createrepo工具(如果离线机器上没有,需要先单独下载这个包的依赖并安装):zypper install createrepo - 制作本地仓库:
createrepo /root/offline_repo - 添加本地仓库到zypper:
zypper addrepo file:///root/offline_repo local-offline-repo - 之后就可以像在线一样安装包了:
zypper install 你的目标包名
避坑提醒
- 一定要保证在线容器和离线机器的SUSE版本完全一致(都是12 SP5),否则依赖包的版本可能不兼容,导致安装失败。
- 如果是第三方包,要确保它是针对SUSE 12 SP5编译的,否则可能会有依赖不匹配的问题。
备注:内容来源于stack exchange,提问作者Pierre




