Merge pull request #485 from dylanmtaylor/post-installation-scripts
Implement post-installation commands
This commit is contained in:
commit
60cdb2ab87
|
|
@ -366,3 +366,13 @@ def pid_exists(pid: int):
|
|||
return any(subprocess.check_output(['/usr/bin/ps', '--no-headers', '-o', 'pid', '-p', str(pid)]).strip())
|
||||
except subprocess.CalledProcessError:
|
||||
return False
|
||||
|
||||
|
||||
def run_custom_user_commands(commands, installation):
|
||||
for index, command in enumerate(commands):
|
||||
log(f'Executing custom command "{command}" ...', fg='yellow')
|
||||
with open(f"{installation.target}/var/tmp/user-command.{index}.sh", "w") as temp_script:
|
||||
temp_script.write(command)
|
||||
execution_output = SysCommand(f"arch-chroot {installation.target} bash /var/tmp/user-command.{index}.sh")
|
||||
log(execution_output)
|
||||
os.unlink(f"{installation.target}/var/tmp/user-command.{index}.sh")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"audio": "pipewire",
|
||||
"bootloader": "systemd-bootctl",
|
||||
"custom-commands": [
|
||||
"cd /home/devel; git clone https://aur.archlinux.org/paru.git",
|
||||
"chown -R devel:devel /home/devel/paru",
|
||||
"usermod -aG docker devel"
|
||||
],
|
||||
"!encryption-password": "supersecret",
|
||||
"filesystem": "btrfs",
|
||||
"harddrive": {
|
||||
"path": "/dev/nvme0n1"
|
||||
},
|
||||
"hostname": "development-box",
|
||||
"kernels": [
|
||||
"linux"
|
||||
],
|
||||
"keyboard-language": "us",
|
||||
"mirror-region": {
|
||||
"Worldwide": {
|
||||
"https://mirror.rackspace.com/archlinux/$repo/os/$arch": true
|
||||
}
|
||||
},
|
||||
"nic": {
|
||||
"NetworkManager": true
|
||||
},
|
||||
"packages": ["docker", "git", "wget", "zsh"],
|
||||
"profile": "gnome",
|
||||
"superusers": {
|
||||
"devel": {
|
||||
"!password": "devel"
|
||||
}
|
||||
},
|
||||
"timezone": "US/Eastern",
|
||||
"users": {}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import os
|
|||
import time
|
||||
|
||||
import archinstall
|
||||
from archinstall.lib.general import run_custom_user_commands
|
||||
from archinstall.lib.hardware import has_uefi
|
||||
from archinstall.lib.networking import check_mirror_reachable
|
||||
from archinstall.lib.profiles import Profile
|
||||
|
|
@ -180,16 +181,13 @@ def ask_user_questions():
|
|||
if not archinstall.arguments.get('profile', None):
|
||||
archinstall.arguments['profile'] = archinstall.select_profile(archinstall.list_profiles(filter_top_level_profiles=True))
|
||||
else:
|
||||
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
|
||||
archinstall.arguments['profile'] = Profile(installer=None, path=archinstall.arguments['profile'])
|
||||
|
||||
# Check the potentially selected profiles preparations to get early checks if some additional questions are needed.
|
||||
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_prep_function():
|
||||
with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported:
|
||||
if not imported._prep_function():
|
||||
archinstall.log(
|
||||
' * Profile\'s preparation requirements was not fulfilled.',
|
||||
fg='red'
|
||||
)
|
||||
archinstall.log(' * Profile\'s preparation requirements was not fulfilled.', fg='red')
|
||||
exit(1)
|
||||
|
||||
# Ask about audio server selection if one is not already set
|
||||
|
|
@ -381,6 +379,10 @@ def perform_installation(mountpoint):
|
|||
archinstall.log(' * Profile\'s post configuration requirements was not fulfilled.', fg='red')
|
||||
exit(1)
|
||||
|
||||
# If the user provided custom commands to be run post-installation, execute them now.
|
||||
if archinstall.arguments.get('custom-commands', None):
|
||||
run_custom_user_commands(archinstall.arguments['custom-commands'], installation)
|
||||
|
||||
installation.log("For post-installation tips, see https://wiki.archlinux.org/index.php/Installation_guide#Post-installation", fg="yellow")
|
||||
if not archinstall.arguments.get('silent'):
|
||||
choice = input("Would you like to chroot into the newly created installation and perform post-installation configuration? [Y/n] ")
|
||||
|
|
@ -410,8 +412,9 @@ else:
|
|||
# Temporarily disabling keep_partitions if config file is loaded
|
||||
archinstall.arguments['harddrive'].keep_partitions = False
|
||||
# Temporary workaround to make Desktop Environments work
|
||||
archinstall.storage['_desktop_profile'] = archinstall.arguments.get('desktop', None)
|
||||
if archinstall.arguments.get('profile', None):
|
||||
archinstall.arguments['profile'] = Profile(installer=None, path=archinstall.arguments['profile']['path'])
|
||||
if archinstall.arguments.get('profile', None) is not None:
|
||||
archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None))
|
||||
else:
|
||||
archinstall.arguments['profile'] = None
|
||||
|
||||
perform_installation_steps()
|
||||
|
|
|
|||
Loading…
Reference in New Issue