Bug#1063142: tiny-initramfs: Fails to boot with compressed modules

2024-02-05 Thread Victor Westerhuis
Source: tiny-initramfs
Followup-For: Bug #1063142
Control: tags -1 patch

-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

The attached patch works for both linux-image-6.5.0-5-amd64 (uncompressed
kernel modules) and linux-image-6.6.13-amd64 (xz-compressed kernel
modules).

There are other compressors possible for kernel modules (gzip and zstd),
but I targeted this fix as much as possible.

- --
Vriendelijke groet, Kind regards,

Victor Westerhuis

- -- System Information:
Debian Release: trixie/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (100, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 6.6.13-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_NL.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_GB:en_US:en:nl_NL:nl
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

- -- no debconf information

-BEGIN PGP SIGNATURE-

iQJHBAEBCAAxFiEE6OxII3T+o0Ujs6ECQz2Rq5dHQPsFAmXAwcETHHZpY3RvckB3
ZXN0ZXJodS5pcwAKCRBDPZGrl0dA+xJUD/9RtYxcePghLf2n9ZGA+V/zPRanexXj
9PflsIPJ8+fWDd5JfHBzVPWAUabEZotggzSkppGKegOLWKGTMqQishsFX39MmbrA
Ht/O7wusUmpLBXu2tp8mfAEFvAxnKAzUzoIKi9PZKAurRyk1imzrNxieQBCfotgd
WsKumqHaXOpVFQuRZfxunK9D3t/HRZwG99aMtSo5DemZASnh4BT4H66XkQaG0wwb
Nb60o5Gdy6KMs/IJMLA2I9lo/uVHHPMeOoOu3M33uB0D5q9bDDqshnAzxflBCazw
P864wswsYipt+npn7resBR76O5i7MhR+UryO7rJpKbt3FCf9dtQSn9707256wX6o
5eoFQfybzyoiX22uUbUabie7a/lIPQhBoGDjhnmxw/5HJ/Uqiws7WsqBQhvL2uDA
bFAFi5/HYMTh7yj01PNNa6F0Ep0SzG35ywiXT5VSFuWLd/FzYNaJLYxv+0ZkBMID
LIMIp89qCQ1SqDKS194BkDC680u00lPgC2jLHTtMODEiBJH8kf9ZYzcQCSj01Agx
ajhm+dR5ckmKb+PBXZzIqjpc7b1+CR+gmjhwrQPq+AFV73tTjtpKOMhOYtEfuffD
AM92tO2t/A523iPxpGUPjpQcjTJqc3ylBwnMjtyzXjvWu32cLyE9Ue6e9Gt4/v6L
FYag/VjpodGFnw==
=M4yi
-END PGP SIGNATURE-
diff -Nru tiny-initramfs-0.1/debian/changelog 
tiny-initramfs-0.1/debian/changelog
--- tiny-initramfs-0.1/debian/changelog 2017-09-12 17:49:40.0 +0200
+++ tiny-initramfs-0.1/debian/changelog 2024-02-05 11:33:39.0 +0100
@@ -1,3 +1,10 @@
+tiny-initramfs (0.1-5.1) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Decompress kernel modules included in initramfs. (Closes: #1063142)
+
+ -- Victor Westerhuis   Mon, 05 Feb 2024 11:33:39 +0100
+
 tiny-initramfs (0.1-5) unstable; urgency=medium
 
   [ Free Ekanayaka ]
diff -Nru tiny-initramfs-0.1/debian/control tiny-initramfs-0.1/debian/control
--- tiny-initramfs-0.1/debian/control   2017-09-12 17:49:40.0 +0200
+++ tiny-initramfs-0.1/debian/control   2024-02-05 11:32:21.0 +0100
@@ -24,7 +24,7 @@
 Package: tiny-initramfs-core
 Architecture: linux-any
 Multi-Arch: foreign
-Depends: cpio, ${shlibs:Depends}, ${misc:Depends}
+Depends: cpio, xz-utils, ${shlibs:Depends}, ${misc:Depends}
 Built-Using: ${Built-Using}
 Description: Minimalistic initramfs implementation (core tools)
  A very minimalistic initramfs implementation for booting Linux
diff -Nru tiny-initramfs-0.1/debian/extra/functions 
tiny-initramfs-0.1/debian/extra/functions
--- tiny-initramfs-0.1/debian/extra/functions   2017-09-12 17:49:40.0 
+0200
+++ tiny-initramfs-0.1/debian/extra/functions   2024-02-05 11:33:39.0 
+0100
@@ -208,9 +208,18 @@
   fi
   /sbin/modprobe --all --ignore-install --set-version="${VERSION}" --quiet 
--show-depends "$@" | \
 awk '$1 == "insmod" { print; }' | while read dummy_type mod_file 
mod_options ; do
-mod_name=${mod_file##*/}
+mod_name=$(basename "$mod_file" | sed -E 's/(.*\.ko)(\..*)?/\1/')
+mod_compression=$(basename "$mod_file" | sed -E 's/(.*\.ko)(\..*)?/\2/')
 if ! grep -q ^/"${mod_name}" "${initramfs_dir}/modules" ; then
-  cp "${mod_file}" "${initramfs_dir}/${mod_name}"
+  if [ "$mod_compression" = .xz ] ; then
+xzcat "${mod_file}" > "${initramfs_dir}/${mod_name}"
+  elif [ -z "$mod_compression" ] ; then
+cp "${mod_file}" "${initramfs_dir}/${mod_name}"
+  else
+echo "$0: WARNING: unable to determine compression for modules while 
adding modules" >&2
+echo "YOUR SYSTEM MIGHT NOT BOOT WITH THIS INITRAMFS." >&2
+cp "${mod_file}" "${initramfs_dir}/${mod_name}"
+  fi
   printf "%s\n" "/${mod_name}${mod_options:+ $mod_options}" >> 
"${initramfs_dir}/modules"
 fi
   done


Bug#1063142: tiny-initramfs: Fails to boot with compressed modules

2024-02-05 Thread Victor Westerhuis
Source: tiny-initramfs
Severity: grave
Justification: renders package unusable
X-Debbugs-Cc: li...@packages.debian.org

-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Since kernel version 6.6.3-1~exp1 modules are compressed with xz.
Tiny-initramfs does not decompress modules before loading them,
rendering systems that need modules to boot unbootable.

Because the initramfs is compressed anyway, I think the easiest fix
would be for mktirfs to decompress the kernel modules when copying them.

- --
Vriendelijke groet, Kind regards,

Victor Westerhuis

- -- System Information:
Debian Release: trixie/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (100, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 6.6.13-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_NL.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_GB:en_US:en:nl_NL:nl
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

- -- no debconf information

-BEGIN PGP SIGNATURE-

iQJHBAEBCAAxFiEE6OxII3T+o0Ujs6ECQz2Rq5dHQPsFAmXAqigTHHZpY3RvckB3
ZXN0ZXJodS5pcwAKCRBDPZGrl0dA+3PDD/wOD4s89qm3SkLNi2BXPpgxoIikndDn
ZKtE3EGUjyi7VCGG7E+yH6Mgxu4/y5W8Z9T8u8Jl96Vo0vKOlUFgLfkAChHpQRQu
52kFjw5zylF6FLe1nA6hmgvjs1YGCMEGjEp10gsEkVKecMMNJy2hdiY1rT3c6zBw
vAllb2gBkd4Ln4Cz52cUFbPyXmZo7CVu3ImyIX45mQnWVTWcLqrr+L3o9+NgxCwT
MSiYeMv5hecwUXZkCus+87dHV7noCWECrwDhMhjMh9PA+LI9oJMDcC4KLjliBxKM
ZkDvvFZ9+vZsO0jG4H6YMdh3zb1uBloIvzlcUTAiHN76DfpPBhh3hJhGemPVZvPQ
LWA3coi6wtLOAJ5yoOc82558tgg7QehcqbxQuhZxXN4S3oLj4vo4h3egwmAzHokz
UXryrJbCfKcmjvlaApSRKhASmN+MyAJAybaqgOcBIig+MHEVA+Bg8mtKnmWrk2f5
NuNgNZlcH8zV1t7VQrv/jlvnMH0yavMJZzwKLaj2tJvOfjaYp0DFQLseXTYr6ZkU
7nRIcq6wJUmOm1pXxLqT7KVx1Cy0CfP6cM7ZcBiQLdJ3EdLYVTIE24gEHE6ReX83
OdegsE4iRATpKfSIC383hg7ppOjKIiNEDi5ibt1ObhG4RoBfxtQzEH2k+GTXUEte
GomdwPAbyRu/MQ==
=ijNW
-END PGP SIGNATURE-