将旧版 32 位鲜为人知的软件迁移(而非安装)到 64 位 16.04 LTS

将旧版 32 位鲜为人知的软件迁移(而非安装)到 64 位 16.04 LTS

我有一台非常老旧的(8 年!)服务器,最近因建筑物中的高压降压变压器“停止运行”而因电源尖峰而损坏。它再也无法从 HDD 启动,无论如何都无法启动。该服务器运行 Slackware 13 并提供用 PVX 语言编写的会计软件包。整个系统是/曾经是 32 位。我设法使用 Ubuntu 16.04 LTS 从 USB 启动系统,手动安装,然后启动启动其中一个阵列所需的各种 raid 软件,伪造一堆符号链接,恢复几个 .ssh 目录,瞧!我们有一台伪稳定的机器,它一直在生产环境中为会计软件提供服务。我屏住呼吸,希望不会发生比 UPS 更长时间的断电,因为整个系统都是 LiveCD。

与此同时,我使用与启动旧机器相同的映像(16.04 LTS)设置了新服务器,当然它是 64 位的。我从旧服务器复制了软件和数据目录,所有权限和位置都是正确的。我最初在启动 PVX 监听守护进程时遇到了问题,因为它们甚至没有被识别为可执行文件,直到我手动添加了一些 i386 软件包(libc6、libc5、libncurses5 等,因为它需要 /lib/ld-linux.so.2)。现在启动脚本将运行,监听守护进程正在监听,PC 客户端可以连接但无法登录... 返回一个错误,另一个 PVX 程序(LOGON)无法运行。对我来说很奇怪,“试用 Ubuntu”LiveCD 可以很好地运行软件,无需任何修改(即无需手动安装 32 位软件包),但新机器上的全新安装缺少许多库。此外,在 LiveCD 安装中,/lib 目录的顶层有大约 90 个库,而在全新安装中只有一个:ld-linux.so.2。所有其他库都位于 /lib/i386-linux-gnu 和 /lib/x86_64-linux-gnu 子目录中。我可以在 /lib 中生成指向 i386 和 i86_64 目录中文件的相应链接,但我犹豫着是否要开始制造混乱……

非常感谢您的帮助。

答案1

您已完成第一步,即安装 32 位加载程序(来自 libc6-x32 包的 /lib/ld-linux.so.2),因此 32 位可执行文件上的 ldd 输出应该是合理的(即不声明“不是动态可执行文件”),并且您可以确定程序希望在哪里找到库,并为其添加必要的内容。我发现让旧的 32 位程序以这种方式运行并不难。

相关内容