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

运维大佬们,如何在一台离线 Ubuntu 服务器上安装有复杂依赖的软件包

  •  
  •   orangie · 2023-02-20 22:50:01 +08:00 · 3355 次点击
    这是一个创建于 420 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体来说,我部门有一台用于跑重要数据模型的离线服务器已经位于数据提供方机房里,管理严格,不能拆出来带走配好再放进去,将要全新安装升级到 Ubuntu 22 LTS Server ,并且希望安装上以下几个软件包:

    1.xrdp ,用于使用 GUI 以及快速预览模型结果图
    2.xfce4 ,用于使用 GUI
    3.Anaconda ,这个好说,挺好装的
    4.其他工具软件,比如用于后台运行的 screen 之类的,软件包小,依赖简单,应该容易安装

    可以插上 U 盘装系统,装软件包,但是对于 xrdp 和 xfce4 这样依赖项比较多的软件包很难找到方便的离线安装方法。

    目前尝试过用创建离线源的方式,比如下面的两个方法
    https://gist.github.com/jeanlescure/084dd6113931ea5a0fd9
    https://www.he-yin.cn/archives/ubuntuapt
    但是下载的依赖项似乎都不全,跟联机用 apt 安装的软件包依赖有不同。

    比如联机安装 xrdp 的时候会一同安装 xorgxrdp 这个标记为 recommend 的包,但是链接的两个方法下载依赖包都不会下载 xorgxrdp 。好在 xrdp 只有 xorgxrdp 这一个需要手动补全的依赖,我再下载 xorgxrdp 及其依赖包就行了。难点在于 xfce4 ,它的直接依赖就有几十个甚至破百,不能手动一个个下载了。

    目前的办法是虚拟机联机安装过程输出里找到 xfce4 的依赖的列表,写了个 python 脚本逐个用 github gist 里的方法下载,但是也会有很多包找不到 candidate ,比如 deb-cnf-2.0 。

    由于机器放在数据提供方的机房里,不方便直接克隆几个 TB 的软件源再搭建内网源服务器,所以只能用这些下载软件包并制作离线源的方法。

    不知道有没有运维大佬知道什么好方法能配好软件环境。
    29 条回复    2023-02-21 22:10:06 +08:00
    orangie
        2
    orangie  
    OP
       2023-02-20 23:01:36 +08:00   ❤️ 1
    @anytk 这个帖子得票前 2 的方法分别对应的就是我发的第一个连接、第二个链接的方法,得票第三的那个 aptitude 工具好像已经过时了,准备试试看,但是不敢报什么希望。
    GopherDaily
        3
    GopherDaily  
       2023-02-20 23:04:38 +08:00
    走备份恢复的思路?
    orangie
        4
    orangie  
    OP
       2023-02-20 23:17:01 +08:00
    @GopherDaily 同配置服务器只有一台,而且是 GPU 服务器,驱动以及其他配置什么的估计会很麻烦。

    1 楼的链接里的得票数第三的方法也试了,只会下载一部分软件包,不全。
    aru
        5
    aru  
       2023-02-20 23:18:29 +08:00
    @orangie 用 nginx 做一个反向源的反向代理,然后将 ubuntu 的源配置为这个反向代理,从日志里面将所有的包列表拿出来并下载?
    Ansen
        6
    Ansen  
       2023-02-20 23:20:33 +08:00 via iPhone
    找一台版本一致的系统,安装一下你说的软件,然后把 apt 的缓存复制到 u 盘,然后在安装?(仅提供思路)
    anytk
        7
    anytk  
       2023-02-20 23:23:19 +08:00 via Android
    @orangie 不全是因为测试机和目标机本身版本不一致。还有种方法是下载目标版本的 dvd iso ,然后修改 apt sourcelist 添加 cdrom 源。这就是安装程序使用的 apt 策略。
    anytk
        8
    anytk  
       2023-02-20 23:26:07 +08:00 via Android
    orangie
        9
    orangie  
    OP
       2023-02-20 23:26:33 +08:00
    @anytk 难点在于如何精准(或者可以略微超多一点)下载到想要的 xfce4 及其依赖。制作 source.list 本地源这个已经能做的,本贴里的两个链接就是用的本地源,不过赖包都下载不完全。
    anytk
        10
    anytk  
       2023-02-20 23:31:22 +08:00 via Android
    @orangie 直接下载 22.04 的全套 DVD ISO ,拷贝过去挂载,然后加入到 soucelist 里,这跟自定义制作本地源不同。全套 DVD ISO 相当于一个 mirros snapshot 。如果再缺组件,那么你可能用到了或者间接用了 main 以外的包,涉及到了非来源组件。
    orangie
        11
    orangie  
    OP
       2023-02-20 23:33:00 +08:00
    @Ansen 虽然这方法麻烦,但是是最容易下载完全的了。需要改 apt 配置,apt 可能会自动清理缓存,改成不要清理。
    zhlxsh
        12
    zhlxsh  
       2023-02-20 23:33:36 +08:00 via iPhone
    假如常规方法有问题,最蠢也是最稳定的方法,用 apt-mirro 把软件源整个下载下来,官方的几个大约 350G ,然后本地起 nginx 搭一个源
    kokutou
        13
    kokutou  
       2023-02-20 23:34:54 +08:00
    没有米也没法做饭啊...
    跟甲方商量派个人来看着, 视频监控下, 开个热点装包...
    你留一份视频, 对方留一份视频...
    shijingshijing
        14
    shijingshijing  
       2023-02-20 23:35:10 +08:00
    Debian 的话,可以先弄一套一模一样的硬件,联网装好了,然后拷贝 /var/cache/apt/archives 到内网,然后手动一个个安装的,注意安装顺序。
    orangie
        15
    orangie  
    OP
       2023-02-20 23:38:39 +08:00
    @anytk 好像 xfce4 就不是 main 的,而且依赖项跨了 main 和 multiverse ,还有旧版仓库里的包。
    webcape233
        16
    webcape233  
       2023-02-21 06:51:38 +08:00 via iPhone
    最省事的就是搭建相同的可联网环境,这个上面写脚本下包(自动解决依赖),然后 copy 到那个机器,那个机器用这些包创建镜像源,然后 apt install 。
    hnbcinfo
        17
    hnbcinfo  
       2023-02-21 08:21:55 +08:00   ❤️ 1
    要是我,我比较懒,可能带个无线网卡,或手机连接线共享网络,安装完再拔掉。虽然方法 low ,但省事 o(╯□╰)o
    holinhot
        18
    holinhot  
       2023-02-21 08:47:49 +08:00
    找个 nginx 反代镜像地址做缓存,在新系统上安装一遍要的包就全缓存上了吧。
    Judoon
        19
    Judoon  
       2023-02-21 09:57:52 +08:00
    14 楼正解,找一台最小化安装的同系统,然后装一遍需要的安装包,最后把 /var/cache/apt/目录下面的 deb 包打包,放到目标系统下,直接 dpkg 安装所有
    dode
        20
    dode  
       2023-02-21 10:06:44 +08:00
    在联网环境中部署一个不联网的系统镜像,每次都同步安装软件包,千万不要用 apt update 功能
    LLaMA2
        21
    LLaMA2  
       2023-02-21 10:16:39 +08:00
    无所谓,虚拟机会出手!

    纯属没用的想法:我装好虚拟机,配置好所有的东西,虚拟机给你整过去。
    adrianzhang
        22
    adrianzhang  
       2023-02-21 10:24:31 +08:00
    办法倒是有,但是会打破安全篱笆。
    把 GPU 服务器整个 os ,倒腾成一个文件,拷贝到 u 盘。
    然后在一台联网机器上,恢复这个文件为 os ,然后联网安装需要的包,再把完事后的 os 倒腾到文件,用 u 盘送到 GPU 服务器,恢复。

    这个过程的难点在于,你得在第一步的时候,排除所有敏感数据。
    buffzty
        23
    buffzty  
       2023-02-21 10:53:31 +08:00
    最简单快速的方式: 在公网环境装一台机器 带过去硬盘覆盖
    orangie
        24
    orangie  
    OP
       2023-02-21 11:33:14 +08:00
    目前没有找到除了搭建代理扒镜像源之外的比较干净又全面的方法。

    现在虚拟机本地测试能安装好 xrdp 和 xfce4 地方法是 14 楼用 archives 的方法,配合本贴链接的 github gist 做成本地仓库。其中关于 Ubuntu 22 有几点要注意,1:要编辑 /etc/apt/apt.conf.d/里边的关于自动删除缓存的和保留缓存的 01 和 20 开头的两个配置文件 2:在线安装来下载缓存的时候不要使用 apt ,而使用 apt-get ,否则会莫名其妙不缓存,也可能是之前配置不对,总之用 apt-get 就好

    至于迁移系统的方式,考虑过,但是因为服务器硬件和我这里现在能用的机器差别太大,特别担心硬件配置导致的更复杂的问题,所以不做这方面的尝试。
    pxiphx891
        25
    pxiphx891  
       2023-02-21 13:35:27 +08:00
    还是 docker 好
    xiaoranj
        26
    xiaoranj  
       2023-02-21 14:24:48 +08:00
    @orangie mkdir ~/{$pkg}
    apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $pkg | grep -v amd64| grep "^\w" | sort -u)
    cd ~/{$pkg}
    dpkg -i *.deb
    最好一个软件一个目录
    orangie
        27
    orangie  
    OP
       2023-02-21 14:55:11 +08:00
    @xiaoranj 就是 https://www.he-yin.cn/archives/ubuntuapt 的方法,但是这个方法下载 xrdp 会忽略被列为 recommend 的 xorgxrdp ,而一般在线安装却会自动安装 xorgxrdp 。
    hack
        28
    hack  
       2023-02-21 15:18:17 +08:00
    让机房部署更新源好了
    nemo95
        29
    nemo95  
       2023-02-21 22:10:06 +08:00
    我一直觉得机房应该提供内网 ssh 接入方式和包括 yum 、pip 等等的内网更新源,但是去过的机房都是让抱笔记本进去坐地上调试,反倒是往服务器上插无线网卡没人管
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3288 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:43 · PVG 21:43 · LAX 06:43 · JFK 09:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.