news 2026/6/9 22:08:01

Debian 包的制作与安装完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Debian 包的制作与安装完整指南

1. 创建简单的程序

首先创建一个简单的 C 程序作为示例:

# 创建程序目录 mkdir -p ~/example/hello-world-program # 编写 C 程序 echo '#include <stdio.h> int main() { printf("hello packaged world\n"); return 0; }' > ~/example/hello-world-program/hello.c # 编译程序 cd ~/example/hello-world-program gcc -o hello-world hello.c

2. 创建 Debian 包结构

2.1 创建包目录结构

# 创建符合命名规范的目录 # 格式: <package-name>_<version>-<release-number>_<architecture> mkdir -p ~/example/hello-world_0.0.1-1_amd64

2.2 组织文件结构

cd ~/example/hello-world_0.0.1-1_amd64 # 创建二进制文件目录 mkdir -p usr/bin # 复制编译好的程序 cp ~/example/hello-world-program/hello-world usr/bin/

2.3 创建控制文件

# 创建 DEBIAN 目录 mkdir -p DEBIAN # 创建 control 文件 cat > DEBIAN/control << EOF Package: hello-world Version: 0.0.1 Maintainer: example <example@example.com> Depends: libc6 Architecture: amd64 Homepage: http://example.com Description: A program that prints hello EOF

3. 构建 Debian 包

# 返回包目录的上级目录 cd ~/example # 构建 .deb 包 dpkg --build hello-world_0.0.1-1_amd64

构建完成后会生成hello-world_0.0.1-1_amd64.deb文件。

4. 检查包内容

4.1 查看包信息

dpkg-deb --info hello-world_0.0.1-1_amd64.deb

输出示例:

new Debian package, version 2.0. size 2832 bytes: control archive=336 bytes. 182 bytes, 7 lines control Package: hello-world Version: 0.0.1 Maintainer: example <example@example.com> Depends: libc6 Architecture: amd64 Homepage: http://example.com Description: A program that prints hello

4.2 查看包内容

dpkg-deb --contents hello-world_0.0.1-1_amd64.deb

5. 安装和测试

5.1 安装包

sudo apt-get install -f ./hello-world_0.0.1-1_amd64.deb

5.2 验证安装

# 检查程序位置 which hello-world # 运行程序 hello-world

应该输出:hello packaged world

5.3 卸载包

sudo apt-get remove hello-world

6. 创建 APT 仓库(可选)

6.1 创建仓库目录结构

mkdir -p ~/example/apt-repo/pool/main/ cp ~/example/hello-world_0.0.1-1_amd64.deb ~/example/apt-repo/pool/main/

6.2 生成 Packages 文件

cd ~/example/apt-repo mkdir -p dists/stable/main/binary-amd64 # 生成 Packages 文件 dpkg-scanpackages --arch amd64 pool/ > dists/stable/main/binary-amd64/Packages # 压缩 Packages 文件 gzip -9 < dists/stable/main/binary-amd64/Packages > dists/stable/main/binary-amd64/Packages.gz

6.3 生成 Release 文件

# 创建生成脚本 cat > ~/example/generate-release.sh << 'EOF' #!/bin/sh set -e do_hash() { HASH_NAME=$1 HASH_CMD=$2 echo "${HASH_NAME}:" for f in $(find -type f); do f=$(echo $f | cut -c3-) # remove ./ prefix if [ "$f" = "Release" ]; then continue fi echo " $(${HASH_CMD} ${f} | cut -d" " -f1) $(wc -c $f)" done } cat << EOF Origin: Example Repository Label: Example Suite: stable Codename: stable Version: 1.0 Architectures: amd64 Components: main Description: An example software repository Date: $(date -Ru) EOF do_hash "MD5Sum" "md5sum" do_hash "SHA1" "sha1sum" do_hash "SHA256" "sha256sum" EOF chmod +x ~/example/generate-release.sh # 生成 Release 文件 cd ~/example/apt-repo/dists/stable ~/example/generate-release.sh > Release

7. 测试本地仓库

7.1 启动 HTTP 服务器

cd ~/example python3 -m http.server

7.2 配置 APT 源

echo "deb [arch=amd64] http://127.0.0.1:8000/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/example.list

7.3 更新并安装

sudo apt-get update --allow-insecure-repositories sudo apt-get install hello-world

8. 包签名(安全部署)

8.1 生成 GPG 密钥

# 创建密钥生成配置 cat > /tmp/example-pgp-key.batch << EOF %echo Generating an example PGP key Key-Type: RSA Key-Length: 4096 Name-Real: example Name-Email: example@example.com Expire-Date: 0 %no-ask-passphrase %no-protection %commit EOF # 生成密钥 export GNUPGHOME="$(mktemp -d ~/example/pgpkeys-XXXXXX)" gpg --no-tty --batch --gen-key /tmp/example-pgp-key.batch

8.2 导出公钥

gpg --armor --export example > ~/example/pgp-key.public

8.3 签名仓库

# 签名 Release 文件 cd ~/example/apt-repo/dists/stable cat Release | gpg --default-key example -abs > Release.gpg # 创建 InRelease 文件(包含签名的 Release) cat Release | gpg --default-key example -abs --clearsign > InRelease

8.4 安全配置 APT 源

echo "deb [arch=amd64 signed-by=$HOME/example/pgp-key.public] http://127.0.0.1:8000/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/example.list # 安全更新和安装 sudo apt-get update sudo apt-get install hello-world

重要注意事项

  1. 包命名规范:遵循<package>_<version>-<release>_<arch>格式

  2. 文件权限:确保二进制文件有可执行权限

  3. 依赖管理:在 control 文件中正确声明依赖

  4. 架构支持:根据程序类型选择正确的架构(amd64, all 等)

  5. 安全签名:生产环境必须使用 GPG 签名

  6. 私钥保护:妥善保管 GPG 私钥,不要泄露

这个指南涵盖了从简单程序打包到完整 APT 仓库创建的全过程,适合个人使用和小规模部署。

参考:Creating and hosting your own deb packages and apt repo - Earthly Blog

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 18:23:30

如何利用SQL计算ABC库存分类(帕累托分析)?

目录 一、核心概念:ABC分类与帕累托法则 1. ABC库存分类法定义 2. 帕累托法则(二八定律) 3. 为什么用SQL窗口函数实现? 二、SQL实现:完整ABC分类方案 1. 需求明确 2. 数据准备 3. NTILE(n) 函数简介 核心定义 基本语法 特点 分配算法原理 4. 完整SQL代码 5.…

作者头像 李华
网站建设 2026/6/8 19:25:04

RAG 检索模型如何学习:三种损失函数的机制解析

Agent 系统发展得这么快那么检索模型还重要吗&#xff1f;RAG 本身都已经衍生出 Agentic RAG和 Self-RAG&#xff08;这些更复杂的变体了。 答案是肯定的&#xff0c;无论 Agent 方法在效率和推理上做了多少改进&#xff0c;底层还是离不开检索。检索模型越准&#xff0c;需要…

作者头像 李华
网站建设 2026/6/6 10:32:02

亿可达×飞书:一键搞定定时群通知,告别人工重复提醒

有没有过这样的职场日常&#xff1f; 每天下午临近下班&#xff0c;都要特意定个闹钟提醒自己&#xff1a;“别忘了发例会通知”“记得同步今日工作小结到飞书群”&#xff1b;每周一早上&#xff0c;总要专门抽5分钟&#xff0c;在部门群推送本周任务清单&#xff1b;甚至节假…

作者头像 李华
网站建设 2026/6/9 20:09:52

前端性能优化系列(一):问题分析与诊断

一、问题拆解 1.1 问题描述分析 原始问题&#xff1a;前端页面打开非常慢 大量请求 数据量大 拆解为三个维度&#xff1a; 问题维度拆解&#xff1a; ├── 慢在哪里&#xff1f; │ ├── 首屏白屏时间长&#xff08;3秒以上&#xff09; │ ├── 页面加载完成时…

作者头像 李华
网站建设 2026/6/9 7:57:21

(新卷,200分)- 区间交叠问题(Java JS Python)

(新卷,200分)- 区间交叠问题&#xff08;Java & JS & Python&#xff09;题目描述给定坐标轴上的一组线段&#xff0c;线段的起点和终点均为整数并且长度不小于1&#xff0c;请你从中找到最少数量的线段&#xff0c;这些线段可以覆盖柱所有线段。输入描述第一行输入为所…

作者头像 李华