01
依赖冲突的本质
什么是包依赖、依赖树的概念、冲突产生的根本原因(版本不兼容、循环依赖、传递依赖冲突)
概念依赖树
02
rootfs中的包管理机制
apt/dpkg、rpm/yum、opkg等包管理工具的工作原理,以及它们在rootfs中的角色
aptrpmopkg
03
依赖冲突的典型场景
多版本库共存、ABI不兼容、符号冲突、库文件覆盖
ABI符号冲突
04
静态分析与动态分析
使用ldd、readelf、objdump等工具诊断依赖问题
lddreadelfobjdump
05
容器化技术隔离依赖
使用Docker/Containerd隔离依赖环境
DockerContainerd
06
符号链接与soname机制
使用符号链接与soname管理共享库版本
soname符号链接
07
chroot与pivot_root隔离
使用chroot与pivot_root构建隔离的rootfs环境
chrootpivot_root
08
overlayfs与union mount
使用overlayfs与union mount实现文件系统层叠与覆盖
overlayfsunion
09
Nix/GNU Stow声明式管理
使用Nix/GNU Stow等工具实现声明式包管理与依赖隔离
NixStow
10
静态编译与musl libc
使用静态编译与musl libc消除动态链接依赖
musl静态编译
11
LD_PRELOAD运行时干预
使用LD_PRELOAD与LD_LIBRARY_PATH运行时干预
LD_PRELOAD环境变量
12
patchelf与chrpath
使用patchelf与chrpath修改ELF文件的rpath与interpreter
patchelfrpath
13
实战:嵌入式libc冲突
嵌入式Linux系统中libc版本冲突的排查与修复
嵌入式libc
14
Yocto/OpenEmbedded策略
Yocto/OpenEmbedded构建系统中依赖冲突的解决策略
YoctoOpenEmbedded
15
Buildroot版本锁定
Buildroot构建系统中包版本锁定与冲突避免
Buildroot锁定
16
Debian/Ubuntu依赖地狱
Debian/Ubuntu系统中apt-get install时的依赖地狱处理
apt依赖地狱
17
Alpine musl/glibc兼容
Alpine Linux中musl与glibc兼容性问题的处理
Alpinemusl
18
ROS依赖冲突管理
ROS(机器人操作系统)中多个package的依赖冲突管理
ROS机器人
19
预防策略:语义化版本与lockfile
语义化版本控制、依赖锁定文件(lockfile)、CI/CD中的依赖检查
semverlockfile
20
工具链与交叉编译冲突
sysroot管理、多架构库共存
交叉编译sysroot
21
ldconfig与搜索路径
使用ldconfig与/etc/ld.so.conf配置动态链接器搜索路径
ldconfigld.so.conf
22
strace/ltrace追踪库加载
使用strace与ltrace追踪程序运行时的库加载行为
straceltrace
23
valgrind/massif内存检测
使用valgrind与massif检测内存相关的依赖问题
valgrindmassif
24
dpkg-deb/rpm2cpio解包
使用dpkg-deb与rpm2cpio手动解包与检查包内容
dpkg-debrpm2cpio
25
apt-mark/yum-versionlock
使用apt-mark与yum-versionlock锁定包版本
apt-markversionlock
26
equivs/checkinstall虚拟包
使用equivs与checkinstall创建虚拟包与自定义包
equivscheckinstall
27
fakeroot/fakechroot模拟
使用fakeroot与fakechroot模拟root环境进行依赖测试
fakerootfakechroot
28
systemd-nspawn/bubblewrap
使用systemd-nspawn与bubblewrap创建轻量级容器环境
systemd-nspawnbubblewrap
29
Flatpak/Snap应用隔离
使用Flatpak与Snap实现应用级依赖隔离
FlatpakSnap
30
总结与最佳实践
构建一个无依赖冲突的rootfs的完整工作流
最佳实践工作流