diff --git a/set-sysconf b/set-sysconf new file mode 100644 index 0000000..a27e800 --- /dev/null +++ b/set-sysconf @@ -0,0 +1,39 @@ +#!/usr/bin/perl +use strict; +use warnings; +use IO::File; +use IO::Pipe; +use Sys::Syslog qw(:standard); +use feature 'switch'; + +my ($filename, $fh, %conf); + +$filename = '/boot/firmware/sysconf.txt'; +exit 0 unless -f $filename; + +openlog('sysconf', 'ndelay', 'LOG_DAEMON'); +syslog('info', 'Applying the system configuration settings in /boot/firmware'); +END { closelog(); } + +$fh = IO::File->new($filename, 'r'); +while (my $line = $fh->readline) { + my ($key, $value); + # Allow for comments, and properly ignore them + $line =~ s/#.+//; + if ( ($key, $value) = ($line =~ m/^\s*([^=]+)\s*=\s*(.*)\s*$/)) { + $key = lc($key); + if (exists($conf{$key})) { + syslog('warn', "Repeated configuration key: $key. Overwriting with new value ($value)"); + } + $conf{$key} = $value; + } +} + +if (my $pass = $conf{root_pw}) { + my $pipe = IO::Pipe->new(); + $pipe->writer('/bin/passwd root'); + print $pipe $pass; + print $pipe $pass; +} + + diff --git a/set-sysconf.service b/set-sysconf.service new file mode 100644 index 0000000..4854ed9 --- /dev/null +++ b/set-sysconf.service @@ -0,0 +1,9 @@ +[Unit] +Description=Set up system configuration + +[Service] +Type=oneshot +ExecStart=/usr/sbin/set-sysconf + +[Install] +RequiredBy=basic.target