commit
5018bef41d
|
|
@ -1,3 +1,7 @@
|
||||||
# As per https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#example-of-a-codeowners-file
|
# As per https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#example-of-a-codeowners-file
|
||||||
|
|
||||||
* @Torxed @grazzolini
|
* @Torxed
|
||||||
|
|
||||||
|
# Any PKGBUILD changes should tag grazzolini
|
||||||
|
/PKGBUILDs/ @grazzolini
|
||||||
|
/PKGBUILD @grazzolini
|
||||||
|
|
|
||||||
|
|
@ -198,9 +198,9 @@ class Partition():
|
||||||
This is more reliable than relying on /dev/disk/by-partuuid as
|
This is more reliable than relying on /dev/disk/by-partuuid as
|
||||||
it doesn't seam to be able to detect md raid partitions.
|
it doesn't seam to be able to detect md raid partitions.
|
||||||
"""
|
"""
|
||||||
lsblk = b''.join(sys_command(f'lsblk -J {self.path}'))
|
lsblk = b''.join(sys_command(f'lsblk -J -o+PARTUUID {self.path}'))
|
||||||
for partition in json.loads(lsblk.decode('UTF-8'))['blockdevices']:
|
for partition in json.loads(lsblk.decode('UTF-8'))['blockdevices']:
|
||||||
return partition['partuuid']
|
return partition.get('partuuid', None)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def encrypted(self):
|
def encrypted(self):
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class sys_command():#Thread):
|
||||||
"""
|
"""
|
||||||
Stolen from archinstall_gui
|
Stolen from archinstall_gui
|
||||||
"""
|
"""
|
||||||
def __init__(self, cmd, callback=None, start_callback=None, *args, **kwargs):
|
def __init__(self, cmd, callback=None, start_callback=None, peak_output=False, *args, **kwargs):
|
||||||
kwargs.setdefault("worker_id", gen_uid())
|
kwargs.setdefault("worker_id", gen_uid())
|
||||||
kwargs.setdefault("emulate", False)
|
kwargs.setdefault("emulate", False)
|
||||||
kwargs.setdefault("suppress_errors", False)
|
kwargs.setdefault("suppress_errors", False)
|
||||||
|
|
@ -101,6 +101,7 @@ class sys_command():#Thread):
|
||||||
|
|
||||||
self.args = args
|
self.args = args
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
|
self.peak_output = peak_output
|
||||||
|
|
||||||
self.kwargs.setdefault("worker", None)
|
self.kwargs.setdefault("worker", None)
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
|
|
@ -158,6 +159,38 @@ class sys_command():#Thread):
|
||||||
'exit_code': self.exit_code
|
'exit_code': self.exit_code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def peak(self, output :str):
|
||||||
|
if type(output) == bytes:
|
||||||
|
try:
|
||||||
|
output = output.decode('UTF-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
output = output.strip('\r\n ')
|
||||||
|
if len(output) <= 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.peak_output:
|
||||||
|
from .user_interaction import get_terminal_width
|
||||||
|
|
||||||
|
# Move back to the beginning of the terminal
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stdout.write("\033[%dG" % 0)
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
# Clear the line
|
||||||
|
sys.stdout.write(" " * get_terminal_width())
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
# Move back to the beginning again
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stdout.write("\033[%dG" % 0)
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
# And print the new output we're peaking on:
|
||||||
|
sys.stdout.write(output)
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.status = 'running'
|
self.status = 'running'
|
||||||
old_dir = os.getcwd()
|
old_dir = os.getcwd()
|
||||||
|
|
@ -189,6 +222,7 @@ class sys_command():#Thread):
|
||||||
for fileno, event in poller.poll(0.1):
|
for fileno, event in poller.poll(0.1):
|
||||||
try:
|
try:
|
||||||
output = os.read(child_fd, 8192)
|
output = os.read(child_fd, 8192)
|
||||||
|
self.peak(output)
|
||||||
self.trace_log += output
|
self.trace_log += output
|
||||||
except OSError:
|
except OSError:
|
||||||
alive = False
|
alive = False
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ class Installer():
|
||||||
self.log(f'Installing packages: {packages}', level=LOG_LEVELS.Info)
|
self.log(f'Installing packages: {packages}', level=LOG_LEVELS.Info)
|
||||||
|
|
||||||
if (sync_mirrors := sys_command('/usr/bin/pacman -Syy')).exit_code == 0:
|
if (sync_mirrors := sys_command('/usr/bin/pacman -Syy')).exit_code == 0:
|
||||||
if (pacstrap := sys_command(f'/usr/bin/pacstrap {self.mountpoint} {" ".join(packages)}', **kwargs)).exit_code == 0:
|
if (pacstrap := sys_command(f'/usr/bin/pacstrap {self.mountpoint} {" ".join(packages)}', peak_output=True, **kwargs)).exit_code == 0:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.log(f'Could not strap in packages: {pacstrap.exit_code}', level=LOG_LEVELS.Info)
|
self.log(f'Could not strap in packages: {pacstrap.exit_code}', level=LOG_LEVELS.Info)
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,12 @@ def ask_to_configure_network():
|
||||||
# Optionally configure one network interface.
|
# Optionally configure one network interface.
|
||||||
#while 1:
|
#while 1:
|
||||||
# {MAC: Ifname}
|
# {MAC: Ifname}
|
||||||
interfaces = {'ISO-CONFIG' : 'Copy ISO network configuration to installation', **list_interfaces()}
|
interfaces = {'ISO-CONFIG' : 'Copy ISO network configuration to installation','NetworkManager':'Use NetworkManager to control and manage your internet connection', **list_interfaces()}
|
||||||
|
|
||||||
nic = generic_select(interfaces.values(), "Select one network interface to configure (leave blank to skip): ")
|
nic = generic_select(interfaces.values(), "Select one network interface to configure (leave blank to skip): ")
|
||||||
if nic and nic != 'Copy ISO network configuration to installation':
|
if nic and nic != 'Copy ISO network configuration to installation':
|
||||||
|
if nic == 'Use NetworkManager to control and manage your internet connection':
|
||||||
|
return {'nic': nic,'NetworkManager':True}
|
||||||
mode = generic_select(['DHCP (auto detect)', 'IP (static)'], f"Select which mode to configure for {nic}: ")
|
mode = generic_select(['DHCP (auto detect)', 'IP (static)'], f"Select which mode to configure for {nic}: ")
|
||||||
if mode == 'IP (static)':
|
if mode == 'IP (static)':
|
||||||
while 1:
|
while 1:
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,9 @@ def perform_installation(device, boot_partition, language, mirrors):
|
||||||
# Perform a copy of the config
|
# Perform a copy of the config
|
||||||
if archinstall.arguments.get('nic', None) == 'Copy ISO network configuration to installation':
|
if archinstall.arguments.get('nic', None) == 'Copy ISO network configuration to installation':
|
||||||
installation.copy_ISO_network_config(enable_services=True) # Sources the ISO network configuration to the install medium.
|
installation.copy_ISO_network_config(enable_services=True) # Sources the ISO network configuration to the install medium.
|
||||||
|
elif archinstall.arguments.get('nic',{}).get('NetworkManager',False):
|
||||||
|
installation.add_additional_packages("networkmanager")
|
||||||
|
installation.enable_service('NetworkManager.service')
|
||||||
# Otherwise, if a interface was selected, configure that interface
|
# Otherwise, if a interface was selected, configure that interface
|
||||||
elif archinstall.arguments.get('nic', None):
|
elif archinstall.arguments.get('nic', None):
|
||||||
installation.configure_nic(**archinstall.arguments.get('nic', {}))
|
installation.configure_nic(**archinstall.arguments.get('nic', {}))
|
||||||
|
|
@ -348,4 +350,4 @@ def perform_installation(device, boot_partition, language, mirrors):
|
||||||
|
|
||||||
|
|
||||||
ask_user_questions()
|
ask_user_questions()
|
||||||
perform_installation_steps()
|
perform_installation_steps()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue