158 lines
5.6 KiB
Python
158 lines
5.6 KiB
Python
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
import libcalamares
|
|
import subprocess
|
|
from shutil import copy2
|
|
from distutils.dir_util import copy_tree
|
|
from os.path import join, exists
|
|
from libcalamares.utils import target_env_call, target_env_process_output
|
|
|
|
def pretty_name():
|
|
return "Misc post-install configurations"
|
|
|
|
status = "Misc post-install configurations"
|
|
|
|
def pretty_status_message():
|
|
return status
|
|
|
|
class ConfigController:
|
|
def __init__(self):
|
|
try:
|
|
self.__root = libcalamares.globalstorage.value("rootMountPoint")
|
|
except Exception as e:
|
|
print(f"Error initializing root mount point: {e}")
|
|
raise
|
|
|
|
@property
|
|
def root(self):
|
|
return self.__root
|
|
|
|
def terminate(self, proc):
|
|
try:
|
|
target_env_call(['killall', '-9', proc])
|
|
except Exception as e:
|
|
print(f"Error terminating process '{proc}': {e}")
|
|
|
|
def copy_file(self, file):
|
|
try:
|
|
if exists("/" + file):
|
|
copy2("/" + file, join(self.root, file))
|
|
except Exception as e:
|
|
print(f"Error copying file '{file}': {e}")
|
|
|
|
def copy_folder(self, source, target):
|
|
try:
|
|
if exists("/" + source):
|
|
copy_tree("/" + source, join(self.root, target))
|
|
except Exception as e:
|
|
print(f"Error copying folder from '{source}' to '{target}': {e}")
|
|
|
|
def is_pkg_installed(self, pkg):
|
|
""" Checks if a package is installed in the target environment. """
|
|
try:
|
|
result = target_env_process_output(['xbps-query', pkg])
|
|
return result is not None # Package exists if query returns any result
|
|
except Exception as e:
|
|
print(f"Error checking if package '{pkg}' is installed: {e}")
|
|
return False
|
|
|
|
def remove_pkg(self, pkg):
|
|
try:
|
|
target_env_process_output(['xbps-remove', '-Ry', pkg])
|
|
except Exception as e:
|
|
print(f"Error removing package '{pkg}': {e}")
|
|
|
|
def umount(self, mp):
|
|
try:
|
|
subprocess.call(["umount", "-l", join(self.root, mp)])
|
|
except Exception as e:
|
|
print(f"Error unmounting '{mp}': {e}")
|
|
|
|
def mount(self, mp):
|
|
try:
|
|
subprocess.call(["mount", "-B", "/" + mp, join(self.root, mp)])
|
|
except Exception as e:
|
|
print(f"Error mounting '{mp}': {e}")
|
|
|
|
def rmdir(self, dir):
|
|
try:
|
|
subprocess.call(["rm", "-Rf", join(self.root, dir)])
|
|
except Exception as e:
|
|
print(f"Error removing directory '{dir}': {e}")
|
|
|
|
def mkdir(self, dir):
|
|
try:
|
|
subprocess.call(["mkdir", "-p", join(self.root, dir)])
|
|
except Exception as e:
|
|
print(f"Error creating directory '{dir}': {e}")
|
|
|
|
def run(self):
|
|
try:
|
|
# Remove CLI installers
|
|
if exists(join(self.root, "usr/sbin/void-installer")):
|
|
target_env_process_output(["rm", "-fv", "usr/sbin/void-installer"])
|
|
|
|
if exists(join(self.root, "usr/sbin/pep-installer")):
|
|
target_env_process_output(["rm", "-fv", "usr/sbin/pep-installer"])
|
|
|
|
# Initialize package manager databases
|
|
if libcalamares.globalstorage.value("hasInternet"):
|
|
target_env_process_output(["xbps-install", "-Syy"])
|
|
|
|
# Remove Calamares from target
|
|
self.remove_pkg("calamares")
|
|
if exists(join(self.root, "usr/share/applications/calamares.desktop")):
|
|
target_env_call(["rm", "-fv", "usr/share/applications/calamares.desktop"])
|
|
|
|
# Remove Emptty if LightDM is present
|
|
if exists(join(self.root, "etc/lightdm/lightdm.conf")):
|
|
if exists(join(self.root, "usr/bin/emptty")):
|
|
target_env_process_output(["rm", "-fv", "etc/runit/runsvdir/default/emptty"])
|
|
target_env_process_output(["rm", "-rfv", "etc/emptty"])
|
|
self.remove_pkg("emptty")
|
|
|
|
# Update grub.cfg
|
|
if exists(join(self.root, "usr/bin/update-grub")):
|
|
target_env_process_output(["update-grub"])
|
|
|
|
# Enable `menu_auto_hide` in grubenv if supported
|
|
if exists(join(self.root, "usr/bin/grub-set-bootflag")):
|
|
target_env_call(["grub-editenv", "-", "set", "menu_auto_hide=1", "boot_success=1"])
|
|
|
|
# Enable doas if installed on target
|
|
if exists(join(self.root, "usr/bin/doas")):
|
|
doasconf = "permit nopass :root ||\npermit persist :wheel"
|
|
with open(join(self.root, "etc/doas.conf"), 'w') as conf:
|
|
conf.write(doasconf)
|
|
|
|
# Mark current kernel as automatically installed
|
|
target_env_process_output(["xbps-pkgdb", "-m", "auto", "linux6.1"])
|
|
|
|
# Remove linux-headers package if installed and ignore it in updates
|
|
if self.is_pkg_installed("linux-headers"):
|
|
self.remove_pkg("linux-headers")
|
|
else:
|
|
print("Package 'linux-headers' not installed, skipping removal.")
|
|
|
|
ignorepkg = "ignorepkg=linux-headers"
|
|
self.mkdir("etc/xbps.d/")
|
|
with open(join(self.root, "etc/xbps.d/00-ignore.conf"), 'w') as conf:
|
|
conf.write(ignorepkg)
|
|
|
|
# Reconfigure all target packages
|
|
target_env_process_output(["xbps-reconfigure", "-fa"])
|
|
|
|
except Exception as e:
|
|
print(f"Error during run process: {e}")
|
|
raise
|
|
|
|
def run():
|
|
""" Misc post-install configurations """
|
|
try:
|
|
config = ConfigController()
|
|
return config.run()
|
|
except Exception as e:
|
|
print(f"Error in main run function: {e}")
|
|
return None
|
|
|