From db32faa20ddaefb41850733e89c7a168ab4d15aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Sun, 11 Dec 2022 21:49:53 +0700 Subject: [PATCH 1/2] klibc: for initramfs-tools hooks --- srcpkgs/klibc/files/initramfs-tools-hooks | 36 +++++++++++++++++++++++ srcpkgs/klibc/template | 4 ++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100755 srcpkgs/klibc/files/initramfs-tools-hooks diff --git a/srcpkgs/klibc/files/initramfs-tools-hooks b/srcpkgs/klibc/files/initramfs-tools-hooks new file mode 100755 index 000000000000..26edc714d59b --- /dev/null +++ b/srcpkgs/klibc/files/initramfs-tools-hooks @@ -0,0 +1,36 @@ +#!/bin/sh + +prereqs() +{ + if [ "${BUSYBOX}" = "n" ] || [ ! -f "${BUSYBOX_EXECUTABLE}" ]; then + echo '' + else + # Ensure busybox installs all its commands before + # checking what we should provide + echo zz-busybox + fi +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +for src in /usr/lib/klibc/bin/*; do + command="$(basename "$src")" + case "$command" in + gzip | kinit | zcat) + # Don't install; these will not be needed + ;; + *) + # Don't install commands that already exist in /bin or /sbin + if ! [ -e "${DESTDIR}/sbin/$command" ]; then + cp -pnL "$src" "${DESTDIR}/bin" + fi + ;; + esac +done +cp -pL /lib/klibc-*.so "${DESTDIR}/lib" diff --git a/srcpkgs/klibc/template b/srcpkgs/klibc/template index b5b757d2745b..97e2965ee22b 100644 --- a/srcpkgs/klibc/template +++ b/srcpkgs/klibc/template @@ -1,7 +1,7 @@ # Template file for 'klibc' pkgname=klibc version=2.0.11 -revision=1 +revision=2 hostmakedepends="perl" makedepends="kernel-libc-headers" short_desc="Minimal libc subset for use with initramfs" @@ -105,6 +105,8 @@ do_install() { else vbin klcc/${XBPS_TRIPLET/unknown-/}-klcc fi + vinstall ${FILESDIR}/initramfs-tools-hooks 755 \ + usr/share/initramfs-tools/hooks klibc } klibc-devel_package() { From 5455164b4fccc5fe86e4f3e70abb0eba158619e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 22 Nov 2022 16:09:35 +0700 Subject: [PATCH 2/2] New package: initramfs-tools-0.142 --- .../files/conf-hooks.d/busybox | 1 + srcpkgs/initramfs-tools/files/hooks/udev | 49 +++++++++ .../initramfs-tools/files/hooks/zz-busybox | 37 +++++++ .../files/kernel/kernel-hook-postinst | 10 ++ .../files/kernel/kernel-hook-postrm | 10 ++ .../files/scripts/init-bottom/udev | 28 +++++ .../files/scripts/init-top/udev | 32 ++++++ srcpkgs/initramfs-tools/patches/busybox.patch | 27 +++++ .../initramfs-tools/patches/dpkg-arch.patch | 104 ++++++++++++++++++ srcpkgs/initramfs-tools/patches/hid.patch | 51 +++++++++ srcpkgs/initramfs-tools/template | 79 +++++++++++++ 11 files changed, 428 insertions(+) create mode 100644 srcpkgs/initramfs-tools/files/conf-hooks.d/busybox create mode 100755 srcpkgs/initramfs-tools/files/hooks/udev create mode 100755 srcpkgs/initramfs-tools/files/hooks/zz-busybox create mode 100644 srcpkgs/initramfs-tools/files/kernel/kernel-hook-postinst create mode 100644 srcpkgs/initramfs-tools/files/kernel/kernel-hook-postrm create mode 100755 srcpkgs/initramfs-tools/files/scripts/init-bottom/udev create mode 100755 srcpkgs/initramfs-tools/files/scripts/init-top/udev create mode 100644 srcpkgs/initramfs-tools/patches/busybox.patch create mode 100644 srcpkgs/initramfs-tools/patches/dpkg-arch.patch create mode 100644 srcpkgs/initramfs-tools/patches/hid.patch create mode 100644 srcpkgs/initramfs-tools/template diff --git a/srcpkgs/initramfs-tools/files/conf-hooks.d/busybox b/srcpkgs/initramfs-tools/files/conf-hooks.d/busybox new file mode 100644 index 000000000000..2ec6dd2e9e8e --- /dev/null +++ b/srcpkgs/initramfs-tools/files/conf-hooks.d/busybox @@ -0,0 +1 @@ +BUSYBOX_EXECUTABLE=/bin/busybox.static diff --git a/srcpkgs/initramfs-tools/files/hooks/udev b/srcpkgs/initramfs-tools/files/hooks/udev new file mode 100755 index 000000000000..51a16ef4cf6f --- /dev/null +++ b/srcpkgs/initramfs-tools/files/hooks/udev @@ -0,0 +1,49 @@ +#!/bin/sh -e + +PREREQS="" + +prereqs() { echo "$PREREQS"; } + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +. /usr/share/initramfs-tools/hook-functions + +copy_exec /bin/udevd /bin +copy_exec /bin/udevadm /bin + +mkdir -p "$DESTDIR/lib/systemd" +ln -rs "$DESTDIR/bin/udevd" "$DESTDIR/lib/systemd/systemd-udevd" + +mkdir -p "$DESTDIR/etc/udev" +cp -p /etc/udev/udev.conf "$DESTDIR/etc/udev/" + +mkdir -p "$DESTDIR/lib/udev/rules.d/" +for rules in 50-udev-default.rules \ + 60-block.rules 60-persistent-storage.rules \ + 71-seat.rules 75-net-description.rules \ + 80-net-name-slot.rules 80-drivers.rules; do + if [ -e /etc/udev/rules.d/$rules ]; then + cp -p /etc/udev/rules.d/$rules "$DESTDIR/lib/udev/rules.d/" + elif [ -e /lib/udev/rules.d/$rules ]; then + cp -p /lib/udev/rules.d/$rules "$DESTDIR/lib/udev/rules.d/" + fi +done + +# now copy all custom udev rules which don't have an equivalent in /lib (e. g. +# 70-persistent-net.rules or similar); They might contain network names or +# other bits which are relevant for the initramfs. +for rules in /etc/udev/rules.d/*.rules; do + if [ -e "$rules" ] && [ ! -e "/lib/${rules#/etc/}" ]; then + cp -p "$rules" "$DESTDIR/lib/udev/rules.d/" + fi +done + +for program in ata_id scsi_id; do + copy_exec /lib/udev/$program /lib/udev +done +copy_exec /sbin/blkid /sbin diff --git a/srcpkgs/initramfs-tools/files/hooks/zz-busybox b/srcpkgs/initramfs-tools/files/hooks/zz-busybox new file mode 100755 index 000000000000..d1b3cf21e62b --- /dev/null +++ b/srcpkgs/initramfs-tools/files/hooks/zz-busybox @@ -0,0 +1,37 @@ +#!/bin/sh + +# This hook copies busybox binary into the initramfs directory +# and creates all necessary links to it. +# It should be placed last into the hooks directory, in order to +# not overwrite commands which are provided by other means. + +set -e + +case "${1:-}" in + prereqs) echo ""; exit 0;; +esac + +[ n = "$BUSYBOX" ] && exit 0 + +[ -r /usr/share/initramfs-tools/hook-functions ] || exit 0 +. /usr/share/initramfs-tools/hook-functions + +if [ -f $DESTDIR/bin/sh ] && cmp -s $DESTDIR/bin/sh $BUSYBOX_EXECUTABLE ; then + # initramfs copies busybox into /bin/sh, undo this + rm -f $DESTDIR/bin/sh +fi +rm -f $DESTDIR/bin/busybox # for compatibility with old initramfs +copy_exec $BUSYBOX_EXECUTABLE /bin/busybox + +for alias in $($BUSYBOX_EXECUTABLE --list-long); do + alias="${alias#/}" + case "$alias" in + # strip leading /usr, we don't use it + usr/*) alias="${alias#usr/}" ;; + */*) ;; + *) alias="bin/$alias" ;; # make it into /bin + esac + + [ -e "$DESTDIR/$alias" ] || \ + ln "$DESTDIR/bin/busybox" "$DESTDIR/$alias" +done diff --git a/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postinst b/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postinst new file mode 100644 index 000000000000..8c83bc836768 --- /dev/null +++ b/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postinst @@ -0,0 +1,10 @@ +#!/bin/sh +# +# Kernel post-install hook for initramfs-tools. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +usr/bin/mkinitramfs -o boot/initramfs-${VERSION}.img ${VERSION} diff --git a/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postrm b/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postrm new file mode 100644 index 000000000000..f64f34cc47da --- /dev/null +++ b/srcpkgs/initramfs-tools/files/kernel/kernel-hook-postrm @@ -0,0 +1,10 @@ +#!/bin/sh +# +# Kernel post-install hook for initramfs-tools. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +rm -f boot/initramfs-${VERSION}.img diff --git a/srcpkgs/initramfs-tools/files/scripts/init-bottom/udev b/srcpkgs/initramfs-tools/files/scripts/init-bottom/udev new file mode 100755 index 000000000000..73887eaa091b --- /dev/null +++ b/srcpkgs/initramfs-tools/files/scripts/init-bottom/udev @@ -0,0 +1,28 @@ +#!/bin/sh -e + +PREREQS="" + +prereqs() { echo "$PREREQS"; } + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# Stop udevd, we'll miss a few events while we run init, but we catch up +udevadm control --exit + +# move the /dev tmpfs to the rootfs; fall back to util-linux mount that does +# not understand -o move +mount -n -o move /dev "${rootmnt:?}/dev" || mount -n --move /dev "${rootmnt}/dev" + +# create a temporary symlink to the final /dev for other initramfs scripts +if command -v nuke >/dev/null; then + nuke /dev +else + # shellcheck disable=SC2114 + rm -rf /dev +fi +ln -s "${rootmnt}/dev" /dev diff --git a/srcpkgs/initramfs-tools/files/scripts/init-top/udev b/srcpkgs/initramfs-tools/files/scripts/init-top/udev new file mode 100755 index 000000000000..153a2bf406c2 --- /dev/null +++ b/srcpkgs/initramfs-tools/files/scripts/init-top/udev @@ -0,0 +1,32 @@ +#!/bin/sh -e + +PREREQS="" + +prereqs() { echo "$PREREQS"; } + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +if [ -w /sys/kernel/uevent_helper ]; then + echo > /sys/kernel/uevent_helper +fi + +if [ "${quiet:-n}" = "y" ]; then + log_level=notice +else + log_level=info +fi + +UDEV_LOG=$log_level /lib/systemd/systemd-udevd --daemon --resolve-names=never + +udevadm control --reload || : +udevadm trigger --type=subsystems --action=add +udevadm trigger --type=devices --action=add +udevadm settle || true + +# Leave udev running to process events that come in out-of-band (like USB +# connections) diff --git a/srcpkgs/initramfs-tools/patches/busybox.patch b/srcpkgs/initramfs-tools/patches/busybox.patch new file mode 100644 index 000000000000..d56d2b96e8f5 --- /dev/null +++ b/srcpkgs/initramfs-tools/patches/busybox.patch @@ -0,0 +1,27 @@ +Index: initramfs-tools-0.142/mkinitramfs +=================================================================== +--- initramfs-tools-0.142.orig/mkinitramfs ++++ initramfs-tools-0.142/mkinitramfs +@@ -8,8 +8,10 @@ keep="n" + CONFDIR="/etc/initramfs-tools" + verbose="n" + # Will be updated by busybox's conf hook, if present +-BUSYBOXDIR= ++BUSYBOXDIR=/bin + export BUSYBOXDIR ++BUSYBOX_EXECUTABLE= ++export BUSYBOX_EXECUTABLE + + usage() + { +@@ -129,8 +131,8 @@ for i in /usr/share/initramfs-tools/conf + done + + # Check busybox dependency +-if [ "${BUSYBOX}" = "y" ] && [ -z "${BUSYBOXDIR}" ]; then +- echo >&2 "E: @BUSYBOX_PACKAGES@, version @BUSYBOX_MIN_VERSION@ or later, is required but not installed" ++if [ "${BUSYBOX}" = "y" ] && [ ! -f "${BUSYBOX_EXECUTABLE}" ]; then ++ echo >&2 "E: busybox-static, version 1.34.1 or later, is required but not installed" + exit 1 + fi + diff --git a/srcpkgs/initramfs-tools/patches/dpkg-arch.patch b/srcpkgs/initramfs-tools/patches/dpkg-arch.patch new file mode 100644 index 000000000000..295a8111f947 --- /dev/null +++ b/srcpkgs/initramfs-tools/patches/dpkg-arch.patch @@ -0,0 +1,104 @@ +Index: initramfs-tools-0.142/hooks/thermal +=================================================================== +--- initramfs-tools-0.142.orig/hooks/thermal ++++ initramfs-tools-0.142/hooks/thermal +@@ -19,9 +19,9 @@ esac + + . /usr/share/initramfs-tools/hook-functions + +-case "$DPKG_ARCH" in ++case "$XBPS_ARCH" in + # copy the right modules +-powerpc|ppc64) ++ppc*) + + # Only G5 Mac machines need to load + # windfarm_core or one of the windfarm_pm* modules. +@@ -64,7 +64,7 @@ powerpc|ppc64) + manual_add_modules windfarm_smu_sat + manual_add_modules windfarm_smu_sensors + ;; +-i386|amd64|ia64) ++i686*|x86_64*) + manual_add_modules fan + manual_add_modules thermal + ;; +Index: initramfs-tools-0.142/init +=================================================================== +--- initramfs-tools-0.142.orig/init ++++ initramfs-tools-0.142/init +@@ -46,6 +46,7 @@ mount -t devpts -o noexec,nosuid,gid=5,m + + # Export the dpkg architecture + export DPKG_ARCH= ++export XBPS_ARCH= + . /conf/arch.conf + + # Set modprobe env +@@ -299,6 +300,7 @@ maybe_break init + unset debug + unset MODPROBE_OPTIONS + unset DPKG_ARCH ++unset XBPS_ARCH + unset ROOTFLAGS + unset ROOTFSTYPE + unset ROOTDELAY +Index: initramfs-tools-0.142/initramfs-tools.7 +=================================================================== +--- initramfs-tools-0.142.orig/initramfs-tools.7 ++++ initramfs-tools-0.142/initramfs-tools.7 +@@ -574,8 +574,9 @@ corresponds to the rootdelay, rootflags, + Use of ROOTDELAY is deprecated; you should implement a \fIlocal-block\fR + boot script rather than delaying or polling. + .TP +-\fB\fI DPKG_ARCH +-allows arch specific boot actions. ++\fB\fI DPKG_ARCH, XBPS_ARCH ++allows arch specific boot actions. Void Linux specific hooks should use ++\fBXBPS_ARCH\fR. + .TP + \fB\fI blacklist, panic, quiet, resume, noresume, resume_offset + set according relevant boot option. +Index: initramfs-tools-0.142/mkinitramfs +=================================================================== +--- initramfs-tools-0.142.orig/mkinitramfs ++++ initramfs-tools-0.142/mkinitramfs +@@ -284,7 +284,29 @@ __TMPCPIOGZ="$(mktemp "${TMPDIR:-/var/tm + __TMPMAINCPIO="$(mktemp "${TMPDIR:-/var/tmp}/mkinitramfs-MAIN_XXXXXX")" || exit 1 + __TMPEARLYCPIO="$(mktemp "${TMPDIR:-/var/tmp}/mkinitramfs-FW_XXXXXX")" || exit 1 + +-DPKG_ARCH=$(dpkg --print-architecture) ++XBPS_ARCH=$(xbps-uhelper arch) ++case "$XBPS_ARCH" in ++i686*) ++ DPKG_ARCH=i386 ;; ++x86_64*) ++ DPKG_ARCH=amd64 ;; ++aarch64*) ++ DPKG_ARCH=arm64 ;; ++armv[67]*) ++ DPKG_ARCH=armhf ;; ++arm*) ++ DPKG_ARCH=armel ;; ++ppc64le*) ++ DPKG_ARCH=ppc64el ;; ++ppc64*) ++ DPKG_ARCH=ppc64 ;; ++ppc*) ++ DPKG_ARCH=powerpc ;; ++mipsel*) ++ DPKG_ARCH=mipsel ;; ++mips*) ++ DPKG_ARCH=mips ;; ++esac + + # Export environment for hook scripts. + # +@@ -293,6 +315,7 @@ export version + export CONFDIR + export DESTDIR + export DPKG_ARCH ++export XBPS_ARCH + export verbose + export KEYMAP + export MODULES diff --git a/srcpkgs/initramfs-tools/patches/hid.patch b/srcpkgs/initramfs-tools/patches/hid.patch new file mode 100644 index 000000000000..9cf9cd76e75c --- /dev/null +++ b/srcpkgs/initramfs-tools/patches/hid.patch @@ -0,0 +1,51 @@ +Index: initramfs-tools-0.142/scripts/functions +=================================================================== +--- initramfs-tools-0.142.orig/scripts/functions ++++ initramfs-tools-0.142/scripts/functions +@@ -37,6 +37,22 @@ panic() + { + local console rest IFS + ++ # udev is not yet running, so load keyboard drivers ++ if [ "${quiet}" = "y" ]; then ++ opts="-q" ++ else ++ opts="-v" ++ fi ++ /sbin/modprobe ${opts} -a i8042 atkbd ehci-pci ehci-orion \ ++ ehci-hcd ohci-hcd ohci-pci uhci-hcd usbhid xhci \ ++ xhci-pci xhci-hcd ++ sleep 2 ++ for modalias in /sys/bus/hid/devices/*/modalias; do ++ if [ -f "${modalias}" ]; then ++ /sbin/modprobe ${opts} -b "$(cat "${modalias}")" ++ fi ++ done ++ + if command -v chvt >/dev/null 2>&1; then + chvt 1 + fi +@@ -92,23 +108,6 @@ maybe_break() + { + case ",${break?}," in + *,$1,*) +- if [ "$1" = "top" ]; then +- # udev is not yet running, so load keyboard drivers +- if [ "${quiet}" = "y" ]; then +- opts="-q" +- else +- opts="-v" +- fi +- /sbin/modprobe ${opts} -a i8042 atkbd ehci-pci ehci-orion \ +- ehci-hcd ohci-hcd ohci-pci uhci-hcd usbhid xhci \ +- xhci-pci xhci-hcd +- sleep 2 +- for modalias in /sys/bus/hid/devices/*/modalias; do +- if [ -f "${modalias}" ]; then +- /sbin/modprobe ${opts} -b "$(cat "${modalias}")" +- fi +- done +- fi + panic "Spawning shell within the initramfs" + ;; + esac diff --git a/srcpkgs/initramfs-tools/template b/srcpkgs/initramfs-tools/template new file mode 100644 index 000000000000..e7913460d035 --- /dev/null +++ b/srcpkgs/initramfs-tools/template @@ -0,0 +1,79 @@ +# Template file for 'initramfs-tools' +pkgname=initramfs-tools +version=0.142 +revision=1 +#archs="i686 x86_64" +#wrksrc= +#create_wrksrc=yes +#build_style=gnu-configure +#configure_args="" +#make_build_args="" +#make_install_args="" +#conf_files="" +#make_dirs="/var/log/dir 0755 root root" +#hostmakedepends="" +#makedepends="" +depends="klibc cpio kmod eudev e2fsprogs util-linux coreutils run-parts + ischroot kbd" +short_desc="Generic modular initramfs generator" +maintainer="Đoàn Trần Công Danh " +license="GPL-3.0-or-later" +homepage="https://wiki.debian.org/initramfs-tools" +#changelog="" +distfiles="${DEBIAN_SITE}/main/i/initramfs-tools/initramfs-tools_${version}.tar.xz" +checksum=e566929d02f53efcea7851aa9120bba417c320c60405b84d8774de01765e9882 +make_dirs=" + /etc/initramfs-tools/scripts/init-bottom 0755 root root + /etc/initramfs-tools/scripts/init-premount 0755 root root + /etc/initramfs-tools/scripts/init-top 0755 root root + /etc/initramfs-tools/scripts/local-bottom 0755 root root + /etc/initramfs-tools/scripts/local-premount 0755 root root + /etc/initramfs-tools/scripts/local-top 0755 root root + /etc/initramfs-tools/scripts/nfs-bottom 0755 root root + /etc/initramfs-tools/scripts/nfs-premount 0755 root root + /etc/initramfs-tools/scripts/nfs-top 0755 root root + /etc/initramfs-tools/scripts/panic 0755 root root + /etc/initramfs-tools/hooks 0755 root root + /etc/initramfs-tools/conf.d 0755 root root + /usr/share/initramfs-tools/conf.d 0755 root root + /usr/share/initramfs-tools/conf-hooks.d 0755 root root + /usr/share/initramfs-tools/modules.d 0755 root root +" +alternatives=" + initramfs:/etc/kernel.d/post-install/20-initramfs:/usr/libexec/initramfs-tools/kernel-hook-postinst + initramfs:/etc/kernel.d/post-remove/20-initramfs:/usr/libexec/initramfs-tools/kernel-hook-postrm + " +conf_files=" + /etc/initramfs-tools/modules + /etc/initramfs-tools/initramfs.conf + " + +do_build() { + cp -r ${FILESDIR}/* . + chmod -R a+r scripts hooks docs conf-hooks.d +} + +do_install() { + vbin lsinitramfs + vman lsinitramfs.8 + vbin mkinitramfs + vman mkinitramfs.8 + vbin unmkinitramfs + vman unmkinitramfs.8 + vman initramfs-tools.7 + vman initramfs.conf.5 + vinstall init 755 usr/share/initramfs-tools + vcopy scripts usr/share/initramfs-tools + vinstall conf/initramfs.conf 644 etc/initramfs-tools + vcopy hooks usr/share/initramfs-tools + vcopy conf-hooks.d usr/share/initramfs-tools + vinstall hook-functions 644 usr/share/initramfs-tools + vinstall conf/modules 644 usr/share/initramfs-tools + vinstall conf/modules 644 etc/initramfs-tools + vsconf docs/example_hook + vsconf docs/example_script + vsconf docs/framebuffer + # kernel hooks. + vinstall kernel/kernel-hook-postinst 755 usr/libexec/initramfs-tools + vinstall kernel/kernel-hook-postrm 755 usr/libexec/initramfs-tools +}