During system boot, /etc/init.d/tmpfiles.setup uses /lib64/rc/sh/tmpfiles.sh to parse all files in /usr/lib/tmpfiles.d/*.conf, as well as a number of other directories. The problem is that the script reads the files, extracts the command token, and checks it against a list of valid tokens. Unfortunately, the command can have a suffix, an '!' which indicates that the command is only valid during boot. I fixed this via adding an additional case, and checking rc-status to see if the run level is boot, if it is then I strip the !, and proceed with the command processing. Otherwise, it continues. While this fixed the problem, it introduced a bug, in that the commands that were failing, one in systemd-nologin.conf creates the file /run/nologin. Unfortunately, since I don't run systemd as I prefer openRC, there is no service that removes /run/nologin when the system can allow logins. Normally this is done by a systemd service. Reproducible: Always Steps to Reproduce: 1. Boot system Actual Results: On screen and in rc.log the following text is displayed: tmpfiles: ignoring invalid entry on line 11 of `/usr/lib/tmpfiles.d//systemd-nologin.conf' tmpfiles: ignoring invalid entry on line 18 of `/usr/lib/tmpfiles.d//x11.conf' Expected Results: No errors from tmpfiles.sh parsing system *.conf files Code change for tmpfiles.sh *** /tmp/r1 2014-05-01 18:02:14.000000000 -0400 --- /tmp/r2 2014-05-01 18:02:24.000000000 -0400 *************** for FILE in $tmpfiles_d ; do *** 295,300 **** --- 295,308 ---- # whine about invalid entries case $cmd in f|F|w|d|D|p|L|c|b|x|X|r|R|z|Z) ;; + f!|F!|w!|d!|D!|p!|L!|c!|b!|x!|X!|r!|R!|z!|Z!) + rcstate=$(rc-status -r); + if [ "$rcstate" = "boot" ]; then + cmd=${cmd:0:1}; + else + continue; + fi + ;; \#) continue ;; *) warninvalid ; continue ;; esac This, of course, doesn't address the secondary issue of handling cleanup of the /run/nologon file which the bug masks
This is actually already available in git and will be included in openrc-0.13. See commit 686ee62.