diff options
-rw-r--r-- | perl-install/NEWS | 3 | ||||
-rw-r--r-- | perl-install/install/NEWS | 4 | ||||
-rw-r--r-- | perl-install/services.pm | 11 |
3 files changed, 14 insertions, 4 deletions
diff --git a/perl-install/NEWS b/perl-install/NEWS index 2f8650349..b25dbfd93 100644 --- a/perl-install/NEWS +++ b/perl-install/NEWS @@ -1,3 +1,6 @@ +- services: + o use --no-block with chkconfig and systemctl enable to prevent systemd reload + and potential crash (especially during first/live boot) - harddrake: o fix detecting some wireless devices as scanners (mga#9895) o fix random order of fields with perl-5.18 diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS index 8956b2d8e..b38f65857 100644 --- a/perl-install/install/NEWS +++ b/perl-install/install/NEWS @@ -1,3 +1,7 @@ +- services: + o use --no-block with chkconfig and systemctl enable to prevent systemd reload + and potential crash (especially during first/live boot) + Version 16.21 - 13 January 2014 - partitioning: diff --git a/perl-install/services.pm b/perl-install/services.pm index 7805f0141..7d90acc2d 100644 --- a/perl-install/services.pm +++ b/perl-install/services.pm @@ -284,8 +284,11 @@ sub _set_service { my @xinetd_services = map { $_->[0] } xinetd_services(); + # General Note: We use --no-reload here as this code is sometimes triggered + # from code at boot and reloading systemd during boot is generally a bit + # racy just now it seems. if (member($service, @xinetd_services)) { - run_program::rooted($::prefix, "chkconfig", $enable ? "--add" : "--del", $service); + run_program::rooted($::prefix, "chkconfig", "--no-reload", $enable ? "--add" : "--del", $service); # Probably still a bug here as xinet support in chkconfig shells out to /sbin/service.... } elsif (running_systemd() || has_systemd()) { # systemctl rejects any symlinked units. You have to enabled the real file if (-l "/lib/systemd/system/$service.service") { @@ -293,13 +296,13 @@ sub _set_service { } else { $service = $service . ".service"; } - run_program::rooted($::prefix, "/bin/systemctl", $enable ? "enable" : "disable", $service); + run_program::rooted($::prefix, "/bin/systemctl", $enable ? "enable" : "disable", "--no-reload", $service); } else { my $script = "/etc/rc.d/init.d/$service"; - run_program::rooted($::prefix, "chkconfig", $enable ? "--add" : "--del", $service); + run_program::rooted($::prefix, "chkconfig", "--no-reload", $enable ? "--add" : "--del", $service); #- FIXME: handle services with no chkconfig line and with no Default-Start levels in LSB header if ($enable && cat_("$::prefix$script") =~ /^#\s+chkconfig:\s+-/m) { - run_program::rooted($::prefix, "chkconfig", "--level", "35", $service, "on"); + run_program::rooted($::prefix, "chkconfig", "--no-reload", "--level", "35", $service, "on"); } } } |