端午前装好了训练服务器

2026年 6月 21日
CONTENTS


2026年过去了大半。让我庆幸的,这半年的时间里有一半的时间是在工作中度过。至少迈出了改变的一步,没有在焦躁抑郁中度过。放下过去,离开故乡大抵是正确的选择罢。现在的我,不会因想到明天还要工作而深感疲劳和绝望。工作轻松,意味着时间飞逝,每天有充足的闲暇出门散步或者在房间看小说打游戏。

在广东独居一个多月,逐渐沉默无语。腹部的肥肉开始一点点积攒,暗示着身体的变化。自从离开家以后,我不曾跑步锻炼,不曾主动思考怎么强健身体,只是晚上偶尔出门散步,买瓶饮料,走路走到累了便折返回宿舍。

咳咳。这两天日夜颠倒,不慎染上感冒,鼻子反复用通气鼻塞摩擦导致毛细血管破裂出血。这种事本不应该强求,偏偏总有一种用大号通气塞能治疗好鼻中隔偏曲的错觉。说起来,这困扰多年的睡觉鼻塞导致呼吸困难问题,最近才在网上买到一种中空鼻塞得以解决。但是戴着真的好痛,这种鼻塞在尾端有螺环防止滑落(实际上没起到作用反而造成疼痛)前端有突起卡在鼻腔顶部也是防止滑落(这个才有效)。

哦,屁屁好痛。难得的端午三天小假期,兴奋过头玩了整夜游戏,昨天凌晨五点才睡,睡到下午四点才起床,接着玩到今天凌晨四点,玩腻了复习白夜一的小说《Resurgent》,看到染血银月尾声,名为失去的凄凉悲伤,倒映在小小的身躯上。十点多出门购物,去了那家前两日散步无意间发现夹在普通店面之间通往二楼的大商场,就在我暂住点不远处(当时是夜间九点没什么人要关门了),备些面包干粮。结账下楼,边上有个早餐店买了点饺子饭团,便回屋吃点东西睡大觉。下午八点才起床,吃完剩下的饺子,洗个澡,终于决定开始写作。

写作这种事,就是边磨屁股边绞尽脑汁组词造句想出点该写的东西。写作才能什么的,完全没有好吧。全靠记忆梳理编织最近发生的事情,写出流水账文字勉强凑字数。没有所谓【为谁而写】,一厢情愿记录近期的事,仅此而已。

说起来已有两星期没写博客,时间快得很,两周内做过的事情一会就忘记。接下来就说说在工作上遇到的事情。

前几天客户这边需要拿一台旧win服务器改造用于yolo8深度学习训练服务和标注平台,本以为联网安装Ubuntu20.04然后装下英伟达GeForce RTX 4070显卡就可以直接用了,谁知到了客户办公室一问,说是不让联网安装系统,而且只有安装系统的时候可以插U盘,装完系统就不能插U盘只能用光驱拷入数据。震惊!真的,当时就直接意识到事情的严重性了,不能联网安装,意味着没法按以前的经验正常操作,所有系统软件的更新和依赖处理必须离线完成。一时间想不到怎么办才好。

客户也帮忙询问几个相关负责人,都说不允许联网,他也没办法,只好先安装试试,遇到问题再说。这一折腾,便是一个星期。

第一和第二天只是下午去机房装系统,客户这边严格遵循下午两点半上班五点半下班的悠极短工作时间,等第一天到了机房装系统才发现这时间远远不够用,一天能做的测试极为有限。当天下午光是测试Ubuntu20.04,安装完桌面系统重启进入桌面会黑屏,内核报错未知的芯片组。用比较新的Fedora 43 workstation安装完可以进桌面。说明英伟达显卡比系统内核还新,没有支持基础显示的 noveau 驱动。第二天在自己电脑上装了个Ubuntu20.04 容器,把需要的软件用 apt install --download-only 下载到 /var/cache/apt/archives 然后打包复制到服务器安装,尝试了 apt install /var/cache/apt/archives/*.debdpkg -i /var/cache/apt/archives/*.deb 全都失败。这还是其一,其二是这系统默认没有安装 sshd 等相关工具,非常的离谱。

第二天晚上突然想到个办法解决网络问题:既然直接从别的系统铐安装包来有依赖冲突,那就直接用机房的服务器联网测试安装,测试完后把安装的软件包导出,等重新离线安装系统时再导入就行了。

第三天,问了客户这个方法是否可行,客户认为既然重装系统会清除硬盘数据,那就没问题,所以同意了,陪我去机房的运维也同意了。既然这样,那就赶紧测试吧。在这之前,我又下载了几个比较新的Ubuntu镜像,有22年、24年、26年,除了桌面版还有server版(无头live系统)

第三天和第四天都在做安装测试。之前查到 NVIDIA GeForce RTX 4070 是 2023 年发售,那么理论上在这一年之前的发行版都无法使用。能选的只有 24 年和 26 年的发行版。我先装26年的桌面版,装完重启开机可以亮屏进桌面,没问题,可是若要更新系统并安装软件包就不得不下载一大堆无关紧要的桌面软件包,即便用最新版本桌面系统,仍然没有 sshd 这种非常重要的服务。想了一下觉得不行,以我多年使用Linux系统的直觉,Debian 系桌面操作系统更新出现安装大量软件包的情况大概率会出问题。所以后面直接用 live server 版本测试了。装英伟达驱动的时候,还有个关键点是,Docker容器能否支持英伟达的容器运行时工具包。公司研发给的驱动当然不能用,那是老系统才能安装,新系统不用想都知道会出现依赖问题。去英伟达官网查了资料,发现Ubuntu操作系统经过测试的只有 22 和 24 两个版本。那么现状就很明确了,能用的操作系统只有 Ubuntu server 24.04。

第五天,装系统遇到一个坑:测试环境安装系统是联网安装,联网安装会问你是否直接安装英伟达驱动,开始安装时它会在后台下载新安装包。当时我不知道,一直以为联网安装不会更新系统,装完之后 /var/cache/apt/archives 里还留有 NVIDIA 相关驱动,而且安装时间极其漫长(用的 https://mirrors.163.com/ubuntu/ 安装源),等到把软件包打包后断网测试安装时才发现他妈的缺少依赖!!!

第六天,终于安装成功了。我把这种必须断网装系统的安装过程整理如下:

  1. 测试期间:启动时按F12选择移动介质启动,期间不接入互联网。到网络配置期间设定静态IP;选择安装 OpenSSH Server;选择不安装英伟达驱动。安装完毕重启系统后拔出移动介质。
  2. 测试期间:重启系统进入终端提示符,看下 /var/cache/apt/archives 有没有安装包,正常情况是没有。连上互联网,切换root用户,执行 apt update && apt full-upgrade --download-only 然后执行 tar -acf /root/01-full-upgrade.tar /var/cache/apt/archives 把安装包打包。打包完最好养成习惯用 sha1sum 算个哈希值。最后执行 apt install /var/cache/apt/archives/*.deb && apt clean 安装并清理缓存。然后重启系统
  3. 测试期间:安装英伟达驱动。执行 ubuntu-drivers devices 看到所有可下载驱动。我这个显卡推荐安装 nvidia-driver-595-server-open 因为之前在联网安装系统时点了自动安装nvidia驱动,看了一下安装的就是这个。开始安装,如果apt有缓存,执行apt clean 清理缓存后执行 apt install nvidia-driver-595-server-open 然后执行打包 tar -acf /root/02-nvidia-595-server-open.tar /var/cache/apt/archives。最后执行 apt install /var/cache/apt/archives/*.deb && apt clean 安装并清理缓存。然后重启系统
  4. 测试期间:安装必要的软件包,下面列出其中几个可能要用的,按照【步骤3】操作即可。
    • curl
    • nmap
    • tree
    • docker.io (或者 podman,我没试过)
    • dos2unix
    • unzip
    • nginx (业务需要)
    • redis-server(业务需要)
    • openjdk-8-jre-headless(业务需要)
    • ffmpeg(业务需要,会依赖一堆桌面环境库所以不推荐安装,最好去GitHub下载静态编译的压缩包)
    • gnupg2(这是后面安装英伟达容器运行时需要的)
    • ca-certificates(同上,其实默认已安装)
    • dvd+rw-tools(DVD 光盘写入工具,具体可看ArchWiki 光盘驱动器
  5. 测试期间:安装英伟达容器运行时。按照 Installing the NVIDIA Container Toolkit 操作。注意 apt install 执行安装的时候添加参数 --download-only 然后按照【步骤3】操作。最后别忘了配置运行时 sudo nvidia-ctk runtime configure --runtime=docker(见英伟达文档底部)
  6. 测试期间:把上述安装包刻录到 DVD-R 光盘。注意:DVD 光盘只有4G空间,刻录的时候不能超过此限制。
    1. 把压缩包和哈希校验文件放在一个文件夹里,比如 /root/deb_package/
    2. 制作ISO镜像文件。执行 mkisofs -V "ARCHIVE_20260621" -J -r -o /root/isoimage.iso /root/deb_package 创建镜像文件。
    3. 插上光驱,写入光盘。先执行lsblk看下/dev/sr0SIZE大小,如果是2048则没识别到光盘;如果是其他数值,大概是识别到了,空光盘记得好像是2M,有数据的光盘则是其他大于2M的其他数值。有数据的光盘可能无法再写入了,这里需要用无数据的光盘。执行 growisofs -dvd-compat -Z /dev/sr0=/root/isoimage.iso 写入光盘。
    4. 完成后执行 mount /dev/sr0 /mnt && ls -l /mnt 检查是否写入成功。
  7. 生产环境:重装系统,操作与【步骤1】一致。
  8. 生产环境:进入系统,接上客户的内网网线,插入光驱,执行lsblk检查是否识别到光盘,若识别到了,执行 mount /dev/sr0 /mnt && ls -l /mnt 检查能否挂载。
  9. 生产环境:将/mnt中的文件复制出来,并使用sha1sum -c *.sha1 检查所有文件。
  10. 生产环境:执行 apt clean && tar -axf /root/01-full-upgrade.tar -C / && apt install /var/cache/apt/archives/*.deb 安装系统更新。然后重启系统
  11. 生产环境:同【步骤10】,安装英伟达内核驱动。然后重启系统
  12. 生产环境:同【步骤10】,安装所需软件包,不必重启。
  13. 生产环境:同【步骤10】,安装英伟达容器运行时,然后重启系统
  14. 生产环境:测试容器中是否能跑英伟达相关程序,比如说docker.1ms.run/library/ubuntu:latest。执行 docker load -i ubuntu_latest.tar 容器导入本地镜像,执行 docker run --rm --gpus all --runtime nvidia -it docker.1ms.run/library/ubuntu:latest /bin/bash 进入容器,然后执行 nvidia-smi 如果成功输出显卡信息,则说明部署成功了。
  15. 生产环境:检查远程登录是否启用。执行systemctl status sshd(Ubuntu好像是systemctl status ssh),没有使能的话就执行 systemctl enable sshd && systemctl restart sshd。之后就可以用普通用户账号远程登录,不用再去机房了。

至此,长篇累牍的部署过程就结束了。这篇文章主要就是写这个,别的事情倒是不重要,最近两周忙的很,事情多。端午放假前一天想着19号能不能加一天班拿个三倍工资,跟老班说了他不同意(笑)。他又说想让我包干项目,到时候签个协议,提前结束的时候拿项目提成,项目延期扣工资,我说这不就是项目经理嘛,我不想担责任,也不缺这点钱,所以果断拒绝。其实这事是之前带我来广东的前辈告诉我的,如果包干项目我就成了项目经理,项目出了问题全由我承担责任,风险大于收益。前辈真的很可靠,教我避开的许多坑。再次感谢已离职的前辈!!!

21号我打算去深圳逛一天,看看深圳的人文环境。今天就是21号,还没买票啊啊啊!!!!!


Comments: