On Tue, Mar 23, 2021 at 04:20:18PM +0100, Michael Biebl wrote: > Am 23.03.21 um 15:32 schrieb Marcin Szewczyk: > > Package: init-system-helpers > > Version: 1.56+nmu1 > > Severity: normal > > > > I use debhelper to install and enable systemd user units. I noticed that > > after changing the `WantedBy` value from default.target to > > graphical.target the new symlink was not created. > > This happens rarely enough, that adding explicit support for that in i-s-h > is probably not worth the complications. > That said, if someone can come up with a clean patch to do that, I'm happy > to take a look.
I attach a patch (against debian/1.60). It differs from the one in #797108. Maybe it goes in an acceptable direction. Please take a look if you have some time. Pardon my Perl. I have not used it for 15 years. >From the commit message: > take changes in references to units into account > > - react to changes eg. in WantedBy > - enable: add symlinks to added units > - update-state: remove state files of no longer managed links (garbage > collection) -- Marcin Szewczyk http://wodny.org
>From bfb0aecc46009cca72f5a3c1b0ca3fb2a2280048 Mon Sep 17 00:00:00 2001 From: Marcin Szewczyk <[email protected]> Date: Wed, 24 Mar 2021 13:35:22 +0100 Subject: [PATCH] take changes in references to units into account - react to changes eg. in WantedBy - enable: add symlinks to added units - update-state: remove state files of no longer managed links (garbage collection) --- script/deb-systemd-helper | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/script/deb-systemd-helper b/script/deb-systemd-helper index 7e929ed..e626380 100755 --- a/script/deb-systemd-helper +++ b/script/deb-systemd-helper @@ -250,6 +250,11 @@ sub no_link_installed { my ($scriptname, $service_path) = @_; my @links = get_link_closure($scriptname, $service_path); + # Previous package version might have managed additional links. + # Take them into account to determine if the service was previously enabled. + my $dsh_state = dsh_state_path($scriptname); + my @dsh_links = map { { src => $_ } } state_file_entries($dsh_state); + push(@links, @dsh_links); my @existing_links = grep { -l $_->{src} } @links; return (@existing_links == 0); @@ -329,6 +334,7 @@ sub update_state { my $dsh_state = dsh_state_path($scriptname); my @links = get_link_closure($scriptname, $service_path); + my @dsh_links = state_file_entries($dsh_state); debug "Old state file contents: " . Data::Dumper::Dumper([ state_file_entries($dsh_state) ]); @@ -344,6 +350,14 @@ sub update_state { } close($outfh); + # Remove state files of previously managed links if they are no longer managed. + my %links = map { $_->{src} => 1 } @links; + for my $dsh_link (@dsh_links) { + my $statefile = $dsh_link; + $statefile =~ s,^/etc/systemd/$instance/,$enabled_state_dir/,; + unlink($statefile) unless exists($links{$dsh_link}); + } + debug "Renaming temp file $tmpname to state file $dsh_state"; rename($tmpname, $dsh_state) or error("Unable to move $tmpname to $dsh_state"); -- 2.25.0
