包管理
本文最后更新于:2025年4月17日 晚上
包管理
apt dpkg yum rpm brew
debian
安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
1
2
3
4
5
6
7
8
9
10
11#安装需要的软件
sudo apt install xdg-user-dirs-gtk
#临时转换系统语言为英文,重启后会自动恢复原值的
export LANG=en_US
#执行转换命令,弹出的窗口中会询问是否将目录转化为英文路径,同意并关闭
xdg-user-dirs-gtk-update
#转换回系统语言为中文,也可以不执行下面的命令,直接重启也一样的
export LANG=zh_CN
iso
deb仓库源
GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
-
1
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
-
USTC Mirror Help—USTC Mirror Help文档
debian10 中科大源:
1
2
3
4
5
6
7
8
9
10
11deb 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
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 的目录中,并且保留其中的目录结构:
1 |
|
具体来说,它会将 lshw_02.18.85-0.1_arm64.deb 文件中的所有内容解压到 lshw 目录中,包括 DEBIAN 目录(其中包含软件包的控制信息)以及其他可能的目录和文件。解压后的目录结构将与原始 .deb 文件中的结构完全相同。
依赖
apt_pkg
- ubuntu No module named 'apt_pkg' - 简书 (jianshu.com)
- Ubuntu Error: No module named 'apt_pkg' 怎么办? -  ̄□ ̄ - 博客园 (cnblogs.com)
deb打包
-
1
2
3dh_make --createorig -sy
dpkg-source -b .
sudo pbuilder --build --logfile log.txt --basetgz /var/cache/pbuilder/base.tgz --allow-untrusted --hookdir /var/cache/pbuilder/hooks --debbuildopts -sa --use-network yes --aptcache "" --buildresult . *.dsc
rules
已有debian目录的源码打包为deb
以 plymouth 为例,先下载plymouth源码:
1 |
|
进入 plymouth 源码目录:
1 |
|
打包:
1 |
|
这是一个用于构建 Debian 软件包的命令,具体参数含义如下:
- -b:构建软件包。
- -nc:不清理(不执行 clean 操作),即不删除之前的构建临时文件。
- -uc:不对软件包的源代码进行签名。
- -us:不对软件包的修改进行签名。
- -j16:并行编译的线程数,这里是指定使用 16 个线程来加速编译过程。
综合起来,该命令的作用是使用当前目录下的源代码构建 Debian 软件包,不清理之前的构建临时文件,不对软件包进行签名,并且使用 16 个线程并行编译以加快构建过程。
二进制软件包打包为deb
desktop 文件
apt 代理
-
1
2
3
4
5sudo -s
cat << EOF > /etc/apt/apt.conf.d/proxy.conf
Acquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";
EOF
GPG error
构建iso镜像
centos
Centos 8 使用 yum 报错 Error: Cannot prepare internal mirrorlist: No URLs in mirrorlist
CentOS Linux 8 - AppStream 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs
使用 yum 查询特定二进制文件所属的软件包:
1
yum provides /usr/bin/mysqldump
almalinux
openeuler
network
ssh
命令补全
-
1
2yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
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解包
1 |
|
解压 vmlinux-4.19.0-amd64-desktop.bz2 文件,并生成一个解压后的文件 vmlinux-4.19.0-amd64-desktop:
1 |
|
x86下交叉编译arm
Installing on Debian based distributions such as Ubuntu:
1 |
|
Installing on Red Hat / Fedora / Amazon Linux:
1 |
|
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
3wget 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
2sudo 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
17cd 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 |
|
以下是保留原表所有内容并增加 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=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 符号表 - 代码行号映射 - 变量/函数类型信息 |
工具依赖 | kgdb 、systemtap (需运行时交互) |
crash 、gdb 、perf (仅需符号文件) |
性能影响 | 高(20%-50% 性能下降) | 无运行时影响,仅增加磁盘空间占用(约 1-2GB) |
输出示例 | BUG: scheduling while atomic (运行时触发) |
crash> bt
显示完整的函数名和源码行号(事后分析) |
生产环境适用性 | ❌ 禁用 | ⚠️ 按需(通常不安装,仅在调试时临时使用) |
实际调试场景选择
1. 主动调试内核代码(需修改逻辑)
1 |
|
2. 分析崩溃转储(事后调试)
1 |
|
3. 内存错误检测
1 |
|
此表明确区分了两类调试选项的适用场景,可根据需求精准选择工具包,避免生产环境误用调试内核。
5. 安装自定义内核
(1)安装 RPM 包
1 |
|
(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 |
|
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 内核维基。