From 1079256789a302f64321bc7b5a9823131add75f0 Mon Sep 17 00:00:00 2001 From: David Carley Date: Thu, 8 Sep 2022 02:27:57 +0000 Subject: [PATCH] Finished the prep-sd-image script - Full scrub of .config/ - Inject the virtual keyboard extension - Auto-expand the filesystem on first boot - A more robust e2fsck routine - Run "sync" at key points in the script - Shrink the root filesystem as much as possible - Don't fail if the input image file is already as small as possible. --- installer/config/xinitrc | 3 +- installer/linux-packages/virtualKeyboard.zip | Bin 0 -> 80502 bytes scripts/prep-sd-image.js | 215 ++++++++++++++----- 3 files changed, 163 insertions(+), 55 deletions(-) create mode 100644 installer/linux-packages/virtualKeyboard.zip diff --git a/installer/config/xinitrc b/installer/config/xinitrc index b93833e..13d1691 100644 --- a/installer/config/xinitrc +++ b/installer/config/xinitrc @@ -15,8 +15,7 @@ while true; do xrdb /home/pi/.Xresources # Start browser - /usr/local/bin/browser --no-first-run --disable-infobars \ - --noerrdialogs --disable-3d-apis http://localhost/ + /usr/local/bin/browser --no-first-run --disable-infobars --noerrdialogs --disable-3d-apis http://localhost/ fi sleep 1 diff --git a/installer/linux-packages/virtualKeyboard.zip b/installer/linux-packages/virtualKeyboard.zip new file mode 100644 index 0000000000000000000000000000000000000000..beed383b1aa785e5f9bfd01c22d61f8bf10ecb3a GIT binary patch literal 80502 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 parseInt(col) || col); + .slice(-2) + .map(line => line + .trim() + .split(/\s+/) + .map(col => parseInt(col) || col) + ) + .map(columns => ({ + number: columns[0], + start: columns[1], + end: columns[2], + size: columns[3], + type: columns[4], + filesystem: columns[5], + flags: columns[6] + })); return { initialImageSize, - rootPartition: { - number, - start, - end, - size, - type, - filesystem, - flags - } + bootPartition, + rootPartition }; }); - -/* -currentsize="$(echo "$tune2fs_output" | grep '^Block count:' | tr -d ' ' | cut -d ':' -f 2)" -blocksize="$(echo "$tune2fs_output" | grep '^Block size:' | tr -d ' ' | cut -d ':' -f 2)" -partnewsize=$(($currentsize * $blocksize)) -newpartend=$(($partstart + $partnewsize)) - -*/ } function checkAndRepair(loopback) { return doStep("Checking the filesystem...", () => { - runCommand(`e2fsck -yf ${loopback}`, { - stdio: "inherit" + let success = true; + + runCommand(`e2fsck -pf "${loopback}"`, { + stdio: "inherit", + onError: error => { + success = error.status < 4; + if (error.status >= 4) { + info(`First e2fsck returned '${error.status}'.`); + } + } }); + + if (!success) { + info("Trying harder to fix the image"); + runCommand(`e2fsck -y "${loopback}"`, { + stdio: "inherit", + onError: error => { + success = error.status < 4; + if (error.status >= 4) { + info(`Second e2fsck returned '${error.status}'.`); + } + } + }); + } + + if (!success) { + info("The filesystem must be pretty damaged. Trying again with the alternate superblock."); + runCommand(`e2fsck -yf -b 32768 "${loopback}"`, { + stdio: "inherit", + onError: error => { + if (error.status >= 4) { + logErrorAndExit(`The final e2fsck attempt returned '${error.status}'. Giving up.`, error); + } + } + }); + } + + runCommand("sync"); }); } @@ -265,12 +288,11 @@ function prepareFilesystem(loopback) { const mountpoint = runCommand("mktemp -d"); const finallyHandler = () => { - info("Sleeping for 10 seconds, to allow the filesystem to flush"); - runCommand("sleep 10"); - info("Unmounting the filesystem"); runCommand(`umount "${mountpoint}"`); rmdirSync(mountpoint); + + runCommand("sync"); }; const unregister = registerSignalHandler(finallyHandler); @@ -278,7 +300,7 @@ function prepareFilesystem(loopback) { doStep("Removing unnecessary files from the filesystem...", () => { runCommand(`mount ${loopback} ${mountpoint}`); - scrub(mountpoint, SYSTEM_FILES); + scrubFiles(mountpoint, SYSTEM_FILES); scrubUserFiles(mountpoint, "/root"); scrubUserFiles(mountpoint, "/home/bbmc"); scrubUserFiles(mountpoint, "/home/pi"); @@ -297,7 +319,15 @@ function prepareFilesystem(loopback) { variant_defaults.woodworker_x35 ), null, 4) ); + + const virtualKeyboardZip = resolve(`${__dirname}/../installer/linux-packages/virtualKeyboard.zip`); + const userPiHome = resolve(`${mountpoint}/home/pi`); + runCommand(`unzip "${virtualKeyboardZip}" -d "${userPiHome}"`); + + runCommand(`chown -R 1000:1000 ${userPiHome}/.config`); }); + + runCommand("sync"); } finally { finallyHandler(); unregister(); @@ -306,12 +336,24 @@ function prepareFilesystem(loopback) { function shrinkFilesystem(loopback) { return doStep(`Shrinking the root filesystem`, () => { - runCommand(`resize2fs -p "${loopback}" -M`, { - stdio: "inherit", - onError: error => { - logErrorAndExit("Error while resizing", error); - } - }); + // We run the shrink step multiple times, because + // each time, resize2fs can shrink it a little more, + // until eventually it can't. + // + // TODO: Switch to using pipes to both display the output and capture it + // We can then look at the output to determine when to stop, rather than + // using a fixed count for loop. + // See: https://stackoverflow.com/questions/22337446/how-to-wait-for-a-child-process-to-finish-in-node-js + for (let i = 0; i < 5; ++i) { + runCommand(`resize2fs -p "${loopback}" -M`, { + stdio: "inherit", + onError: error => { + logErrorAndExit("Error while resizing", error); + } + }); + + runCommand("sync"); + } }); } @@ -333,6 +375,8 @@ function shrinkPartition(target, loopback, meta) { runCommand(`parted -s "${target}" unit B mkpart "${meta.rootPartition.type}" "${meta.rootPartition.start}" "${newEnd}"`, { onError: error => logErrorAndExit("parted failed while recreating the root partition", error) }); + + runCommand("sync"); }); } @@ -342,29 +386,88 @@ function zerofree(loopback) { runCommand(`zerofree -v "${loopback}"`, { stdio: "inherit" }); + + runCommand("sync"); }); } function truncateImage(target, meta) { return doStep(`Shrinking the image`, () => { - const partedOutput = runCommand(`parted -s "${target}" unit B print free`, { + const partedOutput = runCommand(`parted -sm "${target}" unit B print free`, { onError: error => logErrorAndExit("parted failed while shrinking the image", error) }); - const [ startOfFreeSpace ] = partedOutput + // The output of the parted command above will look something like this: + // + // BYT; + // image.img:31914983424B:file:512:512:msdos::; + // 1:16384B:1048575B:1032192B:free; + // 1:1048576B:135266303B:134217728B:fat32::boot; + // 2:135266304B:2002096639B:1866830336B:ext4::; + // 1:2002096640B:31914983423B:29912886784B:free; + // + // The format is: + // "number":"begin":"end":"size":"filesystem-type":"partition-name":"flags-set"; + // + // We're interested in the last line only, to determine + // the start of the free space in the image, after the partitions + + const [ , startOfFreeSpace, , , type ] = partedOutput .split("\n") .at(-1) - .trim() - .split(/\s+/) + .replace(/^([^;]+);.*$/, "$1") + .split(":") .map(col => parseInt(col) || col); + if (type !== "free") { + info("There is no free space after the root partition, skipping image shrinking."); + return; + } + runCommand(`truncate -s "${startOfFreeSpace}" "${target}"`); + runCommand("sync"); const { size: newSize } = statSync(target); info(`Shrunk ${target} from ${meta.initialImageSize} to ${newSize}`); }); } +function configureAutoExpand(target, meta) { + const mountpoint = runCommand("mktemp -d"); + + return doStep("Configuring the root partition to autoexpand on first boot...", () => { + const loopback = runCommand(`losetup -f --show -o "${meta.bootPartition.start}" "${target}"`); + + const finallyHandler = () => { + info("Unmounting the filesystem"); + + runCommand("sync"); + + runCommand(`umount "${mountpoint}"`); + runCommand(`losetup -d ${loopback}`); + rmdirSync(mountpoint); + + runCommand("sync"); + }; + const unregister = registerSignalHandler(finallyHandler); + + try { + runCommand(`mount ${loopback} ${mountpoint}`); + + let cmdline = readFileSync(`${mountpoint}/cmdline.txt`, { encoding: "utf8" }); + if (cmdline.match(/init_resize/)) { + logErrorAndExit("init_resize is already in /boot/cmdline.txt"); + } + + cmdline = `${cmdline.trim()} init=/usr/lib/raspi-config/init_resize.sh`; + writeFileSync(`${mountpoint}/cmdline.txt`, cmdline, { encoding: "utf8" }); + } finally { + finallyHandler(); + unregister(); + } + }); +} + function compress(target, meta) { return doStep(`Compressing the image`, () => { runCommand(`xz -k9veT0 ${target}`, { @@ -378,7 +481,7 @@ function compress(target, meta) { }); } -function scrub(mountpoint, patterns) { +function scrubFiles(mountpoint, patterns) { for (const _pattern of patterns) { const { pattern, ignore } = (typeof _pattern === "string") ? { pattern: _pattern } @@ -402,7 +505,7 @@ function scrub(mountpoint, patterns) { } function scrubUserFiles(mountpoint, homedir) { - scrub(mountpoint, USER_FILES.map(item => { + scrubFiles(mountpoint, USER_FILES.map(item => { if (typeof item === "string") { return `${homedir}/${item}`; } @@ -478,11 +581,17 @@ function logErrorAndExit(msg, error) { ); if (error) { - console.error("Error:", { + console.error("Error:", JSON.stringify({ name: error.name, code: error.code, + status: error.status, + signal: error.signal, + error: error.error, + pid: error.pid, + output: error.output, + msg: error.msg, message: error.message - }); + }, null, 4)); } exit(1);