bee_layer_classify only ever tracked regular files and symlinks (`find ... -type f -o -type l`), so any directory that is empty at build time — like /var/log/nvidia-dcgm, correctly created and chowned by the datacenter-gpu-manager postinst — was silently dropped from every layer's rsync --files-from list and never reached the built ISO. This is why bbc6fb1's78d1b9bfollow-up (seeding a marker file just for that one path) kept the directory alive: it was a targeted workaround for a general gap in the classifier, not a fix of it. Replace that workaround with the general mechanism: classify also walks every directory, computes the subset that is empty all the way down (no file or symlink anywhere in its subtree — a directory that does hold files needs no entry, rsync already recreates it as an implied parent), and assigns each one to a layer via the same dpkg-ownership / injected-rule precedence used for files. Add an injected rule routing /var/log/nvidia-dcgm to 20-nvidia-platform, alongside the DCGM binaries that actually use it, instead of letting it fall through to base by default. bee_layer_build folds each layer's empty-dir list into the same rsync --files-from call; recursion into a directory that is by-construction empty copies nothing extra. Revert the 9000/9999 hook changes from78d1b9bnow that they're redundant, and cover the new path with test-squashfs-layers.sh (ruled, unruled, and nested-empty directories, asserted present in the merged rootfs after a real mksquashfs/unsquashfs round-trip). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
33 lines
2.0 KiB
Bash
Executable File
33 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# 9999-slim.hook.chroot — strip non-essential files to reduce squashfs size.
|
|
set -e
|
|
|
|
# ── Man pages and documentation ───────────────────────────────────────────────
|
|
find /usr/share/man -mindepth 1 -delete 2>/dev/null || true
|
|
find /usr/share/doc -mindepth 1 ! -name 'copyright' -delete 2>/dev/null || true
|
|
find /usr/share/info -mindepth 1 -delete 2>/dev/null || true
|
|
find /usr/share/groff -mindepth 1 -delete 2>/dev/null || true
|
|
find /usr/share/lintian -mindepth 1 -delete 2>/dev/null || true
|
|
|
|
# ── Locales — keep only C and en_US ──────────────────────────────────────────
|
|
find /usr/share/locale -mindepth 1 -maxdepth 1 \
|
|
! -name 'en' ! -name 'en_US' ! -name 'locale.alias' \
|
|
-exec rm -rf {} + 2>/dev/null || true
|
|
find /usr/share/i18n/locales -mindepth 1 \
|
|
! -name 'en_US' ! -name 'i18n' ! -name 'iso14651_t1' ! -name 'iso14651_t1_common' \
|
|
-delete 2>/dev/null || true
|
|
|
|
# ── Python cache ──────────────────────────────────────────────────────────────
|
|
find /usr /opt -name '__pycache__' -type d -exec rm -rf {} + 2>/dev/null || true
|
|
find /usr /opt -name '*.pyc' -delete 2>/dev/null || true
|
|
|
|
# ── APT cache and lists ───────────────────────────────────────────────────────
|
|
apt-get clean
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# ── Misc ──────────────────────────────────────────────────────────────────────
|
|
rm -rf /tmp/* /var/tmp/* 2>/dev/null || true
|
|
find /var/log -type f -delete 2>/dev/null || true
|
|
|
|
echo "=== slim: done ==="
|