![将软件包从 oldstable (wheezy) 安装到 stable (jessie)](https://linux22.com/image/677046/%E5%B0%86%E8%BD%AF%E4%BB%B6%E5%8C%85%E4%BB%8E%20oldstable%20(wheezy)%20%E5%AE%89%E8%A3%85%E5%88%B0%20stable%20(jessie).png)
我想从 wheezy 安装 jessie 中缺少的软件包。这就像反向移植。我需要 gcc-4.7,但 jessie 只提供 gcc-4.9。Unstable 只为 arm 架构提供 gcc-4.7。我计划将 wheezy repo 添加到我的源中并使用命令安装它
apt install gcc-4.7/wheezy
这样做是否相对安全?这样做会冒依赖性问题的风险吗?
答案1
它很可能无法完美地工作。通常旧版本的路径和二进制文件与新版本相冲突。有时有人会反向移植它,当他们这样做时,通常需要更改路径以使所有内容在非标准目录下工作。这会使包工作,但其他包将找不到它们的依赖项。
您可能想要尝试的一件事是让受影响的可执行文件在 docker 容器中运行。您可以创建一个以前版本的 Debian 容器,在其中安装运行可执行文件所需的最少软件,然后创建容器的映像。所有依赖项都将位于容器内,您只需使用 即可运行它docker run <image> <command>
。这可以为一些命令行软件(甚至服务器软件)节省时间,但如果受影响的可执行文件需要 Xserver 或管理权限,则可能会很麻烦。
答案2
您可以尝试在 jessie 实例上重新编译从 wheezy 获得的源 deb 包。请注意,我假设gcc-4.7
可以使用 进行编译而不会出现错误gcc-4.9
,但这并不是万无一失的。
但一般程序应该是:
- 将 wheezy 二进制文件作为源添加到您的
/etc/apt/sources.list
文件中,例如deb http://ftp.us.debian.org/debian/ wheezy main contrib
- 将 wheezy 源作为源添加到您的
/etc/apt/sources.list
文件中,例如deb-src http://ftp.us.debian.org/debian/ wheezy main contrib
- 跑步
apt-get update
- 下载
gcc-4.7
源码包:apt-get source gcc-4.7
- 通过运行安装构建
gcc-4.7
依赖项apt-get build-dep gcc-4.7
(这实际上可能非常困难,因为可能与您当前安装的软件包存在许多冲突,您需要手动解决它们) - 进入步骤 4 中
apt-get
下载的源包的目录,例如或任何名称gcc-4.7
cd gcc-4.7
- 构建 gcc-4.7:
dpkg-buildpackage -us -uc
- 假设它构建没有错误,安装您将在父目录中找到的生成的包
我是根据记忆编写的此过程,因此请谨慎对待并根据需要调整命令。特别是我不确定dpkg-buildpackage
-us
jessie-uc
中是否存在选项,如果没有,就不要使用它们。