You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SUSE 12 SP5离线安装RPM包时如何下载全部依赖包

SUSE 12 SP5离线安装RPM包时如何下载全部依赖包

完全理解你手动逐个找依赖的崩溃感——RPM的依赖链一旦长起来,确实会陷入“缺包→找包→安装又缺包”的死循环,尤其是很久没碰RPM系的话,这种体验太折磨人了😅。结合你提到的Docker思路,下面给你几个高效的解决方案,都是能一次性搞定所有依赖的:

方法一:用SUSE官方工具zypper批量下载(最推荐)

SUSE的包管理器zypper本身就支持只下载包和所有依赖,不用实际安装。你可以用Docker启动一个和离线机器完全一致的SUSE 12 SP5容器,在容器里完成下载,再把包拷贝出来:

  1. 启动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镜像)

  2. 配置zypper源(确保能正常下载)
    进入容器后,先刷新源列表,如果源不可用,添加官方的SP5源:

    # 先刷新现有源
    zypper refresh
    # 如果刷新失败,添加官方OSS源
    zypper addrepo https://download.opensuse.org/distribution/leap/12.5/repo/oss/ sles12sp5-oss
    zypper refresh
    
  3. 下载目标包及所有依赖到指定目录

    • 如果目标包是官方源里的,直接用包名下载:
      # 把所有包下载到/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
      
  4. 把下载好的包拷贝到宿主机
    退出容器后,用Docker cp命令把容器里的包目录拷贝到本地:

    docker cp suse12_dl:/tmp/offline_rpms ./suse_offline_rpms
    

    现在./suse_offline_rpms目录里就有所有需要的包了,直接拷贝到离线机器上即可。

方法二:在离线机器上用本地包批量安装(可选优化)

如果需要多次安装或者安装多个包,你可以把下载的RPM包制作成本地仓库,这样离线机器上用zypper安装会更方便:

  1. 在离线机器上,把所有RPM包放到一个目录,比如/root/offline_repo
  2. 安装createrepo工具(如果离线机器上没有,需要先单独下载这个包的依赖并安装):
    zypper install createrepo
    
  3. 制作本地仓库:
    createrepo /root/offline_repo
    
  4. 添加本地仓库到zypper:
    zypper addrepo file:///root/offline_repo local-offline-repo
    
  5. 之后就可以像在线一样安装包了:
    zypper install 你的目标包名
    

避坑提醒

  • 一定要保证在线容器和离线机器的SUSE版本完全一致(都是12 SP5),否则依赖包的版本可能不兼容,导致安装失败。
  • 如果是第三方包,要确保它是针对SUSE 12 SP5编译的,否则可能会有依赖不匹配的问题。

备注:内容来源于stack exchange,提问作者Pierre

火山引擎 最新活动