如何使用基于 Debian 的 linux 发行版为随机包快速创建本地 apt 存储库?

23 debian apt package-management

有些情况需要使用dpkg -i <packagename>. 有时,利用该apt包的功能可能会更有用,所以问题是:

您如何使用基于 Debian 的 linux 发行版(例如 Xubuntu 13.04/Ubuntu)为随机包快速创建本地存储库?

小智 35

这应该与您尝试从官方存储库复制完整包树微调源优先级的情况区分开来。随机包是指虚拟包,即在本地编译或以零碎方式复制以用于测试目的的包。这是基于现已过时的文档的简单设置。

首先,创建一个目录来托管包:

mkdir <packagedir>
Run Code Online (Sandbox Code Playgroud)

然后将您的 .deb 包文件移到那里。从我们刚刚创建的目录上方的目录中执行此命令(确保权限允许!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz
Run Code Online (Sandbox Code Playgroud)

现在创建一个扩展名为.listin的文件,/etc/apt/sources.list.d/内容如下:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/
Run Code Online (Sandbox Code Playgroud)

并更新 apt 数据库:

apt-get update
Run Code Online (Sandbox Code Playgroud)

此时,我们本地存储库中的软件包可以像使用apt-get install <packagename>. 将新包添加到本地存储库时,dpkg-scanpackages必须再次发出规定的命令以更新Packages.gz文件,并且apt必须在新包可用之前进行更新。希望这对测试目的有用。

  • 在新的 apt 1.1 中,`deb` 和 `file:///` URI 之间需要 `[trusted=yes]`(参见 `sources.list(5)` 手册页),否则需要 `apt-get update ` 由于缺少签名而失败。 (6认同)

Pan*_*dya 6

虽然类似的答案已经存在,并且AU 上也有几个类似的答案apt-ftparchive,但我发布这个答案是为了建议使用dpkg-scanpackages

为什么apt-ftparchive而不是dpkg-scanpackages

  • dpkg-scanpackages命令是由软件包提供的dpkg-dev,该软件包不附带发行版的安装映像,根据我的观察,它可能没有安装在您的计算机上。您首先需要安装dpkg-dev软件包才能使用该dpkg-scanpackages命令。设置本地存储库的目的通常是在未连接到互联网的计算机上离线管理软件包。 apt-ftparchive命令是由apt-utils发行版的常用安装映像附带的。因此,您不需要安装任何额外的软件包。

  • 既然我们将使用 apt 而不是 dpkg 进行包管理,为什么不使用 apt 来扫描包呢?:)


如何设置APT本地存储库?

第 1 步:创建一个用于放置 debs 的目录。

$ mkdir ~/apt-local-repository
Run Code Online (Sandbox Code Playgroud)

第 2 步:将本地目录添加到存储库列表的顶部/etc/apt/sources.list

$ head -n 1 /etc/apt/sources.list
deb [trusted=yes] file:/home/pandya/apt-local-repository/ ./
Run Code Online (Sandbox Code Playgroud)
  • 请注意,如果您不设置[trusted=yes],则需要--allow-unauthenticated在通过安装包时设置参数apt

  • 该行被添加到存储库列表的顶部,以赋予其最高优先级。如果您将其添加到/etc/apt/sources.list.d/,apt 将尝试从在线存储库(如定义/etc/apt/sources.list)安装它,从而为您的本地存储库提供较低的优先级。

第三步:把你的债付给~/apt-local-repository

步骤 4:使用索引包列表aptftparchive

$ cd ~/apt-local-repository/; apt-ftparchive packages . > Packages
Run Code Online (Sandbox Code Playgroud)

第 5 步:使用更新 apt 索引/数据库sudo apt update

完毕。现在您可以使用以下命令安装 deb 包sudo apt install <packagename>。每次更改本地数据库时,只需重复步骤 3 到 5。


有用的提示:

  • 您可以运行apt-cache policy <packagename>调查APT是否识别您本地的deb包并赋予其最高优先级

  • 您可以运行sudo apt-get --print-uris install <packagename>来检查是否满足所有依赖项,或者您需要下载任何额外的包。它还会列出 url,其中 i) ftp:// 表示本地存储库中的软件包,和/或 ii) http:// 表示需要从 Internet 下载的软件包或缺少的依赖项。

您可以看一下我创建的一个名为Local Apt Repository Manager脚本。