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

2023-02-20 22:50:01 +08:00
 orangie
具体来说,我部门有一台用于跑重要数据模型的离线服务器已经位于数据提供方机房里,管理严格,不能拆出来带走配好再放进去,将要全新安装升级到 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 的软件源再搭建内网源服务器,所以只能用这些下载软件包并制作离线源的方法。

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/917763

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX