lala.im:使用aptly快速创建Debian存储库

運維技術·lala.im · 2019-08-27 · 97 人浏览

原文地址:https://lala.im/6274.html,請支持原作者!該處僅作轉載。

aptly是一个用Go开发的Debian存储库管理工具,功能非常强大,这绝对是个神器。。
aptly可以镜像远程存储库,管理本地存储库,制作快照,发布Debian存储库,甚至还自带一个小型的http服务器方便你发布存储库,功能上可以说应有尽有,最重要的是,使用起来非常方便。
我最近准备用这个弄一个自己的存储库,存一些常用的软件包,以下是基于Debian10的配置过程。
安装gnupg/nginx,gnupg用来签名,nginx用来提供存储库的http服务(虽然aptly自带http服务,但如果正式使用还是建议使用nginx)

apt -y install gnupg nginx

创建一个用户:

useradd -r -m -s /bin/bash -U aptly

将用户加入到sudo(可选:)

adduser aptly sudo

更改此用户的密码:

passwd aptly

下载最新的1.4.0版本(apt包管理器可以直接装,但版本是1.3.0,并且这个版本与gpg2不兼容,后续会有问题,所以这里采用下载二进制文件的方式手动安装)

wget https://github.com/aptly-dev/aptly/releases/download/v1.4.0/aptly_1.4.0_linux_amd64.tar.gz
tar -xzvf aptly_1.4.0_linux_amd64.tar.gz
cp aptly_1.4.0_linux_amd64/aptly /usr/bin

现在新开一个终端,使用之前创建的aptly用户登录到Shell内(不要用sudo/su这样的命令,后续gpg签发密钥对的时候会报权限问题)
使用gpg生成密匙对:

gpg --full-generate-key

步骤如下:

範例
之后会让你设置一个key密码,这个密码一定要妥善保管,忘记这个密码等于忘记你的私钥:

範例
生成完成之后,导出自己的私钥(可选,就是备份一下)

gpg --export-secret-keys --armor [email protected] > imlala.gpg

公钥也可以导出(可选)

gpg --export --armor [email protected] > imlala-pubkey.gpg

列出密钥的Key:

gpg --list-keys

如图所示:

範例
使用Key将公钥提交到公共服务器:

gpg --keyserver keyserver.ubuntu.com --send-key 1688618470F535B54F136DAE981B3E8949BAFE4C

然后访问公共服务器,输入签发密匙对时填写的邮箱:

範例
搜索,看有没有自己的Key在内,有的话就说明OK了:

範例
现在创建一个目录,将需要用到的deb包通过SFTP等方式上传到这个目录内:

mkdir deb

接着就可以使用aptly创建一个存储库了:

aptly repo create -distribution="buster" -comment="lala.im personal repository" imlala

添加软件包到存储库:

aptly repo add imlala deb/libtorrent-rasterbar_1.1.13-1_amd64.deb
aptly repo add imlala deb/qbittorrent-nox_4.1.7.1_amd64.deb

目录内有多个软件包也可以直接:

aptly repo add imlala deb/*.deb

如图所示:

範例
然后创建快照:

aptly snapshot create imlala_snapshot from repo imlala

之后从快照发布存储库(你也可以直接从repo发布,但官方不推荐这样):

aptly publish snapshot imlala_snapshot

注:从快照发布存储库的好处是,后续在repo内做出的任何修改(比如添加/删除/修改/软件包),都不会影响当前对外提供服务的存储库,只有当你确定repo没问题后,重新发布一个快照,对外服务的存储库才会更改。这样更符合生产环境的标准。
新建nginx站点配置文件:

nano /etc/nginx/conf.d/aptly.conf

写入如下配置:

server {
    listen 80;
    listen [::]:80;
    server_name apt.koko.cat;
    root /home/aptly/.aptly/public;
    index index.html
    allow all;
    autoindex on;
}

重启nginx:

systemctl restart nginx

一些常用的aptly命令:

aptly publish drop buster # 取消已发布的存储库,这里指定的名字不是存储库的名字而是distribution
aptly snapshot drop imlala_snapshot # 删除快照(如果当前快照正在对外服务,需要先取消快照对应的存储库发布后才能删除)
aptly snapshot show -with-packages imlala_snapshot # 显示某个快照内有多少个包
aptly snapshot list # 列出所有快照
aptly repo show -with-packages imlala # 显示某个存储库内有多少包
aptly repo list # 列出所有存储库
aptly repo remove imlala qbittorrent-nox_4.1.7.1_amd64 # 从存储库删除包
aptly serve # 启动自带的http服务器

客户机如何添加存储库?
首先安装gnupg:

apt -y install gnupg

然后添加存储库密钥:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 98AF4941E87242C9AB69092454C8779CE3C4E14F

接着添加源:

echo "deb http://apt.koko.cat/ buster main" > /etc/apt/sources.list.d/imlala.list

更新源信息:

apt -y update
運維技術 lala.im
Theme Jasmine by Kent Liao