旧版本的软件包不再可用?

Ded*_*ec0 5 package-management release-management

我正在尝试查找旧版本 Ubuntu 中可用但已从当前版本中删除的特定软件包。

我可以下载旧版本的所有 CD 的映像 ( http://old-releases.ubuntu.com/ ),但如果我无法下载可用的软件包,而它们存在 ( https://packages.ubuntu .com/或类似的东西,另一个子域,...),那么想要这些图像几乎毫无意义。

有趣的细节是https://packages.ubuntu.com/提到http://old-releases.ubuntu.com/作为旧发布内容的地方。由于它是一个搜索包的页面,因此这里似乎缺少一些基本的东西。

那么,如何找到以前版本的软件包(不再存在于packages.ubuntu.com 中的软件包)呢?

我发现了一个马马虎虎的相关问题,但它不一样:

ubuntu 10.04 的 apt-get 更新

miv*_*ivk 3

根据发布的时间,可以在下面找到旧版本和当前版本的 Ubuntu 软件包

例如,截至 2021 年 12 月, http://archive.ubuntu.com/ubuntu/pool/main/f/firefox/的版本最高为“ Version: 95.0+build1-0ubuntu1 ”,以及https://old- releases.ubuntu.com/ubuntu/pool/main/f/firefox/一直回到“版本:1.0.7-0ubuntu20 ”。

按名称列出的特定 Ubuntu 版本的详细信息可以在下面找到

(哪个名称对应哪个Ubuntu版本号可以在http://old-releases.ubuntu.com/releases/中找到)

例如,Ubuntu 14.04 被命名为“trusty”,“amd64”的“主”软件包列表位于文件 http://archive.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/中包.gz


N0r*_*ert 0

看来我们可以使用一些奇怪但有效的解决方案。
对于此类搜索,我们可以使用旧版本(Ubuntu 12.04 LTS)创建本地 chroot 环境并从中查找软件包。我们将使用debootstrap作为主要组件:

sudo apt-get install debootstrap
mkdir ~/precise_chroot
sudo debootstrap --no-check-gpg precise ~/precise_chroot 
Run Code Online (Sandbox Code Playgroud)

然后添加以前 LTS 版本中的所有存储库并选择主版本。下面是两个长命令,将其完整复制然后粘贴到终端:

cat <<EOF | sudo tee ~/precise_chroot/etc/apt/sources.list
# Ubuntu 12.04 LTS - Precise Pangolin
deb http://archive.ubuntu.com/ubuntu precise main universe multiverse restricted

# Ubuntu 10.04 LTS - Lucid Lynx
deb http://old-releases.ubuntu.com/ubuntu lucid main universe multiverse restricted

# Ubuntu 8.04 LTS - Hardy Heron
deb http://old-releases.ubuntu.com/ubuntu hardy main universe multiverse restricted

# Ubuntu 6.06 LTS - Dapper Drake
deb http://old-releases.ubuntu.com/ubuntu dapper main universe multiverse restricted
EOF

cat <<EOF | sudo tee ~/precise_chroot/etc/apt/apt.conf.d/01ubuntu
APT::Default-Release "precise";
EOF
Run Code Online (Sandbox Code Playgroud)

然后apt-get update在chroot内部调用:

sudo chroot ~/precise_chroot/ apt-get update
Run Code Online (Sandbox Code Playgroud)

并尝试将某些软件包的版本(Midnight Commander -mc例如)与apt-cache policy mc

$ sudo chroot ~/precise_chroot/ apt-cache policy mc
mc:
  Installed: (none)
  Candidate: 3:4.8.1-2ubuntu1
  Version table:
     3:4.8.1-2ubuntu1 0
        990 http://archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
     3:4.7.0-1ubuntu2 0
        500 http://old-releases.ubuntu.com/ubuntu/ lucid/universe amd64 Packages
     1:4.6.1-8ubuntu1 0
        500 http://old-releases.ubuntu.com/ubuntu/ hardy/universe amd64 Packages
     1:4.6.1-1ubuntu2 0
        500 http://old-releases.ubuntu.com/ubuntu/ dapper/universe amd64 Packages
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用此方法通过使用-t target_release选项指定发布来下载单个包:

$ sudo chroot ~/precise_chroot/ apt-get download mc -t hardy
Get:1 Downloading mc 1:4.6.1-8ubuntu1 [2156 kB]
Fetched 2156 kB in 1s (1174 kB/s)

$ ls precise_chroot/*.deb
precise_chroot/mc_4.6.1-8ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

所以你明白了。

小技术说明:该~/precise_chroot文件夹将使用大约 600 Mb 的磁盘空间。


我已经调整了这个方法 - 我们可以搜索包含已知文件名的包:

sudo chroot ~/precise_chroot/ apt-get install -y apt-file
sudo chroot ~/precise_chroot/ apt-file update
Run Code Online (Sandbox Code Playgroud)

以下是libicui18n.so.48的示例:

$ sudo chroot ~/precise_chroot/ apt-file search
lib32icu48: /usr/lib32/libicui18n.so.48
lib32icu48: /usr/lib32/libicui18n.so.48.1.1
libicu48: /usr/lib/libicui18n.so.48
libicu48: /usr/lib/libicui18n.so.48.1.1
libicu48-dbg: /usr/lib/debug/usr/lib/libicui18n.so.48.1.1
Run Code Online (Sandbox Code Playgroud)

并了解该软件包的 Ubuntu 版本:

$ sudo chroot ~/precise_chroot/ apt-cache policy libicu48libicu48:
  Installed: (none)
  Candidate: 4.8.1.1-3
  Version table:
     4.8.1.1-3 0
        990 http://archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)

所以它真的很强大而且简单。