服务端
reprepro 相关配置
-
添加发行配置
sudo apt install reprepro sudo mkdir -p /var/www/html/apt-repository cd /var sudo chown -R $USER:$USER www cd ./www/html/apt-repository mkdir conf cd conf touch distributionsdistribution 的配置的字段解释如下:
- Origin: Your_Origin // 指定软件包仓库的来源,通常是您或您的组织的名称
- Label: our_Label // 给软件包仓库设置一个标签,用于标识仓库
- Codename: Your_Codename // 每个发行版都有一个代号,比如 stable、testing、unstable 等
- Architectures: Your_Architectures // 指定软件包支持的架构,比如 amd64、i386、arm64 等
- Components: main // 指定软件包仓库的组件,比如 main、contrib、non-free 等
- Description: Your_Description
- SignWith: YOUR_KEY_ID // 指定用于对软件包进行签名的GPG密钥ID
一个具体的例子如下
Origin: Team Label: algorithm Codename: stable Architectures: amd64 arm64 Components: main Description: The deb of algorithm department of team SignWith: 14A8D54DAE457C5233A63C8483558764B2FCCCA1 -
上述的配置中有一个 gpg 密钥,这是需要先生成并填写的
gpg --gen-key >>> # 会要求填写如下几个部分,冒号后面是我填写的一个具体的例子 Real Name: username Email address: user@example.com.cn You need a Passphrase to protect your secret key: 5aidaYUMAOQIU # 这个是用来保护密钥的密码。。。 >>> gpg --list-keys >>> # 下面的 14A8D54DAE457C5233A63C8483558764B2FCCCA1 就是需要的密钥ID /home/username/.gnupg/pubring.kbx ------------------------------------ pub rsa3072 2025-02-06 [SC] [expires: 2027-02-06] 14A8D54DAE457C5233A63C8483558764B2FCCCA1 uid [ultimate] username <user@example.com.cn> sub rsa3072 2025-02-06 [E] [expires: 2027-02-06] >>> -
将密钥文件拷贝到
apt-repository下面方便客户端添加密钥的公钥# 这一步需要用到密钥 ID:14A8D54DAE457C5233A63C8483558764B2FCCCA1 # 另外回车敲下命令后还会需要输入刚才配置的 passphrase:5aidaYUMAOQIU gpg --output /var/www/html/apt-repository/public.key --armor --export 14A8D54DAE457C5233A63C8483558764B2FCCCA1 -
初始化仓库
cd /var/www/html/apt-repository reprepro export -
添加软件包到
reprepro仓库# reprepro会根据DEB包内的元数据自动将其放置在正确的架构目录下。 reprepro includedeb stable /data/r1_deb/dataflow_1.0.0_arm64.deb reprepro export # 查看目录架构 tree -a .
配置 Nginx 代理 reprepro 仓库的静态文件
sudo apt-get install nginx
sudo vim /etc/nginx/sites-available/default
>>> # 找到如下的字段并修改
# 1. 改为 `root /var/www/html/apt-repository;`
# 2. location 中添加 `autoindex on;`
# 注意分号不能省略
server {
listen 80;
root /var/www/html/apt-repository;
server_name _;
location / {
autoindex on;
}
>>>
sudo systemctl restart nginx打开 http://server_ip/ 就可以打开 index of apt-repository
上述配置解析:
listen 80: 这是HTTP(超文本传输协议)的标准端口号。当用户在浏览器地址栏输入一个网址而没有指定端口号时,默认使用的就是80端口。所以改成别的端口时以下所有部分要从server_ip改成server_ip:portroot ...: 设置网站根目录server_name _: 设置域名或服务器 IP 地址autoindex on;: 展示目录列表
客户端
配置 apt 源
cd /etc/apt/sources.list.d
sudo vim nova-algo.list
>>> # 服务器 ip 是 192.168.7.102
deb [arch=arm64] http://192.168.7.102 stable main导入 GPG 密钥
public.key 的位置去决定这部分的设置:
wget -qO - http://192.168.7.102/public.key | sudo apt-key add -
# 列出所有的密钥
apt-key list更新下载
sudo apt update
sudo apt install dataflow
>>> # 会自动安装依赖(前提是deb包本身配置了依赖),dataflow 本身有很多依赖,但是只有 libgoogle-glog-dev 没装,所以只装这个
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libgoogle-glog-dev
The following NEW packages will be installed:
dataflow libgoogle-glog-dev
>>> deb 打包的时候怎么设置依赖项并被 apt 解析请参考(注意 set(CPACK_DEBIAN_PACKAGE_DEPENDS 部分):
# set the package type
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
# strip the binaries
set(CPACK_STRIP_FILES YES)
# Set dependencies
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libyaml-cpp-dev, libopencv-dev, libgoogle-glog-dev")set(CPACK_DEBIAN_PACKAGE_DEPENDS... 会影响 DEBIAN/control 文件中的 Depends 字段,比如上述设置后的效果是:
Depends: libyaml-cpp-dev, libopencv-dev, libgoogle-glog-dev