5步完成Linux软件包制作:从源码到可安装文件
2026-04-22 09:34:35作者:牧宁李
🌟 核心价值:为什么选择Debian软件包
Linux软件包制作(Debian软件包,.deb格式安装文件)是开源项目分发的关键环节。对于wiliwili这款专为手柄控制设计的跨平台B站客户端而言,通过Debian软件包可以实现:
- 简化安装流程:用户只需一条命令即可完成部署
- 标准化依赖管理:自动处理系统库依赖关系
- 跨发行版兼容:支持Debian、Ubuntu及其衍生系统
- 版本控制:便于更新和回滚操作
图1:wiliwili客户端主界面展示,采用手柄优化的交互设计
🛠️ 环境配置:准备工作清单
基础工具链安装
sudo apt update && sudo apt install -y \
build-essential cmake dpkg-dev dh-make \
libass-dev libssl-dev libx11-dev libv4l-dev \
libpulse-dev libuchardet-dev libwebp-dev
依赖版本兼容性对照表
| 依赖库 | 最低版本 | 推荐版本 | 备注 |
|---|---|---|---|
| cmake | 3.10 | 3.16+ | 构建系统生成工具 |
| libssl | 1.1 | 1.1.1f+ | 加密通信支持 |
| libwebp | 0.6 | 1.0.0+ | 图像解码支持 |
| dpkg-deb | 1.19 | 1.20+ | Debian打包工具 |
源码获取
git clone https://gitcode.com/GitHub_Trending/wi/wiliwili
cd wiliwili
🔄 流程拆解:从源码到软件包
1️⃣ 构建应用程序
项目采用CMake构建系统,针对Linux桌面环境需添加特定参数:
mkdir -p build && cd build
cmake .. -DPLATFORM_DESKTOP=ON -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
构建完成后,可执行文件位于build/wiliwili。
2️⃣ 打包目录结构准备
创建标准Debian打包目录树:
wiliwili-deb/
├── DEBIAN/
│ ├── control # 软件包元数据
│ ├── postinst # 安装后脚本
│ └── prerm # 卸载前脚本
└── usr/
├── bin/ # 可执行文件
├── share/
│ ├── applications/ # 桌面文件
│ └── icons/ # 图标资源
3️⃣ 资源文件处理
图标生成与安装
cd scripts/linux
chmod +x gen_icons.sh
./gen_icons.sh
生成的图标需按尺寸安装到标准目录:
# 示例:安装16x16尺寸图标
mkdir -p ../wiliwili-deb/usr/share/icons/hicolor/16x16/apps/
cp icons/16x16/cn.xfangfang.wiliwili.png \
../wiliwili-deb/usr/share/icons/hicolor/16x16/apps/
桌面文件配置
编辑cn.xfangfang.wiliwili.desktop文件:
[Desktop Entry]
Name=wiliwili
Comment=手柄优化的B站客户端
Exec=/usr/bin/wiliwili
Icon=cn.xfangfang.wiliwili
Terminal=false
Type=Application
Categories=AudioVideo;Player;
Keywords=bilibili;video;player;
4️⃣ 控制文件编写
创建DEBIAN/control文件,定义软件包元数据:
Section: video
Priority: optional
Maintainer: Your Name <your.email@example.com>
Version: 1.5.2-1
Homepage: https://xfangfang.github.io/wiliwili/
Package: wiliwili
Architecture: amd64
Depends: libass9, libdbus-1-3, libx11-6, libv4l-0, libpulse0, libuchardet0, libwebp6, libssl1.1
Description: 专为手柄控制设计的第三方B站客户端
A modern Bilibili client optimized for game controllers,
supporting multiple platforms including PC and game consoles.
5️⃣ 软件包构建
dpkg-deb --build wiliwili-deb
成功构建后将生成wiliwili-deb.deb文件,可通过以下命令安装:
sudo dpkg -i wiliwili-deb.deb
🔧 问题诊断矩阵:常见错误及解决方案
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 构建失败:缺少MPV库 | 未安装libmpv-dev | sudo apt install libmpv-dev |
| 图标不显示 | 图标路径错误 | 确认安装到/usr/share/icons/hicolor对应尺寸目录 |
| 依赖缺失错误 | 控制文件依赖项不完整 | 使用dpkg-shlibdeps -O build/wiliwili自动生成依赖 |
| 软件包架构不匹配 | 编译架构与控制文件不符 | 检查Architecture字段与实际编译架构一致 |
| 桌面快捷方式无效 | 桌面文件路径错误 | 确认.desktop文件安装到/usr/share/applications |
💡 提示:使用dpkg-deb --info wiliwili-deb.deb可检查软件包元数据,dpkg -c wiliwili-deb.deb可查看包内文件结构。
🌐 跨架构适配:多平台支持策略
amd64平台优化
# 添加amd64特定优化
cmake .. -DPLATFORM_DESKTOP=ON -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-m64 -mtune=generic -O2"
armhf平台适配
# 安装armhf交叉编译工具链
sudo apt install -y g++-arm-linux-gnueabihf
# 交叉编译配置
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/arm-linux-gnueabihf.cmake \
-DPLATFORM_DESKTOP=ON -DCMAKE_BUILD_TYPE=Release
架构检测脚本
# 自动检测架构并设置相应参数
ARCH=$(dpkg --print-architecture)
if [ "$ARCH" = "amd64" ]; then
CMAKE_ARCH_FLAGS="-m64 -mtune=generic"
elif [ "$ARCH" = "armhf" ]; then
CMAKE_ARCH_FLAGS="-mfloat-abi=hard -mfpu=neon"
fi
🚀 扩展应用:自动化打包与分发
GitHub Actions配置示例
创建.github/workflows/deb-package.yml:
name: Build Debian Package
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y build-essential cmake dpkg-dev libass-dev libssl-dev
- name: Build application
run: |
mkdir build && cd build
cmake .. -DPLATFORM_DESKTOP=ON -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
- name: Prepare package
run: |
bash scripts/linux/gen_icons.sh
mkdir -p wiliwili-deb/usr/bin
cp build/wiliwili wiliwili-deb/usr/bin/
# 复制其他资源文件...
- name: Build deb package
run: dpkg-deb --build wiliwili-deb
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: wiliwili-deb
path: wiliwili-deb.deb
打包后目录结构对比
打包前源码结构:
wiliwili/
├── cmake/ # 构建配置
├── docs/ # 文档资源
├── library/ # 依赖库
├── scripts/ # 辅助脚本
│ ├── linux/ # Linux相关脚本
│ └── deb/ # Debian打包模板
└── wiliwili/ # 源代码
├── include/ # 头文件
└── source/ # 实现代码
打包后文件结构:
wiliwili-deb.deb/
├── DEBIAN/ # 包元数据
└── usr/
├── bin/
│ └── wiliwili # 可执行文件
├── share/
│ ├── applications/
│ │ └── cn.xfangfang.wiliwili.desktop
│ └── icons/ # 多尺寸图标
通过以上流程,我们完成了从源码到可安装Debian软件包的完整转换。这种打包方式不仅适用于wiliwili项目,也可作为其他跨平台开源项目的Linux分发方案参考。合理利用自动化工具和标准化流程,能显著提升开源项目的分发效率和用户体验。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust098- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
热门内容推荐
最新内容推荐
项目优选
收起
暂无描述
Dockerfile
701
4.51 K
Ascend Extension for PyTorch
Python
564
693
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
542
98
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
957
954
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
411
338
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.6 K
939
Oohos_react_native
React Native鸿蒙化仓库
C++
340
387
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
128
209
昇腾LLM分布式训练框架
Python
150
177
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
140
221