V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

dpkg -i 命令安装一个软件(包含多个 deb 都在本地了), 如何按依赖顺序进行安装?

  •  
  •   css3 · 2019-11-28 15:19:35 +08:00 · 3617 次点击
    这是一个创建于 1807 天前的主题,其中的信息可能已经有所发展或是发生改变。

    所有的依赖已经下载好了,只是要安装的话,如何保证按正确的顺序进行?另外就是没有外网可用。。要的包,都是本地的,而且都有

    dpkg -i *.deb 这样中间很多报错,就是因为顺序不正确

    22 条回复    2019-12-02 10:35:50 +08:00
    imn1
        1
    imn1  
       2019-11-28 15:22:54 +08:00
    写个 sh 不难吧?
    ysc3839
        2
    ysc3839  
       2019-11-28 15:25:05 +08:00
    试试在文件名前加上编号?
    css3
        3
    css3  
    OP
       2019-11-28 15:31:29 +08:00
    @imn1 100 个写 100 行 dpkg -i xx deb 吗,?

    @ysc3839 什么意思呢,不太懂
    wangkun025
        4
    wangkun025  
       2019-11-28 15:32:34 +08:00
    @css3
    ysc3839
        5
    ysc3839  
       2019-11-28 15:36:10 +08:00
    @css3 要先安装的包文件名前面加上小的数字,后安装的加上大的数字,这样的话 shell 的 * 展开后应该是按文件名排序的。
    另外想了想这么做可能也很麻烦,也许可以试试写个脚本什么的把这些包里面的元数据提取出来生成 Packages 文件,然后加入 apt 源列表再安装就好了。
    hoyixi
        6
    hoyixi  
       2019-11-28 15:37:42 +08:00   ❤️ 1
    sudo cp <your path>/*.deb /var/cache/apt/archives/
    sudo dpkg -i <你想装的那一个 deb>
    sudo apt-get install -f
    css3
        7
    css3  
    OP
       2019-11-28 15:40:26 +08:00
    @hoyixi 一个 python,可能有几十个 deb, 我要 ```dpkg -i <你想装的那一个 deb>``` 几十次吗😂
    imn1
        8
    imn1  
       2019-11-28 15:41:34 +08:00
    @css3
    对我来说 100 行也不太难,我 copy 文件名(很多文件管理器可以)到编辑器,然后用正则每行加上 dpkg -i,done
    不过,个人选择吧
    MicrosoftAccount
        9
    MicrosoftAccount  
       2019-11-28 15:44:03 +08:00 via Android
    @css3 #6 认真理解一下,再执行一下能死?
    pmispig
        10
    pmispig  
       2019-11-28 15:44:29 +08:00
    做一个本地源,把包全部放到源里,建立依赖关系,用 apt 安装
    hoyixi
        11
    hoyixi  
       2019-11-28 15:44:29 +08:00
    @css3 #7
    你自己说的,“安装一个软件”, “所有的依赖已经下载好了”
    比如你要装 a.deb, 依赖 1.deb, 2.deb, 3.deb 。。。都下好了,那你就 sudo dpkg -i a.deb
    n37r06u3
        12
    n37r06u3  
       2019-11-28 15:45:39 +08:00
    用 gdebi 吧 自动的
    pmispig
        13
    pmispig  
       2019-11-28 15:45:50 +08:00
    还有另一种办法是,弄一台试错的机器,写一个循环,直到所有的包都成功安装为止,记录成功安装的顺序,然后生成一个列表就可以了
    css3
        14
    css3  
    OP
       2019-11-28 17:03:38 +08:00
    @hoyixi 下载是按 apt-get install a 下载下来的 deb, 这样获取的 deb, 安装是用的 dpkg 安装的,不能直接 dpkg -i a 啊
    lihongjie0209
        15
    lihongjie0209  
       2019-11-28 17:06:42 +08:00
    centos 下安装流程:

    1. 建立一个本地 repo, 地址指向 file://some/path/
    2. 使用 createrepo 建立 repo 索引数据
    3. yum makecache 使 yum 客户端读取到索引数据
    4. yum install xxx 依赖自动安装


    Ubuntu 估计也是一样的,google Ubuntu localrepo 之类的
    lihongjie0209
        16
    lihongjie0209  
       2019-11-28 17:08:16 +08:00   ❤️ 1
    nightwitch
        17
    nightwitch  
       2019-11-28 23:06:59 +08:00
    6 楼答案都写好了,你试下不就行了
    你把 a 的所有依赖都放到 apt 的缓存目录里,用 dpkg -i 安装 a,然后 apt install -f 会自动帮你按顺序装好 a 的所有依赖
    css3
        18
    css3  
    OP
       2019-11-29 09:19:50 +08:00
    @MicrosoftAccount
    @nightwitch
    有点不太明白哈,举个例子说明一下,我要安装 python-dev 这个包(他就一个包,不是个 deb 文件,安装他,其实就是安装下边我说的 19 个 deb ),19 个 deb 包已放到 /var/cache/apt/archives/目录,如下图

    https://t1.picb.cc/uploads/2019/11/29/kI7G2c.md.png

    现在机器上断网状态

    按 6 楼同学说的,我是执行 dpkg -i python-dev ? 肯定执行不了啊??

    https://t1.picb.cc/uploads/2019/11/29/kI7HmK.png

    要用 dpkg -i *.deb 才行,他会安装这 19 个 deb, 但顺序不是按依赖顺序来的,是乱序的,我现在的问题就是,如何尊重他的依赖啊,按正确的顺序安装下来,
    css3
        19
    css3  
    OP
       2019-11-29 09:20:48 +08:00
    @css3 更正一下是 17 个 deb, lock 和 partial 不算
    nightwitch
        20
    nightwitch  
       2019-11-29 16:25:06 +08:00
    @css3 python-dev 是一个名字,它的实际包名是 python-dev_xxxx_amd64.deb, 你要用 dpkg 手动安装它,再用 apt 修复它的所有依赖
    css3
        21
    css3  
    OP
       2019-11-29 18:11:42 +08:00
    @nightwitch python-dev_xxxx_amd64.deb 这样的 deb 有多个的话,执行哪个呢
    killeder
        22
    killeder  
       2019-12-02 10:35:50 +08:00
    Gdebi
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:07 · PVG 05:07 · LAX 13:07 · JFK 16:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.