Fix typos (#1265)
This commit is contained in:
parent
b2f85889a7
commit
2de153003e
|
|
@ -30,7 +30,7 @@ Some additional options that are not needed by most users are hidden behind the
|
||||||
|
|
||||||
## Running from a declarative configuration file or URL
|
## Running from a declarative configuration file or URL
|
||||||
|
|
||||||
Prequisites:
|
Prerequisites:
|
||||||
1. Edit the [configuration file](https://github.com/archlinux/archinstall/blob/master/examples/config-sample.json) according to your requirements.
|
1. Edit the [configuration file](https://github.com/archlinux/archinstall/blob/master/examples/config-sample.json) according to your requirements.
|
||||||
|
|
||||||
Assuming you are on a Arch Linux live-ISO and booted into EFI mode.
|
Assuming you are on a Arch Linux live-ISO and booted into EFI mode.
|
||||||
|
|
@ -55,7 +55,7 @@ The guided installer itself is also optional to use if so desired and not forced
|
||||||
Archinstall has one fundamental function which is to be a flexible library to manage services, packages and other aspects inside the installed system.
|
Archinstall has one fundamental function which is to be a flexible library to manage services, packages and other aspects inside the installed system.
|
||||||
This library is in turn used by the provided guided installer but is also for anyone who wants to script their own installations.
|
This library is in turn used by the provided guided installer but is also for anyone who wants to script their own installations.
|
||||||
|
|
||||||
Therefore, Archinstall will try its best to not introduce any breaking changes except for major releases which may break backwards compability after notifying about such changes.
|
Therefore, Archinstall will try its best to not introduce any breaking changes except for major releases which may break backwards compatibility after notifying about such changes.
|
||||||
|
|
||||||
# Scripting your own installation
|
# Scripting your own installation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ def parse_unspecified_argument_list(unknowns :list, multiple :bool = False, erro
|
||||||
--argument=value
|
--argument=value
|
||||||
--argument = value
|
--argument = value
|
||||||
--argument (boolean as default)
|
--argument (boolean as default)
|
||||||
the optional paramters to the function alter a bit its behaviour:
|
the optional parameters to the function alter a bit its behaviour:
|
||||||
* multiple allows multivalued arguments, each value separated by whitespace. They're returned as a list
|
* multiple allows multivalued arguments, each value separated by whitespace. They're returned as a list
|
||||||
* error. If set any non correctly specified argument-value pair to raise an exception. Else, simply notifies the existence of a problem and continues processing.
|
* error. If set any non correctly specified argument-value pair to raise an exception. Else, simply notifies the existence of a problem and continues processing.
|
||||||
|
|
||||||
|
|
@ -104,7 +104,7 @@ def parse_unspecified_argument_list(unknowns :list, multiple :bool = False, erro
|
||||||
key = None
|
key = None
|
||||||
last_key = None
|
last_key = None
|
||||||
while tmp_list:
|
while tmp_list:
|
||||||
element = tmp_list.pop(0) # retreive an element of the list
|
element = tmp_list.pop(0) # retrieve an element of the list
|
||||||
if element.startswith('--'): # is an argument ?
|
if element.startswith('--'): # is an argument ?
|
||||||
if '=' in element: # uses the arg=value syntax ?
|
if '=' in element: # uses the arg=value syntax ?
|
||||||
key, value = [x.strip() for x in element[2:].split('=', 1)]
|
key, value = [x.strip() for x in element[2:].split('=', 1)]
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ def create_subvolume(installation :Installer, subvolume_location :Union[pathlib.
|
||||||
|
|
||||||
def _has_option(option :str,options :list) -> bool:
|
def _has_option(option :str,options :list) -> bool:
|
||||||
""" auxiliary routine to check if an option is present in a list.
|
""" auxiliary routine to check if an option is present in a list.
|
||||||
we check if the string appears in one of the options, 'cause it can appear in severl forms (option, option=val,...)
|
we check if the string appears in one of the options, 'cause it can appear in several forms (option, option=val,...)
|
||||||
"""
|
"""
|
||||||
if not options:
|
if not options:
|
||||||
return False
|
return False
|
||||||
|
|
@ -110,7 +110,7 @@ def manage_btrfs_subvolumes(installation :Installer,
|
||||||
subvolumes = partition['btrfs']['subvolumes']
|
subvolumes = partition['btrfs']['subvolumes']
|
||||||
for name, right_hand in subvolumes.items():
|
for name, right_hand in subvolumes.items():
|
||||||
try:
|
try:
|
||||||
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load - every subvolume is created from the top of the hierarchy- and simplifies its further use
|
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implementation has no semantic load - every subvolume is created from the top of the hierarchy- and simplifies its further use
|
||||||
if name.startswith('/'):
|
if name.startswith('/'):
|
||||||
name = name[1:]
|
name = name[1:]
|
||||||
# renormalize the right hand.
|
# renormalize the right hand.
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from .btrfssubvolume import BtrfsSubvolume
|
||||||
|
|
||||||
|
|
||||||
def mount_subvolume(installation, device, name, subvolume_information):
|
def mount_subvolume(installation, device, name, subvolume_information):
|
||||||
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load.
|
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implementation has no semantic load.
|
||||||
# Every subvolume is created from the top of the hierarchy- and simplifies its further use
|
# Every subvolume is created from the top of the hierarchy- and simplifies its further use
|
||||||
name = name.lstrip('/')
|
name = name.lstrip('/')
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ def setup_subvolumes(installation, partition_dict):
|
||||||
"""
|
"""
|
||||||
log(f"Setting up subvolumes: {partition_dict['btrfs']['subvolumes']}", level=logging.INFO, fg="gray")
|
log(f"Setting up subvolumes: {partition_dict['btrfs']['subvolumes']}", level=logging.INFO, fg="gray")
|
||||||
for name, right_hand in partition_dict['btrfs']['subvolumes'].items():
|
for name, right_hand in partition_dict['btrfs']['subvolumes'].items():
|
||||||
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implemenation has no semantic load.
|
# we normalize the subvolume name (getting rid of slash at the start if exists. In our implementation has no semantic load.
|
||||||
# Every subvolume is created from the top of the hierarchy- and simplifies its further use
|
# Every subvolume is created from the top of the hierarchy- and simplifies its further use
|
||||||
name = name.lstrip('/')
|
name = name.lstrip('/')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,13 +62,13 @@ class BTRFSPartition(Partition):
|
||||||
if not installation:
|
if not installation:
|
||||||
installation = storage.get('installation_session')
|
installation = storage.get('installation_session')
|
||||||
|
|
||||||
# Determain if the path given, is an absolute path or a releative path.
|
# Determain if the path given, is an absolute path or a relative path.
|
||||||
# We do this by checking if the path contains a known mountpoint.
|
# We do this by checking if the path contains a known mountpoint.
|
||||||
if str(subvolume)[0] == '/':
|
if str(subvolume)[0] == '/':
|
||||||
if filesystems := findmnt(subvolume, traverse=True).get('filesystems'):
|
if filesystems := findmnt(subvolume, traverse=True).get('filesystems'):
|
||||||
if (target := filesystems[0].get('target')) and target != '/' and str(subvolume).startswith(target):
|
if (target := filesystems[0].get('target')) and target != '/' and str(subvolume).startswith(target):
|
||||||
# Path starts with a known mountpoint which isn't /
|
# Path starts with a known mountpoint which isn't /
|
||||||
# Which means it's an absolut path to a mounted location.
|
# Which means it's an absolute path to a mounted location.
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
# Since it's not an absolute position with a known start.
|
# Since it's not an absolute position with a known start.
|
||||||
|
|
|
||||||
|
|
@ -68,9 +68,9 @@ class BtrfsSubvolume:
|
||||||
from .btrfs_helpers import subvolume_info_from_path
|
from .btrfs_helpers import subvolume_info_from_path
|
||||||
|
|
||||||
# TODO: Make this function traverse storage['MOUNT_POINT'] and find the first
|
# TODO: Make this function traverse storage['MOUNT_POINT'] and find the first
|
||||||
# occurance of a mountpoint that is a btrfs volume instead of lazy assume / is a subvolume.
|
# occurrence of a mountpoint that is a btrfs volume instead of lazy assume / is a subvolume.
|
||||||
# It would also be nice if it could use findmnt(self.full_path) and traverse backwards
|
# It would also be nice if it could use findmnt(self.full_path) and traverse backwards
|
||||||
# finding the last occurance of a subvolume which 'self' belongs to.
|
# finding the last occurrence of a subvolume which 'self' belongs to.
|
||||||
if volume := subvolume_info_from_path(storage['MOUNT_POINT']):
|
if volume := subvolume_info_from_path(storage['MOUNT_POINT']):
|
||||||
return self.full_path == volume.full_path
|
return self.full_path == volume.full_path
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ class Filesystem:
|
||||||
raise KeyError(f"Could not create a GPT label on {self}")
|
raise KeyError(f"Could not create a GPT label on {self}")
|
||||||
elif self.mode == MBR:
|
elif self.mode == MBR:
|
||||||
if not self.parted_mklabel(self.blockdevice.device, "msdos"):
|
if not self.parted_mklabel(self.blockdevice.device, "msdos"):
|
||||||
raise KeyError(f"Could not create a MSDOS label on {self}")
|
raise KeyError(f"Could not create a MS-DOS label on {self}")
|
||||||
|
|
||||||
self.blockdevice.flush_cache()
|
self.blockdevice.flush_cache()
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
|
@ -221,7 +221,7 @@ class Filesystem:
|
||||||
raise KeyError(f"Could not create a GPT label on {self}")
|
raise KeyError(f"Could not create a GPT label on {self}")
|
||||||
elif self.mode == MBR:
|
elif self.mode == MBR:
|
||||||
if not self.parted_mklabel(self.blockdevice.device, "msdos"):
|
if not self.parted_mklabel(self.blockdevice.device, "msdos"):
|
||||||
raise KeyError(f"Could not create a MSDOS label on {self}")
|
raise KeyError(f"Could not create a MS-DOS label on {self}")
|
||||||
|
|
||||||
self.blockdevice.flush_cache()
|
self.blockdevice.flush_cache()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ def cleanup_bash_escapes(data :str) -> str:
|
||||||
|
|
||||||
def blkid(cmd :str) -> Dict[str, Any]:
|
def blkid(cmd :str) -> Dict[str, Any]:
|
||||||
if '-o' in cmd and '-o export' not in cmd:
|
if '-o' in cmd and '-o export' not in cmd:
|
||||||
raise ValueError(f"blkid() requires '-o export' to be used and can therefor not continue reliably.")
|
raise ValueError(f"blkid() requires '-o export' to be used and can therefore not continue reliably.")
|
||||||
elif '-o' not in cmd:
|
elif '-o' not in cmd:
|
||||||
cmd += ' -o export'
|
cmd += ' -o export'
|
||||||
|
|
||||||
|
|
@ -133,7 +133,7 @@ def blkid(cmd :str) -> Dict[str, Any]:
|
||||||
key, val = line.split('=', 1)
|
key, val = line.split('=', 1)
|
||||||
if key.lower() == 'devname':
|
if key.lower() == 'devname':
|
||||||
devname = val
|
devname = val
|
||||||
# Lowercase for backwards compatability with all_disks() previous use cases
|
# Lowercase for backwards compatibility with all_disks() previous use cases
|
||||||
result[devname] = {
|
result[devname] = {
|
||||||
"path": devname,
|
"path": devname,
|
||||||
"PATH": devname
|
"PATH": devname
|
||||||
|
|
@ -475,7 +475,7 @@ def has_mountpoint(partition: Union[dict,Partition,MapperDev], target: str, stri
|
||||||
|
|
||||||
Input parms:
|
Input parms:
|
||||||
:parm partition the partition we check
|
:parm partition the partition we check
|
||||||
:type Either a Partition object or a dict with the contents of a partition definiton in the disk_layouts schema
|
:type Either a Partition object or a dict with the contents of a partition definition in the disk_layouts schema
|
||||||
|
|
||||||
:parm target (a string representing a mount path we want to check for.
|
:parm target (a string representing a mount path we want to check for.
|
||||||
:type str
|
:type str
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ class SysCommandWorker:
|
||||||
self.cmd = cmd
|
self.cmd = cmd
|
||||||
self.callbacks = callbacks
|
self.callbacks = callbacks
|
||||||
self.peak_output = peak_output
|
self.peak_output = peak_output
|
||||||
# define the standard locale for command outputs. For now the C ascii one. Can be overriden
|
# define the standard locale for command outputs. For now the C ascii one. Can be overridden
|
||||||
self.environment_vars = {**storage.get('CMD_LOCALE',{}),**environment_vars}
|
self.environment_vars = {**storage.get('CMD_LOCALE',{}),**environment_vars}
|
||||||
self.logfile = logfile
|
self.logfile = logfile
|
||||||
self.working_directory = working_directory
|
self.working_directory = working_directory
|
||||||
|
|
@ -354,7 +354,7 @@ class SysCommandWorker:
|
||||||
# Note: If for any reason, we get a Python exception between here
|
# Note: If for any reason, we get a Python exception between here
|
||||||
# and until os.close(), the traceback will get locked inside
|
# and until os.close(), the traceback will get locked inside
|
||||||
# stdout of the child_fd object. `os.read(self.child_fd, 8192)` is the
|
# stdout of the child_fd object. `os.read(self.child_fd, 8192)` is the
|
||||||
# only way to get the traceback without loosing it.
|
# only way to get the traceback without losing it.
|
||||||
|
|
||||||
self.pid, self.child_fd = pty.fork()
|
self.pid, self.child_fd = pty.fork()
|
||||||
|
|
||||||
|
|
@ -547,7 +547,7 @@ def json_stream_to_structure(configuration_identifier : str, stream :str, target
|
||||||
|
|
||||||
parsed_url = urllib.parse.urlparse(stream)
|
parsed_url = urllib.parse.urlparse(stream)
|
||||||
|
|
||||||
if parsed_url.scheme: # The stream is in fact a URL that should be grabed
|
if parsed_url.scheme: # The stream is in fact a URL that should be grabbed
|
||||||
with urllib.request.urlopen(urllib.request.Request(stream, headers={'User-Agent': 'ArchInstall'})) as response:
|
with urllib.request.urlopen(urllib.request.Request(stream, headers={'User-Agent': 'ArchInstall'})) as response:
|
||||||
target.update(json.loads(response.read()))
|
target.update(json.loads(response.read()))
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,7 @@ class Installer:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _create_keyfile(self,luks_handle , partition :dict, password :str):
|
def _create_keyfile(self,luks_handle , partition :dict, password :str):
|
||||||
""" roiutine to create keyfiles, so it can be moved elsewere
|
""" roiutine to create keyfiles, so it can be moved elsewhere
|
||||||
"""
|
"""
|
||||||
if partition.get('generate-encryption-key-file'):
|
if partition.get('generate-encryption-key-file'):
|
||||||
if not (cryptkey_dir := pathlib.Path(f"{self.target}/etc/cryptsetup-keys.d")).exists():
|
if not (cryptkey_dir := pathlib.Path(f"{self.target}/etc/cryptsetup-keys.d")).exists():
|
||||||
|
|
@ -413,7 +413,7 @@ class Installer:
|
||||||
try:
|
try:
|
||||||
run_pacman('-Syy', default_cmd='/usr/bin/pacman')
|
run_pacman('-Syy', default_cmd='/usr/bin/pacman')
|
||||||
except SysCallError as error:
|
except SysCallError as error:
|
||||||
self.log(f'Could not sync a new package databse: {error}', level=logging.ERROR, fg="red")
|
self.log(f'Could not sync a new package database: {error}', level=logging.ERROR, fg="red")
|
||||||
|
|
||||||
if storage['arguments'].get('silent', False) is False:
|
if storage['arguments'].get('silent', False) is False:
|
||||||
if input('Would you like to re-try this download? (Y/n): ').lower().strip() in ('', 'y'):
|
if input('Would you like to re-try this download? (Y/n): ').lower().strip() in ('', 'y'):
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ The default implementation can handle simple lists and a key:value dictionary. T
|
||||||
A sample of basic usage is included at the end of the source.
|
A sample of basic usage is included at the end of the source.
|
||||||
|
|
||||||
More sophisticaded uses can be achieved by
|
More sophisticaded uses can be achieved by
|
||||||
* changing the action list and the null_action during intialization
|
* changing the action list and the null_action during initialization
|
||||||
```
|
```
|
||||||
opciones = ListManager('Vamos alla',opciones,[str(_('Add')),str(_('Delete'))],_('Add')).run()
|
opciones = ListManager('Vamos alla',opciones,[str(_('Add')),str(_('Delete'))],_('Add')).run()
|
||||||
```
|
```
|
||||||
|
|
@ -198,7 +198,7 @@ class ListManager:
|
||||||
else:
|
else:
|
||||||
self.target = self._data[data_formatted[target.value]]
|
self.target = self._data[data_formatted[target.value]]
|
||||||
|
|
||||||
# Possible enhacement. If run_actions returns false a message line indicating the failure
|
# Possible enhancement. If run_actions returns false a message line indicating the failure
|
||||||
self.run_actions(target.value)
|
self.run_actions(target.value)
|
||||||
|
|
||||||
if target.value == self.cancel_action: # TODO dubious
|
if target.value == self.cancel_action: # TODO dubious
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ class Menu(TerminalMenu):
|
||||||
# We check that the options are iterable. If not we abort. Else we copy them to lists
|
# We check that the options are iterable. If not we abort. Else we copy them to lists
|
||||||
# it options is a dictionary we use the values as entries of the list
|
# it options is a dictionary we use the values as entries of the list
|
||||||
# if options is a string object, each character becomes an entry
|
# if options is a string object, each character becomes an entry
|
||||||
# if options is a list, we implictily build a copy to mantain immutability
|
# if options is a list, we implictily build a copy to maintain immutability
|
||||||
if not isinstance(p_options,Iterable):
|
if not isinstance(p_options,Iterable):
|
||||||
log(f"Objects of type {type(p_options)} is not iterable, and are not supported at Menu",fg="red")
|
log(f"Objects of type {type(p_options)} is not iterable, and are not supported at Menu",fg="red")
|
||||||
log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>",level=logging.WARNING)
|
log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>",level=logging.WARNING)
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ class GeneralMenu:
|
||||||
|
|
||||||
def _setup_selection_menu_options(self):
|
def _setup_selection_menu_options(self):
|
||||||
""" Define the menu options.
|
""" Define the menu options.
|
||||||
Menu options can be defined here in a subclass or done per progam calling self.set_option()
|
Menu options can be defined here in a subclass or done per program calling self.set_option()
|
||||||
"""
|
"""
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -347,7 +347,7 @@ class GeneralMenu:
|
||||||
return self.exec_option(config_name, selector)
|
return self.exec_option(config_name, selector)
|
||||||
|
|
||||||
def exec_option(self, config_name :str, p_selector :Selector = None) -> bool:
|
def exec_option(self, config_name :str, p_selector :Selector = None) -> bool:
|
||||||
""" processes the exection of a given menu entry
|
""" processes the execution of a given menu entry
|
||||||
- pre process callback
|
- pre process callback
|
||||||
- selection function
|
- selection function
|
||||||
- post process callback
|
- post process callback
|
||||||
|
|
|
||||||
|
|
@ -619,7 +619,7 @@ class TerminalMenu:
|
||||||
else:
|
else:
|
||||||
unit_separated_entry = escaped_separator_pattern.sub("|", separator_pattern.sub("\\1\x1F", entry))
|
unit_separated_entry = escaped_separator_pattern.sub("|", separator_pattern.sub("\\1\x1F", entry))
|
||||||
match_obj = menu_entry_pattern.match(unit_separated_entry)
|
match_obj = menu_entry_pattern.match(unit_separated_entry)
|
||||||
# this is none in case the entry was an emtpy string which
|
# this is none in case the entry was an empty string which
|
||||||
# will be interpreted as a separator
|
# will be interpreted as a separator
|
||||||
assert match_obj is not None
|
assert match_obj is not None
|
||||||
shortcut_key = match_obj.group(1)
|
shortcut_key = match_obj.group(1)
|
||||||
|
|
|
||||||
|
|
@ -64,13 +64,13 @@ class User:
|
||||||
) -> List['User']:
|
) -> List['User']:
|
||||||
users = []
|
users = []
|
||||||
|
|
||||||
# backwards compability
|
# backwards compatibility
|
||||||
if isinstance(config_users, dict):
|
if isinstance(config_users, dict):
|
||||||
users += cls._parse_backwards_compatible(config_users, False)
|
users += cls._parse_backwards_compatible(config_users, False)
|
||||||
else:
|
else:
|
||||||
users += cls._parse(config_users)
|
users += cls._parse(config_users)
|
||||||
|
|
||||||
# backwards compability
|
# backwards compatibility
|
||||||
if isinstance(config_superusers, dict):
|
if isinstance(config_superusers, dict):
|
||||||
users += cls._parse_backwards_compatible(config_superusers, True)
|
users += cls._parse_backwards_compatible(config_superusers, True)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,13 @@ storage: Dict[str, Any] = {
|
||||||
# os.path.abspath(f'{os.path.dirname(__file__)}/../examples')
|
# os.path.abspath(f'{os.path.dirname(__file__)}/../examples')
|
||||||
],
|
],
|
||||||
'UPSTREAM_URL': 'https://raw.githubusercontent.com/archlinux/archinstall/master/profiles',
|
'UPSTREAM_URL': 'https://raw.githubusercontent.com/archlinux/archinstall/master/profiles',
|
||||||
'PROFILE_DB': None, # Used in cases when listing profiles is desired, not mandatory for direct profile grabing.
|
'PROFILE_DB': None, # Used in cases when listing profiles is desired, not mandatory for direct profile grabbing.
|
||||||
'LOG_PATH': '/var/log/archinstall',
|
'LOG_PATH': '/var/log/archinstall',
|
||||||
'LOG_FILE': 'install.log',
|
'LOG_FILE': 'install.log',
|
||||||
'MOUNT_POINT': '/mnt/archinstall',
|
'MOUNT_POINT': '/mnt/archinstall',
|
||||||
'ENC_IDENTIFIER': 'ainst',
|
'ENC_IDENTIFIER': 'ainst',
|
||||||
'DISK_TIMEOUTS' : 1, # seconds
|
'DISK_TIMEOUTS' : 1, # seconds
|
||||||
'DISK_RETRY_ATTEMPTS' : 5, # RETRY_ATTEMPTS * DISK_TIMEOUTS is used in disk operations
|
'DISK_RETRY_ATTEMPTS' : 5, # RETRY_ATTEMPTS * DISK_TIMEOUTS is used in disk operations
|
||||||
'CMD_LOCALE':{'LC_ALL':'C'}, # default locale for execution commands. Can be overriden with set_cmd_locale()
|
'CMD_LOCALE':{'LC_ALL':'C'}, # default locale for execution commands. Can be overridden with set_cmd_locale()
|
||||||
'CMD_LOCALE_DEFAULT':{'LC_ALL':'C'}, # should be the same as the former. Not be used except in reset_cmd_locale()
|
'CMD_LOCALE_DEFAULT':{'LC_ALL':'C'}, # should be the same as the former. Not be used except in reset_cmd_locale()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ class Boot:
|
||||||
|
|
||||||
if len(args) >= 2 and args[1]:
|
if len(args) >= 2 and args[1]:
|
||||||
log(args[1], level=logging.ERROR, fg='red')
|
log(args[1], level=logging.ERROR, fg='red')
|
||||||
log(f"The error above occured in a temporary boot-up of the installation {self.instance}", level=logging.ERROR, fg="red")
|
log(f"The error above occurred in a temporary boot-up of the installation {self.instance}", level=logging.ERROR, fg="red")
|
||||||
|
|
||||||
shutdown = None
|
shutdown = None
|
||||||
shutdown_exit_code = -1
|
shutdown_exit_code = -1
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class LanguageDefinitions:
|
||||||
if entry['abbr'] == abbr:
|
if entry['abbr'] == abbr:
|
||||||
return entry['lang']
|
return entry['lang']
|
||||||
|
|
||||||
raise ValueError(f'No language with abbrevation "{abbr}" found')
|
raise ValueError(f'No language with abbreviation "{abbr}" found')
|
||||||
|
|
||||||
|
|
||||||
class DeferredTranslation:
|
class DeferredTranslation:
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ def generic_select(
|
||||||
# We check that the options are iterable. If not we abort. Else we copy them to lists
|
# We check that the options are iterable. If not we abort. Else we copy them to lists
|
||||||
# it options is a dictionary we use the values as entries of the list
|
# it options is a dictionary we use the values as entries of the list
|
||||||
# if options is a string object, each character becomes an entry
|
# if options is a string object, each character becomes an entry
|
||||||
# if options is a list, we implictily build a copy to mantain immutability
|
# if options is a list, we implictily build a copy to maintain immutability
|
||||||
if not isinstance(p_options, Iterable):
|
if not isinstance(p_options, Iterable):
|
||||||
log(f"Objects of type {type(p_options)} is not iterable, and are not supported at generic_select", fg="red")
|
log(f"Objects of type {type(p_options)} is not iterable, and are not supported at generic_select", fg="red")
|
||||||
log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>", level=logging.WARNING)
|
log(f"invalid parameter at Menu() call was at <{sys._getframe(1).f_code.co_name}>", level=logging.WARNING)
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str,
|
||||||
continue
|
continue
|
||||||
|
|
||||||
block_device_struct["partitions"].append({
|
block_device_struct["partitions"].append({
|
||||||
"type": "primary", # Strictly only allowed under MSDOS, but GPT accepts it so it's "safe" to inject
|
"type": "primary", # Strictly only allowed under MS-DOS, but GPT accepts it so it's "safe" to inject
|
||||||
"start": start,
|
"start": start,
|
||||||
"size": end,
|
"size": end,
|
||||||
"mountpoint": None,
|
"mountpoint": None,
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Some of the features of Archinstall are:
|
||||||
|
|
||||||
* **Context friendly.** The library always executes calls in sequential order to ensure installation-steps don't overlap or execute in the wrong order. It also supports *(and uses)* context wrappers to ensure cleanup and final tasks such as ``mkinitcpio`` are called when needed.
|
* **Context friendly.** The library always executes calls in sequential order to ensure installation-steps don't overlap or execute in the wrong order. It also supports *(and uses)* context wrappers to ensure cleanup and final tasks such as ``mkinitcpio`` are called when needed.
|
||||||
|
|
||||||
* **Full transparancy** Logs and insights can be found at ``/var/log/archinstall`` both in the live ISO and the installed system.
|
* **Full transparency** Logs and insights can be found at ``/var/log/archinstall`` both in the live ISO and the installed system.
|
||||||
|
|
||||||
* **Accessibility friendly** Archinstall works with ``espeakup`` and other accessibility tools thanks to the use of a TUI.
|
* **Accessibility friendly** Archinstall works with ``espeakup`` and other accessibility tools thanks to the use of a TUI.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ Options for ``--config``
|
||||||
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
||||||
| hostname | any | Hostname of machine after installation. Default will be ``archinstall`` | No |
|
| hostname | any | Hostname of machine after installation. Default will be ``archinstall`` | No |
|
||||||
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
||||||
| kernels | [ "kernel1", "kernel2"] | List of kernels to install eg: linux, linux-lts, linux-zen etc | Atleast 1 |
|
| kernels | [ "kernel1", "kernel2"] | List of kernels to install eg: linux, linux-lts, linux-zen etc | At least 1 |
|
||||||
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
||||||
| keyboard-language | Any valid layout given by ``localectl list-keymaps`` | eg: ``us``, ``de`` or ``de-latin1`` etc. Defaults to ``us`` | No |
|
| keyboard-language | Any valid layout given by ``localectl list-keymaps`` | eg: ``us``, ``de`` or ``de-latin1`` etc. Defaults to ``us`` | No |
|
||||||
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
||||||
|
|
@ -149,7 +149,7 @@ Options for ``--config``
|
||||||
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
+----------------------+--------------------------------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------+
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
[1] If no entires are found in ``harddrives``, archinstall guided installation will use whatever is mounted currently under ``/mnt/archinstall``.
|
[1] If no entries are found in ``harddrives``, archinstall guided installation will use whatever is mounted currently under ``/mnt/archinstall``.
|
||||||
|
|
||||||
Options for ``--creds``
|
Options for ``--creds``
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Script swiss (army knife)
|
Script swiss (army knife)
|
||||||
Designed to make different workflows for the installation process. Which is controled by the argument --mode
|
Designed to make different workflows for the installation process. Which is controlled by the argument --mode
|
||||||
mode full guides the full process of installation
|
mode full guides the full process of installation
|
||||||
mode only_hd only proceeds to the creation of the disk infraestructure (partition, mount points, encryption)
|
mode only_hd only proceeds to the creation of the disk infraestructure (partition, mount points, encryption)
|
||||||
mode only_os processes only the installation of Archlinux and software at --mountpoint (or /mnt/archinstall)
|
mode only_os processes only the installation of Archlinux and software at --mountpoint (or /mnt/archinstall)
|
||||||
mode minimal (still not implemented)
|
mode minimal (still not implemented)
|
||||||
mode lineal. Instead of a menu, shows a sequence of selection screens (eq. to the old mode for guided.py)
|
mode lineal. Instead of a menu, shows a sequence of selection screens (eq. to the old mode for guided.py)
|
||||||
|
|
||||||
When using the argument --advanced. an aditional menu for several special parameters needed during installation appears
|
When using the argument --advanced. an additional menu for several special parameters needed during installation appears
|
||||||
|
|
||||||
This script respects the --dry_run argument
|
This script respects the --dry_run argument
|
||||||
|
|
||||||
|
|
@ -180,7 +180,7 @@ class SetupMenu(archinstall.GeneralMenu):
|
||||||
self.set_option(item,
|
self.set_option(item,
|
||||||
archinstall.Selector(
|
archinstall.Selector(
|
||||||
f'{get_locale_mode_text(item)} locale',
|
f'{get_locale_mode_text(item)} locale',
|
||||||
lambda x,item=item: select_installed_locale(item), # the parmeter is needed for the lambda in the loop
|
lambda x,item=item: select_installed_locale(item), # the parameter is needed for the lambda in the loop
|
||||||
enabled=True,
|
enabled=True,
|
||||||
dependencies_not=['LC_ALL'] if item != 'LC_ALL' else []))
|
dependencies_not=['LC_ALL'] if item != 'LC_ALL' else []))
|
||||||
self.option('LC_ALL').set_enabled(True)
|
self.option('LC_ALL').set_enabled(True)
|
||||||
|
|
@ -286,7 +286,7 @@ class MyMenu(archinstall.GlobalMenu):
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Instalation general subroutines
|
Installation general subroutines
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_current_status():
|
def get_current_status():
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ def _prep_function(*args, **kwargs):
|
||||||
before continuing any further.
|
before continuing any further.
|
||||||
"""
|
"""
|
||||||
choice = Menu(str(_(
|
choice = Menu(str(_(
|
||||||
'Choose which servers to install, if none then a minimal installation wil be done')),
|
'Choose which servers to install, if none then a minimal installation will be done')),
|
||||||
available_servers,
|
available_servers,
|
||||||
preset_values=kwargs['servers'],
|
preset_values=kwargs['servers'],
|
||||||
multi=True
|
multi=True
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue