带多版本管理的Ubuntu软件源服务器搭建

准备阶段

下载安装reprepro

注: 官方下载安装的reprepro是不支持多版本管理的, 因此 不要使用sudo apt install reprepro下载

源码网址 将三个文件放在同一个文件夹下, 例如repreproNew

shell 复制代码
cd repreproNew
# 安装所需依赖
sudo apt-get install build-essential debhelper
sudo apt-get install libdb-dev libarchive-dev shunit2 db-util
# 解压源码
dpkg-source -x reprepro_5.4.1-1.dsc
# 构建软件包
cd reprepro-5.4.1
debuild -us -uc -ui
# 安装软件
sudo dpkg -i ../reprepro_5.4.1-1_amd64.deb

GPG密钥生成

shell 复制代码
gpg --full-generate-key

跟着显示的内容, 创建一个GPG密钥, 需要记下它的ID

shell 复制代码
# 导出公钥, 将该公钥上传到服务器方便其他客户端获取, 或单独发送给某些客户端
gpg --armor --export 密钥ID > ~/mydeb_pub.key

配置本地的软件源仓库(后面直接通过scp将整个仓库上传)

shell 复制代码
# 创建模板
mkdir -p ~/reprepro/ubuntu/{conf,dists,incoming,logs,pool,project,tmp}
cd ~/reprepro/ubuntu
# 将公钥文件移动到该文件夹下, 方便通过curl获取
mv ~/mydeb_pub.key ./
# 填写配置文件
vim config/distribution

内容如下

复制代码
Codename: focal
Suite: stable
Components: main
Architectures: i386 amd64
Description: My personal repository
SignWith: YES #或者填写刚才记下的ID
Limit: 100

参数说明

  1. Codename : 发行版的代号,例如 focalbuster
  2. Suite : 可选的,用于描述发行版的状态,如 stabletesting
  3. Components : 仓库的组件,通常是 maincontribnon-free
  4. Architectures : 支持的架构类型,如 i386amd64
  5. Description: 对发行版的描述。
  6. SignWith : 指定用于签名的 GPG 密钥。可以是密钥的 ID 或 YES(代表默认密钥)。这里建议填写ID, 防止签名混淆 SignWith: ABCD784C3D4A5B6C
  7. Limit : 这个参数是新版本才有的, apt下载的没有, 用于限制每个同名包最多存在多少个版本, 0代表不限制(未测试), 当仓库中同名的版本多于该值时, 会选择保留最新的Limit个包
shell 复制代码
# 继续写配置文件
vim config/options

内容如下

复制代码
verbose
basedir .
  • verbose: 开启详细模式,使 Reprepro 在处理时提供更多信息。
  • basedir : 设置仓库的基本目录。通常为 .,代表当前目录。

建立deb包的索引列表

shell 复制代码
# 将所有deb包移动到reprepro/ubuntu/incoming目录下
mv /path/to/debs/*.deb incoming
# 建立索引
reprepro -b . includedeb focal incoming/*.deb

在完成了这一步以后, 就可以删除 reprepro/ubuntu/incoming/下的所有deb包了

将本地源仓库上传到服务器

shell 复制代码
scp -r ~/reprepro/ubuntu username@yourserver.com:/path/to/repository

服务器配置

shell 复制代码
ssh username@yourserver.com
sudo apt update
sudo apt install nginx vim
vim /etc/nginx/sites-available/default

填写以下内容

复制代码
server {
    listen 80;
    server_name your.server.com;  # 替换为您的服务器域名或IP

    location / {
        root /path/to/repository;  # 替换为您的仓库路径
        autoindex on;  # 开启索引
    }
}

重启nginx服务

shell 复制代码
sudo systemctl restart nginx

在客户端上添加并使用软件源

添加源地址及公钥

shell 复制代码
echo 'deb http://your.server.com/ubuntu focal main' | sudo tee -a /etc/apt/sources.list

# 添加公钥 1.本地添加
sudo apt-key add /path/to/public.key 
# 添加公钥 2.从网站获取
curl -fsSL http://网站域名/ubuntu/mydeb_pub.key | sudo apt-key add -

下载需要的包

shell 复制代码
sudo apt update
sudo apt install 自定义包
相关推荐
小辰记事本5 小时前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux6 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
江公望8 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦8 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫9 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
YuanDaima20489 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王11 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器
starvapour11 小时前
Ubuntu切换到Fcitx5中文输入法
linux·运维·ubuntu
1892280486111 小时前
NY382固态MT29F32T08GSLBHL8-24QM:B
大数据·服务器·人工智能·科技·缓存
xhbh66612 小时前
网关端口映射和路由器端口转发有什么区别?配置要点全解析
运维·服务器·网络·智能路由器·端口映射·映射·无痕网关