我有一台笔记本电脑和几个存储库的本地副本,这些存储库位于连接到路由器的外部硬盘中。我的路由器以 Samba 共享和/或 FTP 服务器的形式提供对这些文件的访问(使用凭据)。
我想配置 apt-get 来在这些存储库可用时检查它们,并从中下载更新,以尽可能加快该过程。
更明确地说:当我的笔记本电脑连接到 WiFi 时,我希望 apt-get 检查互联网上的常规存储库和本地存储库。如果外部存储库中的文件比本地镜像中的文件新,或者镜像不可用,apt-get 应该从互联网上下载文件。
答案1
设置你自己的存储库有 4 个步骤
- 安装
dpkg-dev
- 将包放在目录中
- 创建一个脚本来扫描包并创建一个
apt-get update
可以读取的 文件 - 添加一行
sources.list
指向你的存储库
安装dpkg-dev
打开终端:
sudo apt-get install dpkg-dev
目录
创建一个目录来保存您的软件包。在本例中,我们将使用/usr/local/lan-repo
。
sudo mkdir -p /usr/local/lan-repo
现在将所有包移动到该新目录中。
已下载的软件包通常存储在系统中的 中/var/cache/apt/archives
。如果您已安装,apt-cacher
则很可能会在目录中存储其他软件包apt-cacher/packages
。
创建名为update-lan-repo
这是一个非常简单的三行脚本:
#! /bin/bash
cd /usr/local/lan-repo
sudo dpkg-scanpackages . /dev/null | gzip -9c > packages.gz
将上述内容复制并粘贴到您最喜欢的文本编辑器中,然后将其保存为update-lan-repo
。~/bin
(~
表示主目录。如果~/bin
不存在,则创建它。Ubuntu 会自动将该目录放入您的 PATH 中。这使其成为放置个人脚本的好地方。)
现在让我们使脚本可执行:
chmod u+x ~/bin/update-lan-repo
脚本的工作原理如下:
dpkg-scanpackages
查看 中的所有软件包lan-repo
,并将输出压缩并写入文件packages.gz
,该文件apt-get update
可以读取(请参阅下面的参考资料,其中详细介绍了这一点)。/dev/null
是一个空文件 - 也就是说 - 它是一个临时的覆盖文件,其中包含有关软件包的一些附加信息,而这些信息在我们的例子中并不是真正需要的。请参阅deb-override(5)
如果你想了解更多相关信息。
我们需要将您的本地存储库添加到您的 sources.list 文件中
echo "deb file:/usr/local/lan-repo ./" >> /etc/apt/sources.list
就这样你就完成了。
CD/DVD 选项
您可以将包含 .deb 文件的目录存储到 CD/DVD 中,并将其用作存储库(适合在计算机之间共享)。要将 CD 用作存储库:
只需运行命令:
sudo apt-cdrom add
使用新的存储库。
然后,每当您在 lan-repo 目录中存储新的 debian 包时,运行:
sudo update-lan-repo
sudo apt-get update
现在,您可以使用 Synaptic、aptitude 和 apt 命令来操作您的本地软件包:apt-get
、、apt-cache
等。当您尝试 apt-get install 时,只要能够满足任何依赖关系,它都会为您解决。
答案2
我终于设法解决了这个问题,并且效果很好,所以我想与想要实现类似目标的人分享。
我遇到的第一个问题是,我的系统支持多架构,因此镜像存储库应同时包含 i386 和 amd64 软件包(我没有镜像源),以避免下载错误。这是在/etc/apt/mirror.list就像这个例子显示的那样:
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
我的基本路径该文件中定义是/mnt/apt-mirrors,然后我运行一个脚本,将连接到路由器 USB 端口的外部硬盘驱动器作为 Samba 共享安装(您可以在此处看到该脚本: 如何使用 apt-mirror 将文件保存在连接到 LAN 路由器的硬盘中
我想从局域网中的其他计算机访问镜像存储库,因此解决方案的另一部分是添加 FTP 存储库定义一开始在/etc/apt/sources.list.此设置使得apt-get下载文件时首先使用 FTP 存储库,然后使用/etc/apt/sources.list.d,前提是镜像是最新的。
本地存储库定义如下:
deb [arch=amd64,i386] ftp://user:password@lan-resource/apt-mirrors/mirror/archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
你替换的地方用户使用已授予 FTP 服务器访问权限的用户名,:密码如果需要连接,则输入密码(否则删除),局域网资源使用 LAN 中的 FTP 服务器地址(我决定编辑/etc/hosts为了避免重复硬编码的 IP 地址,我将 192.168.0.1 定义为局域网FTP服务器在此领域使用)。