mirror of
https://github.com/kiviktnm/decman.git
synced 2026-09-19 12:08:28 +00:00
Fix bug with installing pacman packags & systemd user units
This commit is contained in:
@@ -45,7 +45,7 @@ class Commands:
|
||||
"""
|
||||
Running this command installs the given packages from pacman repositories.
|
||||
"""
|
||||
return ["pacman", "-S", "--asexplicit"] + pkgs
|
||||
return ["pacman", "-S", "--needed"] + pkgs
|
||||
|
||||
def install_files(self, pkg_files: list[str]) -> list[str]:
|
||||
"""
|
||||
@@ -97,17 +97,21 @@ class Commands:
|
||||
"""
|
||||
return ["systemctl", "disable", "--quiet"] + units
|
||||
|
||||
def enable_user_units(self, units: list[str]) -> list[str]:
|
||||
def enable_user_units(self, units: list[str], user: str) -> list[str]:
|
||||
"""
|
||||
Running this command enables the given systemd units for the user it's run as.
|
||||
"""
|
||||
return ["systemctl", "enable", "--now", "--quiet", "--user"] + units
|
||||
return [
|
||||
"systemctl", "--quiet", "--user", "-M", f"{user}@", "enable",
|
||||
"--now"
|
||||
] + units
|
||||
|
||||
def disable_user_units(self, units: list[str]) -> list[str]:
|
||||
def disable_user_units(self, units: list[str], user: str) -> list[str]:
|
||||
"""
|
||||
Running this command disables the given systemd units fol the user it's run as.
|
||||
"""
|
||||
return ["systemctl", "disable", "--quiet"] + units
|
||||
return ["systemctl", "--quiet", "--user", "-M", f"{user}@", "disable"
|
||||
] + units
|
||||
|
||||
def compare_versions(self, installed_version: str,
|
||||
new_version: str) -> list[str]:
|
||||
|
||||
@@ -738,6 +738,8 @@ class Pacman:
|
||||
|
||||
try:
|
||||
subprocess.run(conf.commands.install_pkgs(packages), check=True)
|
||||
subprocess.run(conf.commands.set_as_explicitly_installed(packages),
|
||||
check=True)
|
||||
except subprocess.CalledProcessError as error:
|
||||
raise err.UserFacingError(
|
||||
"Failed to install packages using pacman.") from error
|
||||
@@ -849,20 +851,11 @@ class Systemd:
|
||||
if not units:
|
||||
return
|
||||
|
||||
try:
|
||||
uid = pwd.getpwnam(user).pw_uid
|
||||
gid = pwd.getpwnam(user).pw_gid
|
||||
|
||||
with subprocess.Popen(conf.commands.enable_user_units(units),
|
||||
group=gid,
|
||||
user=uid) as process:
|
||||
with subprocess.Popen(conf.commands.enable_user_units(
|
||||
units, user)) as process:
|
||||
if process.wait() != 0:
|
||||
raise err.UserFacingError(
|
||||
f"Failed to enable systemd units: {units} for {user}.")
|
||||
except KeyError as error:
|
||||
raise err.UserFacingError(
|
||||
f"Failed to enable systemd units because user {user} doesn't exist."
|
||||
) from error
|
||||
for unit in units:
|
||||
self.state.add_enabled_user_systemd_unit(user, unit)
|
||||
|
||||
@@ -873,21 +866,10 @@ class Systemd:
|
||||
if not units:
|
||||
return
|
||||
|
||||
try:
|
||||
uid = pwd.getpwnam(user).pw_uid
|
||||
gid = pwd.getpwnam(user).pw_gid
|
||||
|
||||
with subprocess.Popen(conf.commands.disable_user_units(units),
|
||||
group=gid,
|
||||
user=uid) as process:
|
||||
with subprocess.Popen(conf.commands.disable_user_units(
|
||||
units, user)) as process:
|
||||
if process.wait() != 0:
|
||||
raise err.UserFacingError(
|
||||
f"Failed to disable systemd units: {units} for {user}."
|
||||
)
|
||||
except KeyError as error:
|
||||
raise err.UserFacingError(
|
||||
f"Failed to disable systemd units because user {user} doesn't exist."
|
||||
) from error
|
||||
|
||||
f"Failed to disable systemd units: {units} for {user}.")
|
||||
for unit in units:
|
||||
self.state.remove_enabled_user_systemd_unit(user, unit)
|
||||
|
||||
Reference in New Issue
Block a user