包管理

本文最后更新于:2025年4月17日 晚上

包管理

apt dpkg yum rpm brew

debian

iso

deb仓库源

Debian 搜索软件包

sources.list

固件源
ubuntu mainline

dpkg

apt

卸载

升级

查找

apt-file

解压

将名为 lshw_02.18.85-0.1_arm64.deb 的 .deb 文件解压到名为 lshw 的目录中,并且保留其中的目录结构:

1
dpkg-deb -R lshw_02.18.85-0.1_arm64.deb lshw

具体来说,它会将 lshw_02.18.85-0.1_arm64.deb 文件中的所有内容解压到 lshw 目录中,包括 DEBIAN 目录(其中包含软件包的控制信息)以及其他可能的目录和文件。解压后的目录结构将与原始 .deb 文件中的结构完全相同。

依赖

apt_pkg

deb打包

rules

已有debian目录的源码打包为deb

以 plymouth 为例,先下载plymouth源码:

1
apt source plymouth

进入 plymouth 源码目录:

1
cd plymouth-0.9.4.2

打包:

1
dpkg-buildpackage -b -nc -uc -us -j16

这是一个用于构建 Debian 软件包的命令,具体参数含义如下:

  • -b:构建软件包。
  • -nc:不清理(不执行 clean 操作),即不删除之前的构建临时文件。
  • -uc:不对软件包的源代码进行签名。
  • -us:不对软件包的修改进行签名。
  • -j16:并行编译的线程数,这里是指定使用 16 个线程来加速编译过程。

综合起来,该命令的作用是使用当前目录下的源代码构建 Debian 软件包,不清理之前的构建临时文件,不对软件包进行签名,并且使用 16 个线程并行编译以加快构建过程。

二进制软件包打包为deb

desktop 文件

apt 代理

GPG error

构建iso镜像

centos

almalinux

openeuler

network

ssh

命令补全

rpm仓库源

rpm打包

内核包

内核rpm解包
1
2
mkdir kernel
rrpm2cpio kernel-4.19.0_amd64_desktop-7.ctl2.x86_64.rpm | (cd kernel && cpio -idmv)

解压 vmlinux-4.19.0-amd64-desktop.bz2 文件,并生成一个解压后的文件 vmlinux-4.19.0-amd64-desktop:

1
bunzip2 vmlinux-4.19.0-amd64-desktop.bz2

x86下交叉编译arm

Installing on Debian based distributions such as Ubuntu:

1
sudo apt install gcc-arm-none-eabi gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu -y

Installing on Red Hat / Fedora / Amazon Linux:

1
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 源码包(包括内核):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看可用内核版本列表(例如 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 定制版本):

1
2
3
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 系统需安装编译工具和内核依赖:

1
2
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):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 切到 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 源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 环境中构建内核,避免污染主机:

1
2
3
4
5
6
7
8
9
10
11
# 安装 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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=yCONFIG_DEBUG_INFO=y 对比列的完整表格,同时保持原场景细化风格:


内核 RPM 包使用场景细化表(含编译选项对比)

包名 具体使用场景 额外开启的编译选项 DEBUG_KERNEL vs DEBUG_INFO 区别 典型命令/操作 生产影响
kernel 生产服务器默认运行 sudo dnf install kernel ✅ 安全
kernel-debug 单步调试内核代码(如修改 ext4 逻辑) CONFIG_DEBUG_KERNEL=y
CONFIG_KGDB=y
DEBUG_KERNEL: 启用运行时调试能力(如死锁检测)
DEBUG_INFO: 不参与运行时行为
gdb vmlinux
add-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=y
CONFIG_KASAN=y
CONFIG_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=y
CONFIG_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=y
CONFIG_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 vmcore
perf record -g -a sleep 10
⚠️ 磁盘占用增加 1GB
kernel-debug-debuginfo 追踪 rcu_sched 锁竞争 CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_RCU=y
DEBUG_KERNEL: 激活 RCU 检查
DEBUG_INFO: 提供代码上下文
watchdog -t
echo 1 > /proc/sys/kernel/softlockup_panic
❌ 性能下降 25%

关键选项对比说明

特性 CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_INFO=y
作用 启用内核运行时调试功能(检测代码逻辑错误) 生成离线分析所需的调试符号(不改变运行时行为)
启用内容 - 死锁检测(CONFIG_PROVE_LOCKING
- 内存检测(KASAN
- 原子操作检查
- DWARF 符号表
- 代码行号映射
- 变量/函数类型信息
工具依赖 kgdbsystemtap(需运行时交互) crashgdbperf(仅需符号文件)
性能影响 高(20%-50% 性能下降) 无运行时影响,仅增加磁盘空间占用(约 1-2GB)
输出示例 BUG: scheduling while atomic(运行时触发) crash> bt 显示完整的函数名和源码行号(事后分析)
生产环境适用性 ❌ 禁用 ⚠️ 按需(通常不安装,仅在调试时临时使用)

实际调试场景选择

1. 主动调试内核代码(需修改逻辑)
1
2
3
4
5
6
7
8
# 必须安装
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. 分析崩溃转储(事后调试)
1
2
3
4
5
6
# 仅需 debuginfo
sudo dnf install kernel-debuginfo-$(uname -r)

# 使用 crash 工具
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcore
crash> bt # 查看带符号的调用栈
3. 内存错误检测
1
2
3
4
5
# 需 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 包

1
sudo dnf install ~/rpmbuild/RPMS/x86_64/kernel-5.10.23-200.fc33.x86_64.rpm

(2)手动安装

若通过 make install 编译:

1
2
3
4
# 更新引导加载程序(GRUB)
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grub2-set-default 0
sudo reboot


6. 验证与调试

1
2
3
4
5
# 检查内核版本
uname -r

# 查看启动日志
journalctl -k -b

7. 注意事项

  1. 版本兼容性
    • 旧内核可能缺少对新硬件的支持,建议在虚拟机或兼容硬件上测试。
  2. 签名问题
    • 自定义内核需禁用 Secure Boot 或自行签名(参考 Fedora 签名文档)。
  3. 官方支持
    • 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 的任何历史内核版本。如需进一步优化(如打补丁或裁剪模块),可修改 .configkernel.spec 文件。遇到问题可查阅 Fedora 内核维基

macos


包管理
https://realwujing.github.io/linux/distro/package/包管理/
作者
Wu Jing
发布于
2025年3月28日
许可协议