All checks were successful
🛡️ Shell Script Linting / 🛡️ Shell Script Linting (push) Successful in 1m9s
Signed-off-by: Marc S. Weidner <msw@coresecret.dev>
73 lines
2.3 KiB
Bash
73 lines
2.3 KiB
Bash
#!/bin/sh
|
|
# SPDX-Version: 3.0
|
|
# SPDX-CreationInfo: 2025-06-17; WEIDNER, Marc S.; <msw@coresecret.dev>
|
|
# SPDX-ExternalRef: GIT https://git.coresecret.dev/msw/CISS.debian.installer.git
|
|
# SPDX-FileContributor: WEIDNER, Marc S.; Centurion Intelligence Consulting Agency
|
|
# SPDX-FileCopyrightText: 2024-2025; WEIDNER, Marc S.; <msw@coresecret.dev>
|
|
# SPDX-FileType: SOURCE
|
|
# SPDX-License-Identifier: EUPL-1.2 OR LicenseRef-CCLA-1.0
|
|
# SPDX-LicenseComment: This file is part of the CISS.debian.installer.secure framework.
|
|
# SPDX-PackageName: CISS.debian.installer
|
|
# SPDX-Security-Contact: security@coresecret.eu
|
|
# SPDX-Comment: Enforce merged-/usr symlinks inside the initramfs image.
|
|
|
|
set -e
|
|
|
|
PREREQ=""
|
|
prereqs() { echo "${PREREQ}"; }
|
|
case "${1}" in
|
|
prereqs) prereqs; exit 0 ;;
|
|
esac
|
|
|
|
. /usr/share/initramfs-tools/hook-functions
|
|
|
|
### Ensure target directories exist in the future initramfs root.
|
|
mkdir -p "${DESTDIR}/usr/bin" "${DESTDIR}/usr/sbin" "${DESTDIR}/usr/lib"
|
|
|
|
### /lib64 may or may not exist depending on arch; create if present on the host system.
|
|
# shellcheck disable=2292
|
|
[ -d "${DESTDIR}/usr/lib64" ] || mkdir -p "${DESTDIR}/usr/lib64" 2>/dev/null || true
|
|
|
|
# shellcheck disable=2292
|
|
move_dir_into_usr() {
|
|
### $1: top-level name (bin|sbin|lib|lib64)
|
|
### Moves all contents of /$1 into /usr/$1 and removes /$1 if it was a directory.
|
|
### Then creates a symlink /$1 -> usr/$1
|
|
d="$1"
|
|
top="${DESTDIR}/${d}"
|
|
usr="${DESTDIR}/usr/${d}"
|
|
|
|
if [ -L "${top}" ]; then
|
|
### Already a symlink, so nothing to do.
|
|
return 0
|
|
fi
|
|
|
|
if [ -d "${top}" ]; then
|
|
### Copy including dotfiles; -a preserves perms/links if available (coreutils on build host).
|
|
### If 'cp -a' is unavailable, fallback to 'cp -rp'.
|
|
if cp -a "${top}/." "${usr}/" 2>/dev/null; then
|
|
:
|
|
else
|
|
cp -rp "${top}/." "${usr}/"
|
|
fi
|
|
### Remove the original directory tree, then replace with symlink
|
|
rm -rf "${top}"
|
|
fi
|
|
|
|
### Create (or refresh) the canonical symlink
|
|
ln -sfn "usr/${d}" "${top}"
|
|
|
|
return 0
|
|
}
|
|
|
|
move_dir_into_usr bin
|
|
move_dir_into_usr sbin
|
|
move_dir_into_usr lib
|
|
### /lib64 exists only on some arch images; harmless if empty
|
|
# shellcheck disable=2292
|
|
[ -d "${DESTDIR}/usr/lib64" ] && move_dir_into_usr lib64
|
|
|
|
printf "\e[92mSuccessfully executed: [/etc/initramfs-tools/hooks/9999-custom-usrmerge.sh] \n\e[0m"
|
|
|
|
# vim: number et ts=2 sw=2 sts=2 ai tw=128 ft=sh
|