This functions are working as follows:
- Send a SIGTERM to all processes that may be finished
- Send a SIGKILL to all processes that still live and may be finished
- Try to unmount all mount points
- Try to remount read-only all mount points that can't be umounted
- Umount all swap devices
- Umount and detach all loopback devices
- Call [poweroff|halt|reboot|kexec]
TODO:
- Umount device-mapper.
- Make log work. So far it is being useless as we do not parse
/etc/systemd/system.conf, kernel command line but just
environment, however we're executed by init and thus have no
useful variables. Forcing it to target=kmsg/console and
level=debug also does not produce any output, however writing to
/dev/console does work (hack used during debug).
This functions will:
- umount all mount points that aren't API
- remount read-only all mount points that can't be umounted
- umount all swap devices.
- detach all loopback devices
TODO:
- umount dms
Mountpoints are being read from /proc/self/mountinfo.
Swaps are being read from /proc/swaps.
Loop devices from /sys/class/block/loop*.
Arch uses the same paths and default font of gentoo. Previously,
systemd-vconsole-setup was failing with the following message:
systemd-vconsole-setup[59]: /bin/setfont failed with error code 1.
The current behavior of the /proc/self/mountinfo parser
is to stop the parser on parse failures
I'm only changing this behavior to try the next line and adding
a warning if occurs a fail.
Reduce number of exported symbols with -fvisibility=hidden by default,
this is safe as we're not generating and loadable library and our
binaries should have no exported symbol other than main(). This alone
reduces around 4kb per binary.
It will also request GCC to emit every function and data variable in
its own section, then request the linker to remove unused
sections. This reduces the size of utility tools
(/lib/systemd/systemd-*) by half or even more (in my system some
binaries went from 84kb to 32kb).