mirror of
https://github.com/BigfootACA/arch-image-builder.git
synced 2024-11-15 01:03:25 +08:00
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from builder.lib import utils
|
|
from builder.build import filesystem
|
|
from builder.lib.context import ArchBuilderContext
|
|
|
|
|
|
def systemctl(ctx: ArchBuilderContext, args: list[str]):
|
|
"""
|
|
Call systemctl in rootfs
|
|
"""
|
|
path = ctx.get_rootfs()
|
|
full_args = ["systemctl"]
|
|
if utils.have_external("systemctl"):
|
|
# use host systemctl possible
|
|
full_args.append(f"--root={path}")
|
|
full_args.extend(args)
|
|
ret = ctx.run_external(full_args)
|
|
else:
|
|
# if host systemd is unavailable, use chroot run
|
|
full_args.extend(args)
|
|
ret = filesystem.chroot_run(ctx, full_args)
|
|
if ret != 0: raise OSError(
|
|
"systemctl %s failed: %d",
|
|
" ".join(args), ret
|
|
)
|
|
|
|
|
|
def enable(ctx: ArchBuilderContext, units: list[str]):
|
|
"""
|
|
Enable systemd units
|
|
"""
|
|
if len(units) <= 0: return
|
|
args = ["enable", "--"]
|
|
args.extend(units)
|
|
systemctl(ctx, args)
|
|
|
|
|
|
def disable(ctx: ArchBuilderContext, units: list[str]):
|
|
"""
|
|
Disable systemd units
|
|
"""
|
|
if len(units) <= 0: return
|
|
args = ["disable", "--"]
|
|
args.extend(units)
|
|
systemctl(ctx, args)
|
|
|
|
|
|
def set_default(ctx: ArchBuilderContext, unit: str):
|
|
"""
|
|
Set default boot target for systemd
|
|
"""
|
|
if not unit: return
|
|
systemctl(ctx, ["set-default", "--", unit])
|