From cf5e0afe89ff2ee7c22eec5a212713593398cb1f Mon Sep 17 00:00:00 2001 From: Sohan Kunkerkar Date: Thu, 21 Apr 2022 11:52:40 -0400 Subject: [PATCH] internal/*: remove enablement symlinks for a unit before disabling We need to delete any enablement symlinks for a unit before sending it to a preset directive. This will help to disable that unit completely. This is a short-term solution until the upstream systemd PR (https://github.com/systemd/systemd/pull/15205) gets accepted. Fixes https://github.com/coreos/fedora-coreos-tracker/issues/392 --- internal/distro/distro.go | 2 ++ internal/exec/util/unit.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/internal/distro/distro.go b/internal/distro/distro.go index 4096b04af1..359c47080e 100644 --- a/internal/distro/distro.go +++ b/internal/distro/distro.go @@ -44,6 +44,7 @@ var ( userdelCmd = "userdel" setfilesCmd = "setfiles" wipefsCmd = "wipefs" + systemctl = "systemctl" // Filesystem tools btrfsMkfsCmd = "mkfs.btrfs" @@ -96,6 +97,7 @@ func UseraddCmd() string { return useraddCmd } func UserdelCmd() string { return userdelCmd } func SetfilesCmd() string { return setfilesCmd } func WipefsCmd() string { return wipefsCmd } +func SystemCtl() string { return systemctl } func BtrfsMkfsCmd() string { return btrfsMkfsCmd } func Ext4MkfsCmd() string { return ext4MkfsCmd } diff --git a/internal/exec/util/unit.go b/internal/exec/util/unit.go index 01321cfa86..f9e6b616dd 100644 --- a/internal/exec/util/unit.go +++ b/internal/exec/util/unit.go @@ -18,10 +18,12 @@ import ( "fmt" "net/url" "os" + "os/exec" "path/filepath" "syscall" "github.com/coreos/ignition/v2/config/v3_4_experimental/types" + "github.com/coreos/ignition/v2/internal/distro" "github.com/vincent-petithory/dataurl" ) @@ -151,6 +153,22 @@ func (ut Util) EnableUnit(enabledUnit string) error { } func (ut Util) DisableUnit(disabledUnit string) error { + // We need to delete any enablement symlinks for a unit before sending it to a + // preset directive. This will help to disable that unit completely. + // For more information: https://github.com/coreos/fedora-coreos-tracker/issues/392 + // This is a short-term solution until the upstream systemd PR + // (https://github.com/systemd/systemd/pull/15205) gets accepted. + if err := ut.Logger.LogOp( + func() error { + if _, err := exec.Command(distro.SystemCtl(), "--root=/sysroot", "disable", disabledUnit).CombinedOutput(); err != nil { + return fmt.Errorf("cannot remove symlink(s) for: %s : %v", disabledUnit, err) + } + return nil + }, + "removing enablement symlink(s) for: %q", disabledUnit, + ); err != nil { + return err + } return ut.appendLineToPreset(fmt.Sprintf("disable %s", disabledUnit)) }