Linux包管理工具使用指南¶
apt dpkg yum rpm brew¶
debian¶
iso¶
deb仓库源¶
- GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
-
USTC Mirror Help—USTC Mirror Help文档
debian10 中科大源:
deb https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free deb-src https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free deb https://mirrors.ustc.edu.cn/debian/ buster-updates main contrib non-free deb-src https://mirrors.ustc.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free deb-src https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free deb-src https://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free - netselect-apt 用于选择快速 Debian 镜像的速度测试器
debian9 仓库源¶
deb http://archive.debian.org/debian stretch main contrib non-free
deb http://archive.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://archive.debian.org/debian stretch main contrib non-free
deb-src http://archive.debian.org/debian-security stretch/updates main contrib non-free
debian 调试包¶
Debian 搜索软件包¶
sources.list¶
- /etc/apt/sources.list 和 /etc/apt/sources.list.d
- 修复 Ubuntu 中的 “Key is stored in legacy trusted.gpg keyring” 问题 | Linux 中国
固件源¶
- 软件包:firmware-iwlwifi(20210315-3) [non-free]
- How to Install the Latest AMD Drivers on Debian 10 Buster
ubuntu mainline¶
dpkg¶
apt¶
卸载¶
升级¶
- apt update,apt upgrade和apt dist-upgrade的区别
- sudo apt full-upgrade(也可以用 sudo apt dist-upgrade ,据我所知,它们效果是一样的)
- What is "dist-upgrade" and why does it upgrade more than "upgrade"?
查找¶
apt-file¶
解压¶
将名为 lshw_02.18.85-0.1_arm64.deb 的 .deb 文件解压到名为 lshw 的目录中,并且保留其中的目录结构:
具体来说,它会将 lshw_02.18.85-0.1_arm64.deb 文件中的所有内容解压到 lshw 目录中,包括 DEBIAN 目录(其中包含软件包的控制信息)以及其他可能的目录和文件。解压后的目录结构将与原始 .deb 文件中的结构完全相同。
依赖¶
安装依赖¶
以下是 apt build-dep . 与 mk-build-deps 系列命令的对比总结表格,包括作用、适用场景、依赖来源等维度:
✅ Debian 源码包构建依赖安装命令对比¶
| 命令/操作 | 作用说明 | 依赖来源 | 是否支持自定义 control |
是否生成虚拟包 | 是否推荐用于本地修改源码 |
|---|---|---|---|---|---|
sudo apt-get install devscripts equivs |
安装 dch、mk-build-deps 等打包相关工具 |
apt 软件仓库 | — | — | ✅ 是(工具准备) |
mk-build-deps -i -r |
读取当前目录下 debian/control,构建一个虚拟依赖包并安装其依赖;安装后移除自身 |
control 中列出的依赖项 |
✅ 是 | ✅ 是 | ✅ 强烈推荐 |
mk-build-deps control |
从指定的 control 文件生成 .deb 虚拟依赖包(不安装) |
指定 control 文件 |
✅ 是 | ✅ 是 | ✅ 可用于手动安装 |
apt build-dep . |
从当前源码目录提取包名并安装其官方构建依赖(依赖于 sources.list) |
官方 Debian 源中已有的构建依赖 | ❌ 否 | ❌ 否 | ⚠️ 有局限(不推荐用于自定义) |
✅ 使用建议¶
| 使用场景 | 推荐命令 |
|---|---|
| 官方源代码未修改,快速安装构建依赖 | apt build-dep <pkg> |
本地 .dsc 源码包解压后安装构建依赖 |
apt build-dep . |
本地源码有自定义 debian/control |
mk-build-deps -i -r |
想构建但不立即安装依赖,仅生成 .deb 包 |
mk-build-deps control |
安装 dch、mk-build-deps 工具 |
sudo apt install devscripts equivs |
在构建 QEMU 或内核这类大型项目,并修改了 debian/control 以添加或去除依赖,推荐始终使用 mk-build-deps -i -r 以避免遗漏依赖或版本不匹配问题。
apt_pkg¶
- ubuntu No module named 'apt_pkg' - 简书 (jianshu.com)
- Ubuntu Error: No module named 'apt_pkg' 怎么办? -  ̄□ ̄ - 博客园 (cnblogs.com)
deb打包¶
- 源码打包为deb
- Debian 维护者指南
- deb编包笔记
- deb包制作中control文件说明
- deb包安装/卸载/升级时,preinst, postinst, prerm, postrm的执行顺序
- 干货分享 - Debian包的潜规则(脚本篇)
- pbuilder教程
- pbuilder编译构建工具分析
- pbuilder编译构建工具分析
rules¶
已有debian目录的源码打包为deb¶
以 plymouth 为例,先下载plymouth源码:
进入 plymouth 源码目录:
打包:
这是一个用于构建 Debian 软件包的命令,具体参数含义如下:
- -b:构建软件包。
- -nc:不清理(不执行 clean 操作),即不删除之前的构建临时文件。
- -uc:不对软件包的源代码进行签名。
- -us:不对软件包的修改进行签名。
- -j16:并行编译的线程数,这里是指定使用 16 个线程来加速编译过程。
综合起来,该命令的作用是使用当前目录下的源代码构建 Debian 软件包,不清理之前的构建临时文件,不对软件包进行签名,并且使用 16 个线程并行编译以加快构建过程。
二进制软件包打包为deb¶
desktop 文件¶
apt 代理¶
GPG error¶
- Linux(测试版)刷新软件包列表遇到 GPG 错误的解决方法
- debian更新清华源 GPG 错误:由于没有公钥,无法验证下列签名
- UBUNTU配置APT国内源
- dpkg-deb (子进程):解压缩归档成员:lzma 错误:压缩数据已损坏
构建iso镜像¶
centos¶
- CentOS7 yum源安装EPEL/ELRepo扩展仓库步骤详解
- https://mirrors.tuna.tsinghua.edu.cn/help/epel/
- Welcome to the ELRepo Project
- https://mirrors.tuna.tsinghua.edu.cn/help/elrepo/
- Red Hat Enterprise Linux 发行日期
- CentOS8的DNF软件管理包教程:dnf如何安装/更新/删除软件包和软件包组
- Centos 8 使用 yum 报错 Error: Cannot prepare internal mirrorlist: No URLs in mirrorlist
- CentOS Linux 8 - AppStream 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs
- 如何检查CentOS 版本
-
使用 yum 查询特定二进制文件所属的软件包:
almalinux¶
openeuler¶
network¶
ssh¶
命令补全¶
rpm仓库源¶
- https://pkgs.org/
- CentOS 7搭建本地yum源和局域网yum源
- 记录几个CentOS安装包(rpm)的下载地址-离线安装必备
- 内核源码编译 安装
- https://vault.centos.org/7.6.1810/os/Source/SPackages/
- CentOS上编译安装内核
- CentOS7停服后yum源配置指南
rpm打包¶
内核包¶
内核rpm解包¶
解压 vmlinux-4.19.0-amd64-desktop.bz2 文件,并生成一个解压后的文件 vmlinux-4.19.0-amd64-desktop:
x86下交叉编译arm¶
Installing on Debian based distributions such as Ubuntu:
Installing on Red Hat / Fedora / Amazon Linux:
sudo yum install arm-none-eabi-gcc-cs arm-none-eabi-newlib gcc-aarch64-linux-gnu gcc-arm-linux-gnu -y
fedora¶
在 Fedora 中构建历史版本内核(如旧版稳定内核或自定义版本)需要从源码编译或使用官方工具链。以下是详细步骤:
1. 获取历史内核源码¶
(1)从官方仓库下载¶
Fedora 的 Koji 构建系统存储了所有历史版本的 RPM 源码包(包括内核):
# 查看可用内核版本列表(例如 Fedora 33 的 5.10 内核)
koji list-builds --package=kernel --after="2020-06-01" --before="2021-12-31" | grep kernel-5.10 | grep COMPLETE | grep fc33
kernel-5.10.10-200.fc33 jforbes COMPLETE
kernel-5.10.11-200.fc33 jforbes COMPLETE
kernel-5.10.12-200.fc33 jforbes COMPLETE
kernel-5.10.13-200.fc33 jforbes COMPLETE
kernel-5.10.14-200.fc33 jforbes COMPLETE
kernel-5.10.15-200.fc33 jforbes COMPLETE
kernel-5.10.16-200.fc33 jforbes COMPLETE
kernel-5.10.17-200.fc33 jforbes COMPLETE
kernel-5.10.18-200.fc33 jforbes COMPLETE
kernel-5.10.19-200.fc33 jforbes COMPLETE
kernel-5.10.20-200.fc33 jforbes COMPLETE
kernel-5.10.21-200.fc33 jforbes COMPLETE
kernel-5.10.22-200.fc33 jforbes COMPLETE
kernel-5.10.23-200.fc33 jforbes COMPLETE
kernel-5.10.6-200.fc33 jforbes COMPLETE
kernel-5.10.7-200.fc33 jforbes COMPLETE
kernel-5.10.8-200.fc33 jforbes COMPLETE
kernel-5.10.9-201.fc33 jforbes COMPLETE
# 下载内核源码包(以 kernel-5.10.23-200.fc33 为例)
koji download-build --arch=src kernel-5.10.23-200.fc33.src.rpm
(2)从 kernel.org 获取¶
直接下载上游 Linux 内核源码(适用于非 Fedora 定制版本):
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.xz
tar -xvf linux-5.10.tar.xz
cd linux-5.10
2. 安装构建依赖¶
Fedora 系统需安装编译工具和内核依赖:
sudo dnf install rpm-build make gcc flex bison elfutils-libelf-devel \
openssl-devel ncurses-devel bc rsync git dwarves rpmdevtools
3. 构建内核 RPM 包(官方方法)¶
(1)从 SRPM 重建¶
如果已下载 .src.rpm 文件(如 kernel-5.10.23-200.fc33.src.rpm):
# 切到 root 用户
sudo -s
# 安装源码包
rpm -ivh kernel-*.src.rpm
# 安装依赖
dnf install dnf-utils
yum-builddep /root/rpmbuild/SPECS/kernel.spec
# 进入 RPM 构建目录
cd ~/rpmbuild/SPECS/
# 修改配置(可选)
vim kernel.spec # 调整版本号或补丁
# 构建 RPM 包
rpmbuild -bb --target=$(uname -m) kernel.spec
生成的 RPM 包位于 ~/rpmbuild/RPMS/$(uname -m)/。
(2)手动配置与编译¶
若使用 kernel.org 源码:
cd linux-5.10
# 复制 Fedora 配置(可选)
cp /boot/config-$(uname -r) .config
make olddefconfig # 应用默认配置
# 自定义配置(可选)
make menuconfig # 交互式调整
# 编译内核与模块
make -j$(nproc) bzImage modules
# 安装模块
sudo make modules_install
# 安装内核
sudo make install
4. 使用 Mock 构建(隔离环境)¶
Mock 工具可在干净的 chroot 环境中构建内核,避免污染主机:
# 安装 Mock
sudo dnf install mock
# 创建用户组
sudo usermod -a -G mock $USER
# 初始化环境(以 Fedora 33 为例)
mock -r fedora-33-x86_64 --init
# 构建内核 SRPM
mock -r fedora-33-x86_64 --rebuild kernel-5.10.23-200.fc33.src.rpm
Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/kernel-5.10.23-200.fc33.x86_64
Wrote: /builddir/build/RPMS/kernel-debug-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-modules-internal-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-modules-internal-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-modules-extra-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-modules-extra-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-devel-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-devel-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-modules-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-core-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-core-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-modules-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debuginfo-common-x86_64-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debuginfo-5.10.23-200.fc33.x86_64.rpm
Wrote: /builddir/build/RPMS/kernel-debug-debuginfo-5.10.23-200.fc33.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.c0pgfu
+ umask 022
+ cd /builddir/build/BUILD
+ cd kernel-5.10.fc33
+ /usr/bin/rm -rf /builddir/build/BUILDROOT/kernel-5.10.23-200.fc33.x86_64
+ RPM_EC=0
++ jobs -p
+ exit 0
Finish: rpmbuild kernel-5.10.23-200.fc33.src.rpm
Finish: build phase for kernel-5.10.23-200.fc33.src.rpm
INFO: Done(kernel-5.10.23-200.fc33.src.rpm) Config(fedora-33-x86_64) 31 minutes 23 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-33-x86_64/result
Finish: run
以下是保留原表所有内容并增加 CONFIG_DEBUG_KERNEL=y 与 CONFIG_DEBUG_INFO=y 对比列的完整表格,同时保持原场景细化风格:
内核 RPM 包使用场景细化表(含编译选项对比)¶
| 包名 | 具体使用场景 | 额外开启的编译选项 | DEBUG_KERNEL vs DEBUG_INFO 区别 | 典型命令/操作 | 生产影响 |
|---|---|---|---|---|---|
| kernel | 生产服务器默认运行 | 无 |
无 |
sudo dnf install kernel |
✅ 安全 |
| kernel-debug | 单步调试内核代码(如修改 ext4 逻辑) |
CONFIG_DEBUG_KERNEL=yCONFIG_KGDB=y |
DEBUG_KERNEL: 启用运行时调试能力(如死锁检测) DEBUG_INFO: 不参与运行时行为 |
gdb vmlinuxadd-symbol-file /path/to/module.ko |
❌ 性能下降 30%+ |
| kernel-core | 容器/嵌入式最小化部署 | CONFIG_EMBEDDED=y |
无 |
sudo dnf --installroot=/mnt install kernel-core |
✅ 安全 |
| kernel-debug-core | 调试内存泄漏(如 kmalloc 错误) |
CONFIG_DEBUG_KERNEL=yCONFIG_KASAN=yCONFIG_DEBUG_INFO=y |
DEBUG_KERNEL: 激活内存检测 DEBUG_INFO: 提供泄漏点代码行号 |
echo scan > /sys/kernel/debug/kmemleak |
❌ 内存占用增加 50% |
| kernel-modules | 加载基础硬件驱动(如 Intel 网卡) | 无 |
无 |
modprobe -v e1000 |
✅ 安全 |
| kernel-modules-extra | 支持 Btrfs 透明压缩 | CONFIG_BTRFS_FS=y |
无(与调试选项无关) |
mount -o compress=zstd /dev/sdb1 /mnt |
⚠️ 轻微性能影响 |
| kernel-modules-internal | 测试未上游化的 GPU 驱动 | CONFIG_DEBUG_KERNEL=yCONFIG_STAGING=y |
DEBUG_KERNEL: 启用驱动内调试代码 DEBUG_INFO: 无直接关联 |
cat /proc/slabinfo \| grep -i fragment |
❌ 可能崩溃 |
| kernel-devel | 编译 NVIDIA DKMS 驱动 | 无 |
无(仅头文件) |
make -C /lib/modules/$(uname -r)/build M=$PWD |
✅ 安全 |
| kernel-debug-devel | 调试 mutex 死锁 |
CONFIG_DEBUG_KERNEL=yCONFIG_PROVE_LOCKING=y |
DEBUG_KERNEL: 启用锁依赖追踪 DEBUG_INFO: 仅提供符号 |
echo 10 > /proc/sys/kernel/sched_cfs_bandwidth_us |
❌ 性能下降 20% |
| kernel-debuginfo | 分析 general protection fault oops |
CONFIG_DEBUG_INFO=y |
DEBUG_INFO: 生成符号表 DEBUG_KERNEL: 不启用运行时检测 |
crash vmlinux vmcoreperf record -g -a sleep 10 |
⚠️ 磁盘占用增加 1GB |
| kernel-debug-debuginfo | 追踪 rcu_sched 锁竞争 |
CONFIG_DEBUG_KERNEL=yCONFIG_DEBUG_INFO=yCONFIG_DEBUG_RCU=y |
DEBUG_KERNEL: 激活 RCU 检查 DEBUG_INFO: 提供代码上下文 |
watchdog -techo 1 > /proc/sys/kernel/softlockup_panic |
❌ 性能下降 25% |
关键选项对比说明¶
| 特性 | CONFIG_DEBUG_KERNEL=y | CONFIG_DEBUG_INFO=y |
|---|---|---|
| 作用 | 启用内核运行时调试功能(检测代码逻辑错误) | 生成离线分析所需的调试符号(不改变运行时行为) |
| 启用内容 | - 死锁检测(CONFIG_PROVE_LOCKING)- 内存检测( KASAN)- 原子操作检查 |
- DWARF 符号表 - 代码行号映射 - 变量/函数类型信息 |
| 工具依赖 | kgdb、systemtap(需运行时交互) |
crash、gdb、perf(仅需符号文件) |
| 性能影响 | 高(20%-50% 性能下降) | 无运行时影响,仅增加磁盘空间占用(约 1-2GB) |
| 输出示例 | BUG: scheduling while atomic(运行时触发) |
crash> bt 显示完整的函数名和源码行号(事后分析) |
| 生产环境适用性 | ❌ 禁用 | ⚠️ 按需(通常不安装,仅在调试时临时使用) |
实际调试场景选择¶
1. 主动调试内核代码(需修改逻辑)¶
# 必须安装
sudo dnf install kernel-debug-$(uname -r) kernel-debug-devel-$(uname -r)
# 验证选项
cat /boot/config-`uname -r` | grep -E "DEBUG_KERNEL|KGDB"
# 应输出:
CONFIG_DEBUG_KERNEL=y
CONFIG_KGDB=y
2. 分析崩溃转储(事后调试)¶
# 仅需 debuginfo
sudo dnf install kernel-debuginfo-$(uname -r)
# 使用 crash 工具
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcore
crash> bt # 查看带符号的调用栈
3. 内存错误检测¶
# 需 debug-core + debuginfo
sudo dnf install kernel-debug-core-$(uname -r) kernel-debuginfo-$(uname -r)
# 触发检测
echo 1 > /proc/sys/kernel/panic_on_oops
此表明确区分了两类调试选项的适用场景,可根据需求精准选择工具包,避免生产环境误用调试内核。
5. 安装自定义内核¶
(1)安装 RPM 包¶
(2)手动安装¶
若通过 make install 编译:
6. 验证与调试¶
7. 注意事项¶
- 版本兼容性
• 旧内核可能缺少对新硬件的支持,建议在虚拟机或兼容硬件上测试。 - 签名问题
• 自定义内核需禁用 Secure Boot 或自行签名(参考 Fedora 签名文档)。 - 官方支持
• Fedora 不维护历史内核的安全更新,生产环境慎用。
8. 快速参考命令¶
| 操作 | 命令 |
|---|---|
| 下载内核源码 | koji download-build kernel-<version>.src.rpm |
| 构建 RPM 包 | rpmbuild -bb ~/rpmbuild/SPECS/kernel.spec |
| 手动编译 | make -j$(nproc) && sudo make modules_install install |
| 清理构建 | make clean && rm -rf ~/rpmbuild |
通过以上步骤,你可以灵活构建 Fedora 的任何历史内核版本。如需进一步优化(如打补丁或裁剪模块),可修改 .config 或 kernel.spec 文件。遇到问题可查阅 Fedora 内核维基。