Nat*_*man 54 package-management apt repository
我想在将提供几个包的服务器上设置一个 APT 存储库。
有没有办法在服务器上不安装任何软件的情况下进行设置?
文件必须如何组织?
编辑:我一定是做错了什么......有人可以帮助我吗?我在http://quickmediasolutions.com/apt/dists有存储库
我不确定在哪里或什么,但有些东西配置错误。我目前只有一个包,它适用于所有架构。
这是添加到我的/etc/apt/sources.list:
deb http://quickmediasolutions.com/apt stable main
Run Code Online (Sandbox Code Playgroud)
mar*_*rio 40
只需在网络服务器上设置一个简单但已签名的存储库。因为大多数其他教程有些过时或繁琐,我将尝试在此处复制该过程。初始配置需要一些努力,但简单的构建脚本使其易于管理。您可以放入新*.deb文件,然后进行更新,或者让 cron 作业来处理。
首先,您需要gpg为包和存储库创建签名密钥。将其设为 (4) RSA 签名密钥,无密码,并在需要$KEYNAME时为其赋予唯一性。(进一步的例子假设“ dpkg1”作为键名。)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Run Code Online (Sandbox Code Playgroud)
我说没有密码,因为你的网络服务器没有内置的猴子来重复输入。并且签名的包和存储库只是为了满足更新经理对此的抱怨。只需将两个密钥上传到/apt/您的网络服务器上的新存储库目录,但在初始化后删除secret.gpg密钥。
这是它的简单更新 shell/CGI 脚本:
#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:
{
#-- settings
export GNUPGHOME=/var/www/usr12345/files
export KEYNAME=dpkg1
#-- one-time setup
if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
gpg --import -v -v ./secret.gpg
gpg --import -v -v ./public.gpg
gpg --list-keys
fi
#-- symlink .deb files from adjacent sub-directories
find .. -name '*.deb' -exec ln -s '{}' . \;
#-- build Packages file
apt-ftparchive packages . > Packages
bzip2 -kf Packages
#-- signed Release file
apt-ftparchive release . > Release
gpg --yes -abs -u $KEYNAME -o Release.gpg Release
} 2>&1
Run Code Online (Sandbox Code Playgroud)
这gpg三行只需要执行一次,即可在某个目录$GNUPGHOME(文档根目录上方)中初始化 GPG 设置。secret.gpg成功后才删除。
这个小型 shell 脚本的一个独特功能是它接受*.deb您放入的任何文件,但也会递归搜索(从一个级别开始)其他文件,并将它们符号链接。(Options FollowSymLinks最终需要 .htaccess 。)
您可以手动执行此脚本作为 CGI 或每个 cron-job。但是隐藏它,或者更好地将它移出文档根目录。
因为它是一个“微不足道”的 apt 存储库,所以它需要以下apt-sources.list条目:
deb http://example.org/deb/ ./ # Simple signed repo
Run Code Online (Sandbox Code Playgroud)
这适用于单一架构的存储库,如果您不期望有数百个包。
一旦你设置了你的 gpg 密钥,签署你的个人包也很简单:
dpkg-sig -k dpkg1 -s builder *.deb
Run Code Online (Sandbox Code Playgroud)
(这应该在构建软件包的工作站上完成,而不是在存储库网络服务器上。)
如果您不需要签名包,那么您可以将更新脚本缩减为:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Run Code Online (Sandbox Code Playgroud)
普通用户仍然可以使用它,但需要一个自定义标志apt.sources:
deb [trusted=yes] http://apt.example.org/deb/ ./
Run Code Online (Sandbox Code Playgroud)
但是请不要trusted=yes习惯性地将标志用于所有内容,或者如果您实际上不确定包的来源。
对于最终用户,只需将 aHEADER.html放入存储库目录即可。Apachesmod_auto_index将在该注释前加上:
<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
<dd><kbd>deb http://example.org/apt/ ./ # example repo</kbd>
<dt>Import verification key with:
<dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>
Run Code Online (Sandbox Code Playgroud)
现在有一些工具可以自动化存储库管理。甚至还有存储库在线托管商和包构建服务(gemfury、packagecloud、bintray等)
一个相当方便的替代方法是prm。它是一个 Ruby 脚本,用于构建复杂的 APT 和 YUM 存储库。(但我们只是希望 RPM 最终会很快消失……) - 最好按gem install prm.
而且我还编写了一个小脚本来类似地自动执行此操作:http : //apt.include-once.org/apt-phparchive - 请注意,它不是用 PHP 编写的过于健壮(这一次,这是巧合),最初用于 DEB、RPM-over-APT 和 Phar 包。
由于这与原始问题密切相关,因此还有一些工具可以更轻松地构建 Debian 软件包。有点过时:EPM。更现代的:FPM。以及我的个人分支:XPM(用于打包脚本语言应用程序的更懒惰的方法。)
| 归档时间: |
|
| 查看次数: |
68680 次 |
| 最近记录: |