当我关注 wiki 页面 AptGet/Offline(许多帖子都引用了该页面)时,我从 ubuntu 存档中下载了相当多的东西,例如从 16.04
http://archive.ubuntu.com/ubuntu/dists/xenial/
然而,完整下载的文件大小出奇地小,只有几 MB,而不是我预期的几 GB。我点击了该部分的内容,没有发现任何真正巨大的文件。
我可能只是看不清楚这个显而易见的东西,但是人们需要的所有 .deb 文件在哪里呢?
答案1
注意:实际答案在评论中穆鲁
在我看来,我看到的关于 Ubuntu 存储库的 wiki 描述有点误导。我无法在那里编辑,所以我只是在这个答案中概述了我所学到的东西。
我指的是页面“AptGet/离线/存储库”和“什么是存储库?”
我现在明白了 Ubuntu 存储库有两个独立的部分
- 有关软件的元数据集合,相当小(几 MB)
- 软件本身相当大(超过 100GByte)
有一个文件服务器http://archive.ubuntu.com. 它有以下子目录
http://archive.ubuntu.com/ubuntu
dists/ [here is the meta data]
pool/ [here is the software binaries/sources]
indicies/ [don't know]
project/ [don't know]
在发布这个问题时,我只知道 1)。大多数帖子直接链接到 dists/ 部分,所以我从未进入父文件夹并发现 2)。该部分在 wiki 页面中没有真正描述。
dists/ 部分包含有关软件包的元数据。它按发行版(xenial、yakkety 等)排序。有标准软件包、安全更新、标准更新、建议版本和反向移植软件包。所有这些将软件包分为主、受限、宇宙和多元宇宙,如帖子中详细说明的那样。其中一个子文件夹名为“源”,但它不包含实际来源。我所说的元数据是指 ubuntu 软件包管理器工作所需的所有信息。它包括向用户显示的文本、软件包包含哪些模块的信息、需要哪些版本、它具有哪些其他库依赖项等。它主要是列表。虽然有很多软件包,但完整下载相当小,例如 16.04 LTS“xenial”大约 100MB。这里没有任何实际软件。
实际的软件位于另一个分支:pool/。它的结构也包括 main、restricted、universe 和 multiverse。下面是按字母顺序排列的文件夹,每个软件包都有一个文件夹,其中包含各种文件,通常包括这些软件包所包含的不同版本。它没有标准、安全更新、更新、建议或反向移植等区域,因为似乎任何东西都放在这些文件夹中。
我(还)不知道指标和项目的部分。
概括
因此,为了使任何内容离线工作,需要 dists/ 文件夹的内容和 pool/ 文件夹的内容(或其部分)。
Apt 离线工具
不幸的是,维基页面“AptGet/Offline/Repository”没有告诉你还有比 apt-medium 更方便的命令行工具。它旨在创建一个完整的离线存储库。它被称为“apt-mirror”。不幸的是,它不是默认安装的。如果你只是安装并运行它而不做任何更改,它将下载并安装一个存储库到 /var/spool/apt-mirror,其中包含来自 dist/ 和 pool/ 的数据(可能还有其他位(?))。请注意,我们谈论的是 16.04 大约 100GB 的数据,可能需要数小时/数天/一周才能下载,具体取决于你的连接。它会告诉你要下载多少数据,所以你可以用 Ctrl-C 停止它并从配置文件中注释掉一些不需要的部分,然后重新开始。第一次我没有注意大小,第二天早上我很惊讶,它似乎什么也没做,直到我发现我的磁盘已满。我认为它没有填满到使整个系统停滞的程度,这很好,我可以删除所有内容并重新开始。完成后,可以将其复制并放在离线计算机或网络共享上。
这里有一个关于如何做到这一点的非常好的描述:
https://odzangba.wordpress.com/2007/12/24/use-apt-mirror-to-create-your-own-ubuntu-mirror/
编辑
我仍然在让它工作时遇到了很多麻烦(最终它确实工作了)。我不确定根本原因,但我知道许多人都在为离线问题而苦苦挣扎,所以我将在此过程中记录下我的注意事项。不过,并非所有的注意事项都是必要的
复制离线存储库可能会引起麻烦,它可能会更改所有者和权限。当我将复制的文件夹递归设置为 chmod 777 时,事情突然发生了变化。结果是 usbdrive 上的所有文件和 apt-mirror 文件夹都具有以下权限
drwxrwxrwx root root 123 Feb 15 00:00 apt-mirror
检查离线存储库是否工作的最佳方法是将在线计算机的 /etc/apt/sources.list 文件设置为仍挂载的 usb 驱动器,然后在终端窗口中启动 aptitude。xterm 更简单,因为您当时可以使用鼠标。当您打开 aptitude 时,它尚未更新存储库,因此它显示在线计算机的当前状态。在文件菜单中选择更新,看看会发生什么。如果它询问 root,请选择确定。如果更新输出中出现单个警告或错误消息,则更新可能会失败(无论消息可能如何)。您可以立即验证这一点,因为 aptitude 将显示极少的未安装软件包(我的 usb 驱动器上有 5 或 10 个,大小为 80GB)。然后您就知道需要修复某些东西了。
永远不要像 apt 那样使用 sudo apt-mirror 启动它,而是使用 apt mirror
Apt-mirror 可以下载更新,也就是说,您可以在一周后再次连接 USB,然后重新运行它以仅捕获更改的文件。确保安装点位于同一文件夹中,例如 /media/usbdrive,否则它将再次下载所有内容。最好手动安装
sudo fdisk -l // 找出设备 ID,例如 sdc1 sudo mount /dev/sdc1 /media/usbdrive
sudo umount /dev/sdc1 //完成后
我使用的 /etc/apt/mirror-list 文件如下所示:
# make sure that path never changes, also for updates set base_path /media/usbdrive/apt-mirror set nthreads 20 set _tilde 0 # download both amd64 and i386. Even on 64bit computers,e.g.
deb-amd64http://archive.ubuntu.com/ubuntuxenial 主受限宇宙多元宇宙 deb-i386 http://archive.ubuntu.com/ubuntuxenial 主要受限宇宙多元宇宙清洁http://archive.ubuntu.com/ubunutu
希望这对 CatMan 有用