只需在网络服务器上设置一个简单但已签名的存储库即可。由于大多数其他教程有些过时或繁琐,因此我将在此处尝试复制该过程。初始配置需要一些努力,但是简单的构建脚本使其易于管理。您可以直接放入新*.deb
文件,然后进行更新,或者由cron作业处理。
生成一些签名密钥
首先,您需要gpg
为软件包和存储库创建一个签名密钥。使其成为(4)RSA签名密钥,无需密码,并在需要$KEYNAME
时为其赋予唯一性。(其他示例将“ dpkg1
”作为键名。)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
我说没有密码,因为您的网络服务器没有内置的猴子可以重复输入。签名的程序包和存储库仅用于满足更新管理器对此的抱怨。只需上传两个键到新的/apt/
网页伺服器储存库目录,但删除secret.gpg
键后初始化。
更新CGI脚本
这是简单的更新外壳程序/ 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
这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
这适用于单体系结构存储库,并且如果您不希望有数百个软件包。
包裹签收
设置gpg密钥后,对单个软件包进行签名也很简单:
dpkg-sig -k dpkg1 -s builder *.deb
(这应该在构建软件包的工作站上完成,而不是在资源库Web服务器上完成。)
未签名的存储库
如果不需要签名的程序包,则可以将更新脚本削减为:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
普通用户仍可以使用,但需要为以下对象添加自定义标志apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
但是,请不要trusted=yes
习惯性地将标志用于所有内容,或者如果您实际上不确定包的来源。
为了可用性
对于最终用户,只需将一个HEADER.html
放到存储库目录中即可。Apache mod_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>
备择方案
如今,有一些工具可以自动执行存储库管理。甚至还有存储库在线托管和软件包构建服务(gemfury,packagecloud,bintray等)
由于这与原始问题密切相关,因此还有一些工具可以更轻松地构建Debian软件包。有些过时了:EPM。同时代:FPM。我的个人利益是:XPM(用于打包脚本语言应用程序的更懒惰的方法。)