3
0
Fork 0
forked from mirrors/nixpkgs

nixos/stage-2-init: Clean up legacy commands

We can perform most of the mkdir/ln/rm using systemd-tmpfiles
instead which cleans up the script.

/bin and /home are created by their activation script snippets

usbfs is deprecated and unused.

hwclock seems to be automatically executed by systemd on startup.

The mkswap to prevent hibernation cycles seems to be executed by systemd
as well since the provided regression tests succeeds.
This commit is contained in:
Janne Heß 2022-03-24 21:00:37 +01:00
parent bd87ad0cd0
commit 452102db8f
No known key found for this signature in database
GPG key ID: 69165158F05265DF
3 changed files with 23 additions and 52 deletions

View file

@ -12,10 +12,6 @@ for o in $(</proc/cmdline); do
# Show each command. # Show each command.
set -x set -x
;; ;;
resume=*)
set -- $(IFS==; echo $o)
resumeDevice=$2
;;
esac esac
done done
@ -72,46 +68,12 @@ if [ -n "@readOnlyStore@" ]; then
fi fi
# Provide a /etc/mtab.
install -m 0755 -d /etc
test -e /etc/fstab || touch /etc/fstab # to shut up mount
rm -f /etc/mtab* # not that we care about stale locks
ln -s /proc/mounts /etc/mtab
# More special file systems, initialise required directories.
[ -e /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb # UML doesn't have USB by default
install -m 01777 -d /tmp
install -m 0755 -d /var/{log,lib,db} /nix/var /etc/nixos/ \
/run/lock /home /bin # for the /bin/sh symlink
# Miscellaneous boot time cleanup.
rm -rf /var/run /var/lock
rm -f /etc/{group,passwd,shadow}.lock
# Also get rid of temporary GC roots.
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots
# For backwards compatibility, symlink /var/run to /run, and /var/lock
# to /run/lock.
ln -s /run /var/run
ln -s /run/lock /var/lock
# Clear the resume device.
if test -n "$resumeDevice"; then
mkswap "$resumeDevice" || echo 'Failed to clear saved image.'
fi
# Use /etc/resolv.conf supplied by systemd-nspawn, if applicable. # Use /etc/resolv.conf supplied by systemd-nspawn, if applicable.
if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then if [ -n "@useHostResolvConf@" ] && [ -e /etc/resolv.conf ]; then
resolvconf -m 1000 -a host </etc/resolv.conf resolvconf -m 1000 -a host </etc/resolv.conf
fi fi
# Log the script output to /dev/kmsg or /run/log/stage-2-init.log. # Log the script output to /dev/kmsg or /run/log/stage-2-init.log.
# Only at this point are all the necessary prerequisites ready for these commands. # Only at this point are all the necessary prerequisites ready for these commands.
exec {logOutFd}>&1 {logErrFd}>&2 exec {logOutFd}>&1 {logErrFd}>&2
@ -133,22 +95,9 @@ echo "running activation script..."
$systemConfig/activate $systemConfig/activate
# Restore the system time from the hardware clock. We do this after
# running the activation script to be sure that /etc/localtime points
# at the current time zone.
if [ -e /dev/rtc ]; then
hwclock --hctosys
fi
# Record the boot configuration. # Record the boot configuration.
ln -sfn "$systemConfig" /run/booted-system ln -sfn "$systemConfig" /run/booted-system
# Prevent the booted system from being garbage-collected. If it weren't
# a gcroot, if we were running a different kernel, switched system,
# and garbage collected all, we could not load kernel modules anymore.
ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system
# Run any user-specified commands. # Run any user-specified commands.
@shell@ @postBootCommands@ @shell@ @postBootCommands@

View file

@ -100,5 +100,22 @@ in
''; '';
}) })
]; ];
systemd.tmpfiles.rules = [
"d /etc/nixos 0755 root root - -"
"d /nix/var 0755 root root - -"
"L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
"d /run/lock 0755 root root - -"
"d /var/db 0755 root root - -"
"L /etc/mtab - - - - ../proc/mounts"
"L /var/lock - - - - ../run/lock"
# Boot-time cleanup
"R! /etc/group.lock - - - - -"
"R! /etc/passwd.lock - - - - -"
"R! /etc/shadow.lock - - - - -"
"R! /etc/mtab* - - - - -"
"R! /nix/var/nix/gcroots/tmp - - - - -"
"R! /nix/var/nix/temproots - - - - -"
];
}; };
} }

View file

@ -117,6 +117,11 @@ in makeTest {
resume = create_named_machine("resume") resume = create_named_machine("resume")
resume.start() resume.start()
resume.succeed("grep 'not persisted to disk' /run/test/suspended") resume.succeed("grep 'not persisted to disk' /run/test/suspended")
# Ensure we don't restore from hibernation when booting again
resume.crash()
resume.wait_for_unit("default.target")
resume.fail("grep 'not persisted to disk' /run/test/suspended")
''; '';
} }