![使用暂存环境创建本地 apt 存储库](https://linux22.com/image/83462/%E4%BD%BF%E7%94%A8%E6%9A%82%E5%AD%98%E7%8E%AF%E5%A2%83%E5%88%9B%E5%BB%BA%E6%9C%AC%E5%9C%B0%20apt%20%E5%AD%98%E5%82%A8%E5%BA%93.png)
我正在尝试使用 reprepro 创建一个 apt 存储库,这在很大程度上非常简单。我一直使用这篇文章作为参考,因为我喜欢暂存树的结构。
http://vincent.bernat.im/en/blog/2014-local-apt-repositories.html
然而,我似乎无法理解可能非常简单的事情。使用下面文章中的示例conf/distributions,我对以下事实感到困惑:当我导入包时,它总是只转到main。没有名为 Precision-staging 和 Precision-prod 的目录吗?我想做的是有一个单独的地方来放置未经测试的包和另一个用于生产的包在同一个存储库中。 (/opt/packages/pool/trusty-prod,/opt/packages/pool/trusty-stage)
我可以根据需要通过 /etc/apt/sources.list.d/ 使用 puppet 将客户指向其中任何一个。
我是否完全不知道如何完成或理解这篇文章?
Dailymotion Precise packages (staging)
Origin: Dailymotion
Label: dm-staging
Suite: precise-staging
Codename: precise-staging
Architectures: i386 amd64 source
Components: main role/dns role/database role/web # ➊
Description: Dailymotion Precise staging repository
Contents: .gz .bz2
Tracking: keep
SignWith: yes
NotAutomatic: yes # ➋
Log: packages.dm-precise-staging.log
--type=dsc email-changes
Dailymotion Precise packages (prod)
Origin: Dailymotion # ➌
Label: dm-prod # ➌
Suite: precise-prod
Codename: precise-prod
Architectures: i386 amd64 source
Components: main role/dns role/database role/web # ➊
Description: Dailymotion Precise prod repository
Contents: .gz .bz2
Tracking: keep
SignWith: yes
Log: packages.dm-precise-prod.log
答案1
为自己设置一个简单的存储库只需 4 个步骤
1.安装 dpkg-dev
2.将软件包放入目录中
3.创建一个脚本来扫描软件包并创建一个 apt-get update 可以读取的文件
4. 在您的sources.list中添加一行,指向您的存储库
安装 dpkg-dev
在终端中输入
sudo apt-get install dpkg-dev
目录
创建一个用于保存包的目录。对于这个例子,我们将使用
/usr/local/mydebs.
sudo mkdir -p /usr/local/mydebs
现在将您的包移至您刚刚创建的目录中。
以前下载的软件包通常存储在系统上的 /var/cache/apt/archives 目录中。如果您已经安装了 apt-cacher,您将在其 /packages 目录中存储其他软件包。
脚本 update-mydebs
这是一个简单的三行:
#! /bin/bash
cd /usr/local/mydebs
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
将以上内容剪切并粘贴到 gedit 中,并将其另存为 ~/bin 中的 update-mydebs。 (波浪号“~”表示您的主目录。如果 ~/bin 不存在,请创建它:Ubuntu 会将该目录放入您的 PATH 中。这是放置个人脚本的好地方)。接下来,使脚本可执行:
chmod u+x ~/bin/update-mydebs
脚本如何工作: dpkg-scanpackages 查看 mydebs 中的所有包,并将输出压缩并写入 apt-get update 可以读取的文件 (Packages.gz)(请参阅下面的参考资料,该参考资料详细解释了这一点)。 /dev/null 是一个空文件;它是覆盖文件的替代品,其中包含有关包的一些附加信息,在本例中实际上并不需要这些信息。如果您想了解它,请参阅 deb-override(5)。
来源.list
添加行
deb file:/usr/local/mydebs ./
到你的 /etc/apt/sources.list ,你就完成了。
光盘选项
您可以将包含 deb 的目录刻录到 CD 并将其用作存储库(适合在计算机之间共享)。要将 CD 用作存储库,只需运行
sudo apt-cdrom add
使用存储库
每当您将新的 deb 放入 mydebs 目录时,请运行
sudo update-mydebs
sudo apt-get update
现在,您的本地软件包可以使用 Synaptic、aptitude 和 apt 命令进行操作:apt-get、apt-cache 等。当您尝试 apt-get 安装时,只要可以满足任何依赖关系,将为您解决所有依赖关系。
制作糟糕的软件包可能会失败,但您不会忍受 dpkg 地狱。