Skip to content

Commit c5a5b1e

Browse files
authored
Merge pull request #26 from netbootxyz/fix/unmkinitramfs-single-layer-detection
fix: detect single-layer initrds in unmkinitramfs path
2 parents 4c19302 + 14c9144 commit c5a5b1e

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

root/build.sh

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,26 @@ if [[ "${EXTRACT_INITRD}" == "true" ]];then
100100
mkdir -p initrd_extracted
101101
if unmkinitramfs ${INITRD_NAME} initrd_extracted/ 2>/dev/null; then
102102
mkdir -p initrd_files
103-
# Merge all layers (early, early2, main, etc.) preserving drivers and modules
104-
for layer in initrd_extracted/*/; do
105-
if [ -d "$layer" ]; then
103+
# unmkinitramfs has two output shapes:
104+
# - multi-layer initrd: extracts to early/, early2/, ..., main/
105+
# - single-layer initrd: extracts the cpio contents directly into the target,
106+
# so top-level entries are filesystem roots like bin/, etc/, sbin/.
107+
# Detect by presence of main/, which is unmkinitramfs's signal for multi-layer mode.
108+
if [ -d initrd_extracted/main ]; then
109+
# Multi-layer: merge ordered layers, preserving microcode + drivers + main fs
110+
for layer in initrd_extracted/early*/ initrd_extracted/main/; do
111+
[ -d "$layer" ] || continue
106112
echo "Merging layer: $(basename $layer)"
107113
rsync -a "$layer" initrd_files/
108-
fi
109-
done
114+
done
115+
echo "Successfully extracted multi-layer initrd"
116+
else
117+
# Single-layer: extracted contents are already the initrd root
118+
echo "Single-layer initrd, copying extracted contents"
119+
rsync -a initrd_extracted/ initrd_files/
120+
echo "Successfully extracted single-layer initrd"
121+
fi
110122
rm -rf initrd_extracted
111-
echo "Successfully extracted multi-layer initrd"
112123
else
113124
echo "unmkinitramfs failed, falling back to manual extraction"
114125
EXTRACT_MANUALLY=true

0 commit comments

Comments
 (0)