Merge remote-tracking branch 'origin'

This commit is contained in:
Werner Llácer 2022-02-06 13:43:44 +01:00
commit 42b482410c
25 changed files with 1906 additions and 1630 deletions

2
.gitignore vendored
View File

@ -29,4 +29,4 @@ venv
.idea/**
**/install.log
.DS_Store
**/cmd_history.txt
**/cmd_history.txt

View File

@ -35,8 +35,12 @@ from .lib.storage import *
from .lib.systemd import *
from .lib.user_interaction import *
from .lib.menu import Menu
from .lib.menu.selection_menu import GlobalMenu
from .lib.translation import Translation
from .lib.menu.selection_menu import (
GlobalMenu,
Selector,
GeneralMenu
)
from .lib.translation import Translation, DeferredTranslation
from .lib.plugins import plugins, load_plugin # This initiates the plugin loading ceremony
from .lib.configuration import *
parser = ArgumentParser()
@ -44,6 +48,10 @@ parser = ArgumentParser()
__version__ = "2.4.0-dev0"
storage['__version__'] = __version__
# add the custome _ as a builtin, it can now be used anywhere in the
# project to mark strings as translatable with _('translate me')
DeferredTranslation.install()
def define_arguments():
"""

View File

@ -83,7 +83,7 @@ class Filesystem:
for partition in layout.get('partitions', []):
# We don't want to re-add an existing partition (those containing a UUID already)
if partition.get('wipe', False) and not partition.get('PARTUUID', None):
print("Adding partition....")
print(_("Adding partition...."))
start = partition.get('start') or (
prev_partition and f'{prev_partition["device_instance"].end_sectors}s' or DEFAULT_PARTITION_START)
partition['device_instance'] = self.add_partition(partition.get('type', 'primary'),
@ -94,7 +94,7 @@ class Filesystem:
# print('Device instance:', partition['device_instance'])
elif (partition_uuid := partition.get('PARTUUID')) and (partition_instance := self.blockdevice.get_partition(uuid=partition_uuid)):
print("Re-using partition_instance:", partition_instance)
print(_("Re-using partition instance: {}").format(partition_instance))
partition['device_instance'] = partition_instance
else:
raise ValueError(f"{self}.load_layout() doesn't know how to continue without a new partition definition or a UUID ({partition.get('PARTUUID')}) on the device ({self.blockdevice.get_partition(uuid=partition.get('PARTUUID'))}).")
@ -113,7 +113,9 @@ class Filesystem:
raise ValueError(f"Missing encryption password for {partition['device_instance']}")
from ..user_interaction import get_password
storage['arguments']['!encryption-password'] = get_password(f"Enter a encryption password for {partition['device_instance']}")
prompt = str(_('Enter a encryption password for {}').format(partition['device_instance']))
storage['arguments']['!encryption-password'] = get_password(prompt)
partition['!password'] = storage['arguments']['!encryption-password']
@ -136,7 +138,7 @@ class Filesystem:
while True:
partition['filesystem']['format'] = input(f"Enter a valid fs-type for newly encrypted partition {partition['filesystem']['format']}: ").strip()
if not partition['filesystem']['format'] or valid_fs_type(partition['filesystem']['format']) is False:
print("You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's.")
print(_("You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's."))
continue
break

View File

@ -11,6 +11,7 @@ from ..hardware import has_uefi
from ..output import log
from ..menu import Menu
def suggest_single_disk_layout(block_device :BlockDevice,
default_filesystem :Optional[str] = None,
advanced_options :bool = False) -> Dict[str, Any]:

View File

@ -550,3 +550,7 @@ def json_stream_to_structure(id : str, stream :str, target :dict) -> bool :
log(f" {id} is neither a file nor is a JSON string:",level=logging.ERROR)
return False
return True
def secret(x :str):
""" return * with len equal to to the input string """
return '*' * len(x)

View File

@ -141,8 +141,8 @@ class Installer:
# We avoid printing /mnt/<log path> because that might confuse people if they note it down
# and then reboot, and a identical log file will be found in the ISO medium anyway.
print(f"[!] A log file has been created here: {os.path.join(storage['LOG_PATH'], storage['LOG_FILE'])}")
print(" Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues")
print(_("[!] A log file has been created here: {} {}").format(os.path.join(storage['LOG_PATH'], storage['LOG_FILE'])))
print(_(" Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues"))
raise args[1]
self.genfstab()
@ -282,7 +282,7 @@ class Installer:
partition.mount(f'{self.target}{mountpoint}')
def post_install_check(self, *args :str, **kwargs :str) -> List[bool]:
def post_install_check(self, *args :str, **kwargs :str) -> List[str]:
return [step for step, flag in self.helper_flags.items() if flag is False]
def pacstrap(self, *packages :str, **kwargs :str) -> bool:

View File

@ -65,7 +65,7 @@ class Menu(TerminalMenu):
menu_title = f'\n{title}\n\n'
if skip:
menu_title += "Use ESC to skip\n\n"
menu_title += str(_("Use ESC to skip\n\n"))
if default_option:
# if a default value was specified we move that one

View File

@ -1,13 +1,16 @@
from __future__ import annotations
import sys
import logging
from typing import Callable, Any, List, Iterator, Dict
from .menu import Menu
from ..general import SysCommand
from ..general import SysCommand, secret
from ..storage import storage
from ..output import log
from ..profiles import is_desktop_profile
from ..disk import encrypted_partitions
from ..locale_helpers import set_keyboard_language
from ..user_interaction import get_password
from ..user_interaction import get_password, ask_for_a_timezone
from ..user_interaction import ask_ntp
from ..user_interaction import ask_for_swap
from ..user_interaction import ask_for_bootloader
@ -15,7 +18,6 @@ from ..user_interaction import ask_hostname
from ..user_interaction import ask_for_audio_selection
from ..user_interaction import ask_additional_packages_to_install
from ..user_interaction import ask_to_configure_network
from ..user_interaction import ask_for_a_timezone
from ..user_interaction import ask_for_superuser_account
from ..user_interaction import ask_for_additional_users
from ..user_interaction import select_language
@ -30,16 +32,20 @@ from ..user_interaction import select_profile
from ..user_interaction import select_archinstall_language
from ..translation import Translation
class Selector:
def __init__(
self,
description,
func=None,
display_func=None,
default=None,
enabled=False,
dependencies=[],
dependencies_not=[]
description :str,
func :Callable = None,
display_func :Callable = None,
default :Any = None,
enabled :bool = False,
dependencies :List = [],
dependencies_not :List = [],
exec_func :Callable = None,
preview_func :Callable = None,
mandatory :bool = False
):
"""
Create a new menu selection entry
@ -69,6 +75,17 @@ class Selector:
:param dependencies_not: These are the exclusive options; the menu item will only be
displayed if non of the entries in the list have been specified
:type dependencies_not: list
:param exec_func: A function with the name and the result of the selection as input parameter and which returns boolean.
Can be used for any action deemed necessary after selection. If it returns True, exits the menu loop, if False,
menu returns to the selection screen. If not specified it is assumed the return is False
:type exec_func: Callable
:param preview_func: A callable which invokws a preview screen (not implemented)
:type preview_func: Callable
:param mandatory: A boolean which determines that the field is mandatory, i.e. menu can not be exited if it is not set
:type mandatory: bool
"""
self._description = description
@ -76,26 +93,31 @@ class Selector:
self._display_func = display_func
self._current_selection = default
self.enabled = enabled
self.text = self.menu_text()
self._dependencies = dependencies
self._dependencies_not = dependencies_not
self.exec_func = exec_func
self.preview_func = preview_func
self.mandatory = mandatory
@property
def dependencies(self):
def dependencies(self) -> dict:
return self._dependencies
@property
def dependencies_not(self):
def dependencies_not(self) -> dict:
return self._dependencies_not
def set_enabled(self):
self.enabled = True
@property
def current_selection(self):
return self._current_selection
def update_description(self, description):
def set_enabled(self, status :bool = True):
self.enabled = status
def update_description(self, description :str):
self._description = description
self.text = self.menu_text()
def menu_text(self):
def menu_text(self) -> str:
current = ''
if self._display_func:
@ -105,35 +127,276 @@ class Selector:
current = str(self._current_selection)
if current:
padding = 35 - len(self._description)
padding = 35 - len(str(self._description))
current = ' ' * padding + f'SET: {current}'
return f'{self._description} {current}'
def set_current_selection(self, current):
def set_current_selection(self, current :str):
self._current_selection = current
self.text = self.menu_text()
def has_selection(self):
def has_selection(self) -> bool:
if self._current_selection is None:
return False
return True
def is_empty(self):
def get_selection(self) -> Any:
return self._current_selection
def is_empty(self) -> bool:
if self._current_selection is None:
return True
elif isinstance(self._current_selection, (str, list, dict)) and len(self._current_selection) == 0:
return True
return False
def is_enabled(self) -> bool:
return self.enabled
class GlobalMenu:
def __init__(self):
def is_mandatory(self) -> bool:
return self.mandatory
def set_mandatory(self, status :bool = True):
self.mandatory = status
if status and not self.is_enabled():
self.set_enabled(True)
class GeneralMenu:
def __init__(self, data_store :dict = None):
"""
Create a new selection menu.
:param data_store: Area (Dict) where the resulting data will be held. At least an entry for each option. Default area is self._data_store (not preset in the call, due to circular references
:type data_store: Dict
"""
self._translation = Translation.load_nationalization()
self.is_context_mgr = False
self._data_store = data_store if data_store is not None else {}
self._menu_options = {}
self._setup_selection_menu_options()
def __enter__(self, *args :Any, **kwargs :Any) -> GeneralMenu:
self.is_context_mgr = True
return self
def __exit__(self, *args :Any, **kwargs :Any) -> None:
# TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager
# TODO: skip processing when it comes from a planified exit
if len(args) >= 2 and args[1]:
log(args[1], level=logging.ERROR, fg='red')
print(" Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues")
raise args[1]
for key in self._menu_options:
sel = self._menu_options[key]
if key and key not in self._data_store:
self._data_store[key] = sel._current_selection
self.exit_callback()
def _setup_selection_menu_options(self):
""" Define the menu options.
Menu options can be defined here in a subclass or done per progam calling self.set_option()
"""
return
def pre_callback(self, selector_name):
""" will be called before each action in the menu """
return
def post_callback(self, selector_name :str, value :Any):
""" will be called after each action in the menu """
return True
def exit_callback(self):
""" will be called at the end of the processing of the menu """
return
def synch(self, selector_name :str, omit_if_set :bool = False,omit_if_disabled :bool = False):
""" loads menu options with data_store value """
arg = self._data_store.get(selector_name, None)
# don't display the menu option if it was defined already
if arg is not None and omit_if_set:
return
if not self.option(selector_name).is_enabled() and omit_if_disabled:
return
if arg is not None:
self._menu_options[selector_name].set_current_selection(arg)
def enable(self, selector_name :str, omit_if_set :bool = False , mandatory :bool = False):
""" activates menu options """
if self._menu_options.get(selector_name, None):
self._menu_options[selector_name].set_enabled(True)
if mandatory:
self._menu_options[selector_name].set_mandatory(True)
self.synch(selector_name,omit_if_set)
else:
print(f'No selector found: {selector_name}')
sys.exit(1)
def run(self):
""" Calls the Menu framework"""
# we synch all the options just in case
for item in self.list_options():
self.synch(item)
while True:
# Before continuing, set the preferred keyboard layout/language in the current terminal.
# This will just help the user with the next following questions.
self._set_kb_language()
enabled_menus = self._menus_to_enable()
menu_text = [m.text for m in enabled_menus.values()]
selection = Menu('Set/Modify the below options', menu_text, sort=False).run()
if selection:
selection = selection.strip()
if selection:
# if this calls returns false, we exit the menu. We allow for an callback for special processing on realeasing control
if not self._process_selection(selection):
break
if not self.is_context_mgr:
self.__exit__()
def _process_selection(self, selection :str) -> bool:
""" determines and executes the selection y
Can / Should be extended to handle specific selection issues
Returns true if the menu shall continue, False if it has ended
"""
# find the selected option in our option list
option = [[k, v] for k, v in self._menu_options.items() if v.text.strip() == selection]
if len(option) != 1:
raise ValueError(f'Selection not found: {selection}')
selector_name = option[0][0]
selector = option[0][1]
return self.exec_option(selector_name,selector)
def exec_option(self,selector_name :str, p_selector :Selector = None) -> bool:
""" processes the exection of a given menu entry
- pre process callback
- selection function
- post process callback
- exec action
returns True if the loop has to continue, false if the loop can be closed
"""
if not p_selector:
selector = self.option(selector_name)
else:
selector = p_selector
self.pre_callback(selector_name)
result = None
if selector.func:
result = selector.func()
self._menu_options[selector_name].set_current_selection(result)
self._data_store[selector_name] = result
exec_ret_val = selector.exec_func(selector_name,result) if selector.exec_func else False
self.post_callback(selector_name,result)
if exec_ret_val and self._check_mandatory_status():
return False
return True
""" old behaviour
# we allow for a callback after we get the result
self.post_callback(selector_name,result)
# we have a callback, by option, to determine if we can exit the menu. Only if ALL mandatory fields are written
if selector.exec_func:
if selector.exec_func(result) and self._check_mandatory_status():
return False
"""
return True
def _set_kb_language(self):
""" general for ArchInstall"""
# Before continuing, set the preferred keyboard layout/language in the current terminal.
# This will just help the user with the next following questions.
if self._data_store.get('keyboard-layout', None) and len(self._data_store['keyboard-layout']):
set_keyboard_language(self._data_store['keyboard-layout'])
def _verify_selection_enabled(self, selection_name :str) -> bool:
""" general """
if selection := self._menu_options.get(selection_name, None):
if not selection.enabled:
return False
if len(selection.dependencies) > 0:
for d in selection.dependencies:
if not self._verify_selection_enabled(d) or self._menu_options.get(d).is_empty():
return False
if len(selection.dependencies_not) > 0:
for d in selection.dependencies_not:
if not self._menu_options.get(d).is_empty():
return False
return True
raise ValueError(f'No selection found: {selection_name}')
def _menus_to_enable(self) -> dict:
""" general """
enabled_menus = {}
for name, selection in self._menu_options.items():
if self._verify_selection_enabled(name):
enabled_menus[name] = selection
return enabled_menus
def option(self,name :str) -> Selector:
# TODO check inexistent name
return self._menu_options[name]
def list_options(self) -> Iterator:
""" Iterator to retrieve the enabled menu option names
"""
for item in self._menu_options:
yield item
def list_enabled_options(self) -> Iterator:
""" Iterator to retrieve the enabled menu options at a given time.
The results are dynamic (if between calls to the iterator some elements -still not retrieved- are (de)activated
"""
for item in self._menu_options:
if item in self._menus_to_enable():
yield item
def set_option(self, name :str, selector :Selector):
self._menu_options[name] = selector
self.synch(name)
def _check_mandatory_status(self) -> bool:
for field in self._menu_options:
option = self._menu_options[field]
if option.is_mandatory() and not option.has_selection():
return False
return True
def set_mandatory(self, field :str, status :bool):
self.option(field).set_mandatory(status)
def mandatory_overview(self) -> [int, int]:
mandatory_fields = 0
mandatory_waiting = 0
for field in self._menu_options:
option = self._menu_options[field]
if option.is_mandatory():
mandatory_fields += 1
if not option.has_selection():
mandatory_waiting += 1
return mandatory_fields, mandatory_waiting
def _select_archinstall_language(self, default_lang):
language = select_archinstall_language(default_lang)
self._translation.activate(language)
return language
class GlobalMenu(GeneralMenu):
def __init__(self,data_store):
super().__init__(data_store=data_store)
def _setup_selection_menu_options(self):
self._menu_options['archinstall-language'] = \
Selector(
@ -168,8 +431,7 @@ class GlobalMenu:
self._menu_options['!encryption-password'] = \
Selector(
_('Set encryption password'),
lambda: get_password(prompt='Enter disk encryption password (leave blank for no encryption): '),
display_func=lambda x: self._secret(x) if x else 'None',
display_func=lambda x: secret(x) if x else 'None',
dependencies=['harddrives'])
self._menu_options['swap'] = \
Selector(
@ -181,12 +443,12 @@ class GlobalMenu:
_('Select bootloader'),
lambda: ask_for_bootloader(storage['arguments'].get('advanced', False)),)
self._menu_options['hostname'] = \
Selector('Specify hostname', lambda: ask_hostname())
Selector(_('Specify hostname'), lambda: ask_hostname())
self._menu_options['!root-password'] = \
Selector(
_('Set root password'),
lambda: self._set_root_password(),
display_func=lambda x: self._secret(x) if x else 'None')
display_func=lambda x: secret(x) if x else 'None')
self._menu_options['!superusers'] = \
Selector(
_('Specify superuser account'),
@ -222,10 +484,10 @@ class GlobalMenu:
Selector(
_('Configure network'),
lambda: ask_to_configure_network(),
display_func=lambda x: x if x else 'Not configured, unavailable unless setup manually',
display_func=lambda x: x if x else _('Not configured, unavailable unless setup manually'),
default={})
self._menu_options['timezone'] = \
Selector('Select timezone', lambda: ask_for_a_timezone())
Selector(_('Select timezone'), lambda: ask_for_a_timezone())
self._menu_options['ntp'] = \
Selector(
_('Set automatic time sync (NTP)'),
@ -234,8 +496,10 @@ class GlobalMenu:
self._menu_options['install'] = \
Selector(
self._install_text(),
exec_func=lambda n,v: True if self._missing_configs() == 0 else False,
enabled=True)
self._menu_options['abort'] = Selector('Abort', enabled=True)
self._menu_options['abort'] = Selector(_('Abort'), enabled=True)
def enable(self, selector_name, omit_if_set=False):
arg = storage['arguments'].get(selector_name, None)
@ -259,26 +523,29 @@ class GlobalMenu:
self._set_kb_language()
enabled_menus = self._menus_to_enable()
menu_text = [m.text for m in enabled_menus.values()]
selection = Menu('Set/Modify the below options', menu_text, sort=False).run()
menu_text = [m.menu_text() for m in enabled_menus.values()]
selection = Menu(_('Set/Modify the below options'), menu_text, sort=False).run()
if selection:
selection = selection.strip()
if 'Abort' in selection:
if str(_('Abort')) in selection:
exit(0)
elif 'Install' in selection:
elif str(_('Install')) in selection:
if self._missing_configs() == 0:
break
else:
self._process_selection(selection)
for key in self._menu_options:
sel = self._menu_options[key]
if key not in storage['arguments']:
storage['arguments'][key] = sel._current_selection
storage['arguments'][key] = sel.current_selection
self._post_processing()
def _process_selection(self, selection):
# find the selected option in our option list
option = [[k, v] for k, v in self._menu_options.items() if v.text.strip() == selection]
option = [[k, v] for k, v in self._menu_options.items() if v.menu_text().strip() == selection]
if len(option) != 1:
raise ValueError(f'Selection not found: {selection}')
@ -295,8 +562,11 @@ class GlobalMenu:
text = self._install_text()
self._menu_options.get('install').update_description(text)
def _post_processing(self):
if storage['arguments'].get('harddrives', None) and storage['arguments'].get('!encryption-password', None):
def post_callback(self,name :str = None ,result :Any = None):
self._update_install(name,result)
def exit_callback(self):
if self._data_store.get('harddrives', None) and self._data_store.get('!encryption-password', None):
# If no partitions was marked as encrypted, but a password was supplied and we have some disks to format..
# Then we need to identify which partitions to encrypt. This will default to / (root).
if len(list(encrypted_partitions(storage['arguments'].get('disk_layouts', [])))) == 0:
@ -306,7 +576,7 @@ class GlobalMenu:
def _install_text(self):
missing = self._missing_configs()
if missing > 0:
return f'Install ({missing} config(s) missing)'
return _('Install ({} config(s) missing)').format(missing)
return 'Install'
def _missing_configs(self):
@ -332,13 +602,8 @@ class GlobalMenu:
return missing
def _select_archinstall_language(self, default_lang):
language = select_archinstall_language(default_lang)
self._translation.activate(language)
return language
def _set_root_password(self):
prompt = 'Enter root password (leave blank to disable root & create superuser): '
prompt = str(_('Enter root password (leave blank to disable root): '))
password = get_password(prompt=prompt)
# TODO: Do we really wanna wipe the !superusers and !users if root password is set?
@ -368,11 +633,12 @@ class GlobalMenu:
storage['arguments']['disk_layouts'] = {}
if not harddrives:
prompt = 'You decided to skip harddrive selection\n'
prompt += f"and will use whatever drive-setup is mounted at {storage['MOUNT_POINT']} (experimental)\n"
prompt += "WARNING: Archinstall won't check the suitability of this setup\n"
prompt = _(
"You decided to skip harddrive selection\nand will use whatever drive-setup is mounted at {} (experimental)\n"
"WARNING: Archinstall won't check the suitability of this setup\n"
"Do you wish to continue?"
).format(storage['MOUNT_POINT'])
prompt += 'Do you wish to continue?'
choice = Menu(prompt, ['yes', 'no'], default_option='yes').run()
if choice == 'no':
@ -380,9 +646,6 @@ class GlobalMenu:
return harddrives
def _secret(self, x):
return '*' * len(x)
def _select_profile(self):
profile = select_profile()
@ -397,11 +660,11 @@ class GlobalMenu:
return profile
def _create_superuser_account(self):
superuser = ask_for_superuser_account('Create a required super-user with sudo privileges: ', forced=True)
superuser = ask_for_superuser_account(str(_('Create a required super-user with sudo privileges: ')), forced=True)
return superuser
def _create_user_account(self):
users, superusers = ask_for_additional_users('Enter a username to create an additional user: ')
users, superusers = ask_for_additional_users(str(_('Enter a username to create an additional user (leave blank to skip): ')))
storage['arguments']['!superusers'] = {**storage['arguments'].get('!superusers', {}), **superusers}
return users
@ -431,11 +694,11 @@ class GlobalMenu:
raise ValueError(f'No selection found: {selection_name}')
def _menus_to_enable(self):
def _menus_to_enable(self) -> Dict[str, Selector]:
enabled_menus = {}
for name, selection in self._menu_options.items():
if self._verify_selection_enabled(name):
enabled_menus[name] = selection
return enabled_menus
return enabled_menus

View File

@ -86,10 +86,10 @@ def list_profiles(
try:
profile_list = json.loads(grab_url_data(profiles_url))
except urllib.error.HTTPError as err:
print(f'Error: Listing profiles on URL "{profiles_url}" resulted in:', err)
print(_('Error: Listing profiles on URL "{}" resulted in:').format(profiles_url), err)
return cache
except json.decoder.JSONDecodeError as err:
print(f'Error: Could not decode "{profiles_url}" result as JSON:', err)
print(_('Error: Could not decode "{}" result as JSON:').format(profiles_url), err)
return cache
for profile in profile_list:

View File

@ -28,7 +28,7 @@ class Languages:
class DeferredTranslation:
def __init__(self, message):
def __init__(self, message: str):
self.message = message
def __len__(self) -> int:
@ -40,6 +40,15 @@ class DeferredTranslation:
return self.message
return translate(self.message)
def __lt__(self, other) -> bool:
return self.message < other
def __gt__(self, other) -> bool:
return self.message > other
def format(self, *args) -> str:
return self.message.format(*args)
@classmethod
def install(cls):
import builtins
@ -48,8 +57,6 @@ class DeferredTranslation:
class Translation:
def __init__(self, locales_dir):
DeferredTranslation.install()
self._languages = {}
for name in self.get_all_names():

View File

@ -96,7 +96,10 @@ def do_countdown() -> bool:
return True
def get_password(prompt :str = "Enter a password: ") -> Optional[str]:
def get_password(prompt :str = '') -> Optional[str]:
if not prompt:
prompt = _("Enter a password: ")
while passwd := getpass.getpass(prompt):
passwd_verification = getpass.getpass(prompt=_('And one more time for verification: '))
if passwd != passwd_verification:
@ -275,8 +278,8 @@ def ask_for_swap():
def ask_ntp() -> bool:
prompt = _('Would you like to use automatic time synchronization (NTP) with the default time servers?')
prompt += _('Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki')
prompt = str(_('Would you like to use automatic time synchronization (NTP) with the default time servers?\n'))
prompt += str(_('Hardware time and other post-configuration steps might be required in order for NTP to work.\nFor more information, please check the Arch wiki'))
choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='yes').run()
return False if choice == 'no' else True
@ -286,7 +289,7 @@ def ask_hostname():
return hostname
def ask_for_superuser_account(prompt :str = '', forced :bool = False) -> Dict[str, Dict[str, str]]:
def ask_for_superuser_account(prompt: str = '', forced :bool = False) -> Dict[str, Dict[str, str]]:
prompt = prompt if prompt else _('Username for required superuser with sudo privileges: ')
while 1:
new_user = input(prompt).strip(' ')
@ -301,7 +304,7 @@ def ask_for_superuser_account(prompt :str = '', forced :bool = False) -> Dict[st
elif not check_for_correct_username(new_user):
continue
prompt = _('Password for user "{}"').format(new_user)
prompt = str(_('Password for user "{}": ').format(new_user))
password = get_password(prompt=prompt)
return {new_user: {"!password": password}}
@ -318,11 +321,14 @@ def ask_for_additional_users(prompt :str = '') -> tuple[dict[str, dict[str, str
if not check_for_correct_username(new_user):
continue
prompt = _('Password for user "{}"').format(new_user)
password = get_password(prompt=prompt)
password = get_password(prompt=str(_('Password for user "{}": ').format(new_user)))
prompt = _('Should this user be a superuser (sudoer)?')
choice = Menu(prompt, ['yes', 'no'], skip=False, default_option='no').run()
choice = Menu(
str(_('Should this user be a superuser (sudoer)?')),
['yes', 'no'],
skip=False,
default_option='no'
).run()
if choice == 'yes':
superusers[new_user] = {"!password": password}
@ -345,10 +351,6 @@ def ask_for_a_timezone() -> str:
return selected_tz
def ask_for_a_timezone() -> str:
# compatibility with existing code
return ask_timezone()
def ask_for_bootloader(advanced_options :bool = False) -> str:
bootloader = "systemd-bootctl" if has_uefi() else "grub-install"
if has_uefi():
@ -402,7 +404,7 @@ def ask_additional_packages_to_install(packages :List[str] = None) -> List[str]:
if len(packages):
# Verify packages that were given
try:
log("Verifying that additional packages exist (this might take a few seconds)")
print(_("Verifying that additional packages exist (this might take a few seconds)"))
validate_package_list(packages)
break
except RequirementError as e:
@ -590,21 +592,28 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
# Test code: [part.__dump__() for part in block_device.partitions.values()]
# TODO: Squeeze in BTRFS subvolumes here
new_partition = _('Create a new partition')
suggest_partition_layout = _('Suggest partition layout')
delete_partition = _('Delete a partition')
delete_all_partitions = _('Clear/Delete all partitions')
assign_mount_point = _('Assign mount-point for a partition')
mark_formatted = _('Mark/Unmark a partition to be formatted (wipes data)')
mark_encrypted = _('Mark/Unmark a partition as encrypted')
mark_bootable = _('Mark/Unmark a partition as bootable (automatic for /boot)')
set_filesystem_partition = _('Set desired filesystem for a partition')
while True:
modes = [
"Create a new partition",
f"Suggest partition layout for {block_device}"
]
modes = [new_partition, suggest_partition_layout]
if len(block_device_struct['partitions']):
modes += [
"Delete a partition",
"Clear/Delete all partitions",
"Assign mount-point for a partition",
"Mark/Unmark a partition to be formatted (wipes data)",
"Mark/Unmark a partition as encrypted",
"Mark/Unmark a partition as bootable (automatic for /boot)",
"Set desired filesystem for a partition",
delete_partition,
delete_all_partitions,
assign_mount_point,
mark_formatted,
mark_encrypted,
mark_bootable,
set_filesystem_partition,
]
title = _('Select what to do with\n{}').format(block_device)
@ -618,7 +627,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
if not task:
break
if task == 'Create a new partition':
if task == new_partition:
# if partition_type == 'gpt':
# # https://www.gnu.org/software/parted/manual/html_node/mkpart.html
# # https://www.gnu.org/software/parted/manual/html_node/mklabel.html
@ -635,7 +644,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
else:
end_suggested = '100%'
prompt = _('Enter the end sector of the partition (percentage or block number, ex: {}): "').format(end_suggested)
prompt = _('Enter the end sector of the partition (percentage or block number, ex: {}): ').format(end_suggested)
end = input(prompt).strip()
if not end.strip():
@ -659,7 +668,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
else:
log(f"Invalid start ({valid_parted_position(start)}) or end ({valid_parted_position(end)}) for this partition. Ignoring this partition creation.", fg="red")
continue
elif task[:len("Suggest partition layout")] == "Suggest partition layout":
elif task == suggest_partition_layout:
if len(block_device_struct["partitions"]):
prompt = _('{} contains queued partitions, this will remove those, are you sure?').format(block_device)
choice = Menu(prompt, ['yes', 'no'], default_option='no').run()
@ -673,15 +682,15 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
else:
current_layout = current_partition_layout(block_device_struct['partitions'], with_idx=True)
if task == "Delete a partition":
if task == delete_partition:
title = _('{}\n\nSelect by index which partitions to delete').format(current_layout)
to_delete = select_partition(title, block_device_struct["partitions"], multiple=True)
if to_delete:
block_device_struct['partitions'] = [p for idx, p in enumerate(block_device_struct['partitions']) if idx not in to_delete]
elif task == "Clear/Delete all partitions":
elif task == delete_all_partitions:
block_device_struct["partitions"] = []
elif task == "Assign mount-point for a partition":
elif task == assign_mount_point:
title = _('{}\n\nSelect by index which partition to mount where').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
@ -697,7 +706,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
else:
del(block_device_struct["partitions"][partition]['mountpoint'])
elif task == "Mark/Unmark a partition to be formatted (wipes data)":
elif task == mark_formatted:
title = _('{}\n\nSelect which partition to mask for formatting').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
@ -716,7 +725,7 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
# Negate the current wipe marking
block_device_struct["partitions"][partition]['wipe'] = not block_device_struct["partitions"][partition].get('wipe', False)
elif task == "Mark/Unmark a partition as encrypted":
elif task == mark_encrypted:
title = _('{}\n\nSelect which partition to mark as encrypted').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
@ -724,14 +733,14 @@ def manage_new_and_existing_partitions(block_device :BlockDevice) -> Dict[str, A
# Negate the current encryption marking
block_device_struct["partitions"][partition]['encrypted'] = not block_device_struct["partitions"][partition].get('encrypted', False)
elif task == "Mark/Unmark a partition as bootable (automatic for /boot)":
elif task == mark_bootable:
title = _('{}\n\nSelect which partition to mark as bootable').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
if partition is not None:
block_device_struct["partitions"][partition]['boot'] = not block_device_struct["partitions"][partition].get('boot', False)
elif task == "Set desired filesystem for a partition":
elif task == set_filesystem_partition:
title = _('{}\n\nSelect which partition to set a filesystem on').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
@ -765,10 +774,11 @@ def select_archinstall_language(default='English'):
def select_disk_layout(block_devices :list, advanced_options=False) -> Dict[str, Any]:
wipe_mode = _('Wipe all selected drives and use a best-effort default partition layout')
custome_mode = _('Select what to do with each individual drive (followed by partition usage)')
wipe_mode = str(_('Wipe all selected drives and use a best-effort default partition layout'))
custome_mode = str(_('Select what to do with each individual drive (followed by partition usage)'))
modes = [wipe_mode, custome_mode]
print(modes)
mode = Menu(_('Select what you wish to do with the selected block devices'), modes, skip=False).run()
if mode == wipe_mode:
@ -805,7 +815,7 @@ def select_disk(dict_o_disks :Dict[str, BlockDevice]) -> BlockDevice:
raise DiskError('select_disk() requires a non-empty dictionary of disks to select from.')
def select_profile() -> Optional[str]:
def select_profile() -> Optional[Profile]:
"""
# Asks the user to select a profile from the available profiles.
#

View File

@ -20,7 +20,8 @@ msgstr ""
The `msgid` is the identifier of the string in the code as well as the default text to be displayed, meaning that if no
translation is provided for a language then this is the text that is going to be shown.
To provide a translation for the language, simply write the translation in the `msgstr` part
To perform translations for a language this file can be edited manually or the neat `poedit` can be used (https://poedit.net/).
If editing the file manually, write the translation in the `msgstr` part
```
#: lib/user_interaction.py:82
@ -28,6 +29,5 @@ msgid "Do you really want to abort?"
msgstr "Wollen sie wirklich abbrechen?"
```
After that run the script once more `./locales_generator.sh` and it will auto-generate the `base.mo` file with the included translations.
After the translations have been written, run the script once more `./locales_generator.sh` and it will auto-generate the `base.mo` file with the included translations.
After that you're all ready to go and enjoy Archinstall in the new language :)

View File

@ -1,354 +1,621 @@
#: lib/user_interaction.py:82 lib/user_interaction.py:82
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/installer.py:144 lib/installer.py:144
msgid "[!] A log file has been created here: {} {}"
msgstr ""
#: lib/installer.py:145 lib/installer.py:145
msgid ""
" Please submit this issue (and file) to https://github.com/archlinux/"
"archinstall/issues"
msgstr ""
#: lib/user_interaction.py:83 lib/user_interaction.py:83
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100 lib/user_interaction.py:100
#: lib/user_interaction.py:101 lib/user_interaction.py:104
#: lib/user_interaction.py:104
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271 lib/user_interaction.py:271
#: lib/user_interaction.py:272 lib/user_interaction.py:275
#: lib/user_interaction.py:275
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277 lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278 lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284 lib/user_interaction.py:284
#: lib/user_interaction.py:285 lib/user_interaction.py:288
#: lib/user_interaction.py:288
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289 lib/user_interaction.py:289
#: lib/user_interaction.py:290 lib/user_interaction.py:293
#: lib/user_interaction.py:293
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309 lib/user_interaction.py:309
#: lib/user_interaction.py:310 lib/user_interaction.py:313
#: lib/user_interaction.py:313
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323 lib/user_interaction.py:323
#: lib/user_interaction.py:324 lib/user_interaction.py:327
#: lib/user_interaction.py:327
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339 lib/user_interaction.py:339
#: lib/user_interaction.py:340 lib/user_interaction.py:343
#: lib/user_interaction.py:346 lib/user_interaction.py:346
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353 lib/user_interaction.py:353
#: lib/user_interaction.py:354 lib/user_interaction.py:357
#: lib/user_interaction.py:360 lib/user_interaction.py:360
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363 lib/user_interaction.py:363
#: lib/user_interaction.py:364 lib/user_interaction.py:367
#: lib/user_interaction.py:370 lib/user_interaction.py:370
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379 lib/user_interaction.py:379
#: lib/user_interaction.py:380 lib/user_interaction.py:383
#: lib/user_interaction.py:386 lib/user_interaction.py:386
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390 lib/user_interaction.py:390
#: lib/user_interaction.py:391 lib/user_interaction.py:394
#: lib/user_interaction.py:397 lib/user_interaction.py:397
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391 lib/user_interaction.py:391
#: lib/user_interaction.py:392 lib/user_interaction.py:395
#: lib/user_interaction.py:398 lib/user_interaction.py:398
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395 lib/user_interaction.py:395
#: lib/user_interaction.py:396 lib/user_interaction.py:399
#: lib/user_interaction.py:402 lib/user_interaction.py:402
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418 lib/user_interaction.py:418
#: lib/user_interaction.py:419 lib/user_interaction.py:422
#: lib/user_interaction.py:425 lib/user_interaction.py:425
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419 lib/user_interaction.py:419
#: lib/user_interaction.py:420 lib/user_interaction.py:423
#: lib/user_interaction.py:426 lib/user_interaction.py:426
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427 lib/user_interaction.py:427
#: lib/user_interaction.py:428 lib/user_interaction.py:431
#: lib/user_interaction.py:434 lib/user_interaction.py:434
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440 lib/user_interaction.py:440
#: lib/user_interaction.py:441 lib/user_interaction.py:444
#: lib/user_interaction.py:447 lib/user_interaction.py:447
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445 lib/user_interaction.py:445
#: lib/user_interaction.py:446 lib/user_interaction.py:449
#: lib/user_interaction.py:452 lib/user_interaction.py:452
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460 lib/user_interaction.py:460
#: lib/user_interaction.py:461 lib/user_interaction.py:464
#: lib/user_interaction.py:467 lib/user_interaction.py:467
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475 lib/user_interaction.py:475
#: lib/user_interaction.py:476 lib/user_interaction.py:479
#: lib/user_interaction.py:482 lib/user_interaction.py:482
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509 lib/user_interaction.py:509
#: lib/user_interaction.py:510 lib/user_interaction.py:513
#: lib/user_interaction.py:516 lib/user_interaction.py:516
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555 lib/user_interaction.py:555
#: lib/user_interaction.py:556 lib/user_interaction.py:559
#: lib/user_interaction.py:562 lib/user_interaction.py:562
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606 lib/user_interaction.py:606
#: lib/user_interaction.py:607 lib/user_interaction.py:614
#: lib/user_interaction.py:617 lib/user_interaction.py:620
#: lib/user_interaction.py:620
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
#: lib/user_interaction.py:623 lib/user_interaction.py:708
#: lib/user_interaction.py:624 lib/user_interaction.py:709
#: lib/user_interaction.py:631 lib/user_interaction.py:716
#: lib/user_interaction.py:634 lib/user_interaction.py:719
#: lib/user_interaction.py:637 lib/user_interaction.py:722
#: lib/user_interaction.py:637 lib/user_interaction.py:722
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625 lib/user_interaction.py:625
#: lib/user_interaction.py:626 lib/user_interaction.py:633
#: lib/user_interaction.py:636 lib/user_interaction.py:639
#: lib/user_interaction.py:639
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634 lib/user_interaction.py:634
#: lib/user_interaction.py:635 lib/user_interaction.py:642
#: lib/user_interaction.py:645 lib/user_interaction.py:648
#: lib/user_interaction.py:648
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660 lib/user_interaction.py:660
#: lib/user_interaction.py:661 lib/user_interaction.py:668
#: lib/user_interaction.py:671 lib/user_interaction.py:674
#: lib/user_interaction.py:674
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673 lib/user_interaction.py:673
#: lib/user_interaction.py:674 lib/user_interaction.py:681
#: lib/user_interaction.py:684 lib/user_interaction.py:687
#: lib/user_interaction.py:687
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681 lib/user_interaction.py:681
#: lib/user_interaction.py:682 lib/user_interaction.py:689
#: lib/user_interaction.py:692 lib/user_interaction.py:695
#: lib/user_interaction.py:695
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685 lib/user_interaction.py:685
#: lib/user_interaction.py:686 lib/user_interaction.py:693
#: lib/user_interaction.py:696 lib/user_interaction.py:699
#: lib/user_interaction.py:699
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686 lib/user_interaction.py:686
#: lib/user_interaction.py:687 lib/user_interaction.py:694
#: lib/user_interaction.py:697 lib/user_interaction.py:700
#: lib/user_interaction.py:700
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697 lib/user_interaction.py:697
#: lib/user_interaction.py:698 lib/user_interaction.py:705
#: lib/user_interaction.py:708 lib/user_interaction.py:711
#: lib/user_interaction.py:711
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716 lib/user_interaction.py:716
#: lib/user_interaction.py:717 lib/user_interaction.py:724
#: lib/user_interaction.py:727 lib/user_interaction.py:730
#: lib/user_interaction.py:730
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724 lib/user_interaction.py:724
#: lib/user_interaction.py:725 lib/user_interaction.py:732
#: lib/user_interaction.py:735 lib/user_interaction.py:738
#: lib/user_interaction.py:738
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731 lib/user_interaction.py:731
#: lib/user_interaction.py:732 lib/user_interaction.py:739
#: lib/user_interaction.py:742 lib/user_interaction.py:745
#: lib/user_interaction.py:745
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738 lib/user_interaction.py:738
#: lib/user_interaction.py:739 lib/user_interaction.py:746
#: lib/user_interaction.py:749 lib/user_interaction.py:752
#: lib/user_interaction.py:752
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141
#: lib/user_interaction.py:767 lib/menu/selection_menu.py:139
#: lib/menu/selection_menu.py:143 lib/user_interaction.py:770
#: lib/user_interaction.py:773 lib/user_interaction.py:773
#: lib/menu/selection_menu.py:143
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764 lib/user_interaction.py:764
#: lib/user_interaction.py:765 lib/user_interaction.py:772
#: lib/user_interaction.py:775 lib/user_interaction.py:778
#: lib/user_interaction.py:778
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765 lib/user_interaction.py:765
#: lib/user_interaction.py:766 lib/user_interaction.py:773
#: lib/user_interaction.py:776 lib/user_interaction.py:779
#: lib/user_interaction.py:779
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768 lib/user_interaction.py:768
#: lib/user_interaction.py:769 lib/user_interaction.py:770
#: lib/user_interaction.py:777 lib/user_interaction.py:780
#: lib/user_interaction.py:783 lib/user_interaction.py:783
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821 lib/user_interaction.py:821
#: lib/user_interaction.py:822 lib/user_interaction.py:823
#: lib/user_interaction.py:830 lib/user_interaction.py:833
#: lib/user_interaction.py:836 lib/user_interaction.py:836
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846 lib/user_interaction.py:846
#: lib/user_interaction.py:846 lib/user_interaction.py:847
#: lib/user_interaction.py:854 lib/user_interaction.py:857
#: lib/user_interaction.py:860 lib/user_interaction.py:860
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861 lib/user_interaction.py:861
#: lib/user_interaction.py:861 lib/user_interaction.py:862
#: lib/user_interaction.py:869 lib/user_interaction.py:872
#: lib/user_interaction.py:875 lib/user_interaction.py:875
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883 lib/user_interaction.py:883
#: lib/user_interaction.py:883 lib/user_interaction.py:884
#: lib/user_interaction.py:891 lib/user_interaction.py:894
#: lib/user_interaction.py:897 lib/user_interaction.py:897
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910 lib/user_interaction.py:910
#: lib/user_interaction.py:910 lib/user_interaction.py:911
#: lib/user_interaction.py:918 lib/user_interaction.py:921
#: lib/user_interaction.py:924 lib/user_interaction.py:924
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912 lib/user_interaction.py:912
#: lib/user_interaction.py:912 lib/user_interaction.py:913
#: lib/user_interaction.py:920 lib/user_interaction.py:923
#: lib/user_interaction.py:926 lib/user_interaction.py:926
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914 lib/user_interaction.py:914
#: lib/user_interaction.py:914 lib/user_interaction.py:915
#: lib/user_interaction.py:922 lib/user_interaction.py:925
#: lib/user_interaction.py:928 lib/user_interaction.py:928
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917 lib/user_interaction.py:917
#: lib/user_interaction.py:917 lib/user_interaction.py:918
#: lib/user_interaction.py:925 lib/user_interaction.py:928
#: lib/user_interaction.py:931 lib/user_interaction.py:931
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921 lib/user_interaction.py:921
#: lib/user_interaction.py:921 lib/user_interaction.py:922
#: lib/user_interaction.py:929 lib/user_interaction.py:932
#: lib/user_interaction.py:935 lib/user_interaction.py:935
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940 lib/user_interaction.py:940
#: lib/user_interaction.py:940 lib/user_interaction.py:941
#: lib/user_interaction.py:948 lib/user_interaction.py:951
#: lib/user_interaction.py:954 lib/user_interaction.py:954
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954 lib/user_interaction.py:954
#: lib/user_interaction.py:954 lib/user_interaction.py:955
#: lib/user_interaction.py:962 lib/user_interaction.py:965
#: lib/user_interaction.py:968 lib/user_interaction.py:968
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968 lib/user_interaction.py:968
#: lib/user_interaction.py:968 lib/user_interaction.py:969
#: lib/user_interaction.py:976 lib/user_interaction.py:979
#: lib/user_interaction.py:982 lib/user_interaction.py:982
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009 lib/user_interaction.py:1009
#: lib/user_interaction.py:1009 lib/user_interaction.py:1010
#: lib/user_interaction.py:1017 lib/user_interaction.py:1020
#: lib/user_interaction.py:1023 lib/user_interaction.py:1023
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050 lib/user_interaction.py:1050
#: lib/user_interaction.py:1050 lib/user_interaction.py:1051
#: lib/user_interaction.py:1058 lib/user_interaction.py:1061
#: lib/user_interaction.py:1064 lib/user_interaction.py:1064
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122 lib/menu/selection_menu.py:122
#: lib/disk/filesystem.py:86 lib/disk/filesystem.py:86
msgid "Adding partition...."
msgstr ""
#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141
#: lib/disk/filesystem.py:141
msgid ""
"You need to enter a valid fs-type in order to continue. See `man parted` for "
"valid fs-type's."
msgstr ""
#: lib/profiles.py:89 lib/profiles.py:89
msgid "Error: Listing profiles on URL \"{}\" resulted in:"
msgstr ""
#: lib/profiles.py:92 lib/profiles.py:92
msgid "Error: Could not decode \"{}\" result as JSON:"
msgstr ""
#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144
#: lib/menu/selection_menu.py:148 lib/menu/selection_menu.py:148
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125 lib/menu/selection_menu.py:125
#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147
#: lib/menu/selection_menu.py:151 lib/menu/selection_menu.py:151
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130 lib/menu/selection_menu.py:130
#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152
#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:156
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132 lib/menu/selection_menu.py:132
#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154
#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:158
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135 lib/menu/selection_menu.py:135
#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157
#: lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:161
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:139
#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161
#: lib/menu/selection_menu.py:165 lib/menu/selection_menu.py:165
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:147
#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169
#: lib/menu/selection_menu.py:173 lib/menu/selection_menu.py:173
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153 lib/menu/selection_menu.py:153
#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175
#: lib/menu/selection_menu.py:179 lib/menu/selection_menu.py:179
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158 lib/menu/selection_menu.py:158
#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180
#: lib/menu/selection_menu.py:184 lib/menu/selection_menu.py:184
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164 lib/menu/selection_menu.py:164
#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186
#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:190
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:169
#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191
#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:195
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:175
#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197
#: lib/menu/selection_menu.py:201 lib/menu/selection_menu.py:201
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181 lib/menu/selection_menu.py:181
#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203
#: lib/menu/selection_menu.py:207 lib/menu/selection_menu.py:207
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:186
#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208
#: lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:212
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190 lib/menu/selection_menu.py:190
#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212
#: lib/menu/selection_menu.py:216 lib/menu/selection_menu.py:216
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195 lib/menu/selection_menu.py:195
#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217
#: lib/menu/selection_menu.py:221 lib/menu/selection_menu.py:221
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200 lib/menu/selection_menu.py:200
#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222
#: lib/menu/selection_menu.py:226 lib/menu/selection_menu.py:226
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:208
#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230
#: lib/menu/selection_menu.py:234 lib/menu/selection_menu.py:234
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308
#: lib/menu/selection_menu.py:315 lib/menu/selection_menu.py:315
msgid "Install ({} config(s) missing)"
msgstr ""
#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371
#: lib/menu/selection_menu.py:378 lib/menu/selection_menu.py:378
msgid ""
"You decided to skip harddrive selection\n"
"and will use whatever drive-setup is mounted at {} (experimental)\n"
"WARNING: Archinstall won't check the suitability of this setup\n"
"Do you wish to continue?"
msgstr ""
#: lib/disk/filesystem.py:97 lib/disk/filesystem.py:97
msgid "Re-using partition instance: {}"
msgstr ""
#: lib/user_interaction.py:590 lib/user_interaction.py:593
#: lib/user_interaction.py:596 lib/user_interaction.py:596
msgid "Create a new partition"
msgstr ""
#: lib/user_interaction.py:592 lib/user_interaction.py:595
#: lib/user_interaction.py:598 lib/user_interaction.py:598
msgid "Delete a partition"
msgstr ""
#: lib/user_interaction.py:593 lib/user_interaction.py:596
#: lib/user_interaction.py:599 lib/user_interaction.py:599
msgid "Clear/Delete all partitions"
msgstr ""
#: lib/user_interaction.py:594 lib/user_interaction.py:597
#: lib/user_interaction.py:600 lib/user_interaction.py:600
msgid "Assign mount-point for a partition"
msgstr ""
#: lib/user_interaction.py:595 lib/user_interaction.py:598
#: lib/user_interaction.py:601 lib/user_interaction.py:601
msgid "Mark/Unmark a partition to be formatted (wipes data)"
msgstr ""
#: lib/user_interaction.py:596 lib/user_interaction.py:599
#: lib/user_interaction.py:602 lib/user_interaction.py:602
msgid "Mark/Unmark a partition as encrypted"
msgstr ""
#: lib/user_interaction.py:597 lib/user_interaction.py:600
#: lib/user_interaction.py:603 lib/user_interaction.py:603
msgid "Mark/Unmark a partition as bootable (automatic for /boot)"
msgstr ""
#: lib/user_interaction.py:598 lib/user_interaction.py:601
#: lib/user_interaction.py:604 lib/user_interaction.py:604
msgid "Set desired filesystem for a partition"
msgstr ""
#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237
#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270
#: lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270
msgid "Abort"
msgstr ""
#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187
#: lib/menu/selection_menu.py:187
msgid "Specify hostname"
msgstr ""
#: lib/menu/selection_menu.py:228 lib/menu/selection_menu.py:228
msgid "Not configured, unavailable unless setup manually"
msgstr ""
#: lib/menu/selection_menu.py:231 lib/menu/selection_menu.py:231
msgid "Select timezone"
msgstr ""
#: lib/menu/selection_menu.py:266 lib/menu/selection_menu.py:266
msgid "Set/Modify the below options"
msgstr ""
#: lib/menu/selection_menu.py:272 lib/menu/selection_menu.py:272
msgid "Install"
msgstr ""
#: lib/menu/menu.py:68 lib/menu/menu.py:68
msgid ""
"Use ESC to skip\n"
"\n"
msgstr ""
#: lib/user_interaction.py:591 lib/user_interaction.py:594
#: lib/user_interaction.py:597 lib/user_interaction.py:597
msgid "Suggest partition layout"
msgstr ""
#: lib/user_interaction.py:101 lib/user_interaction.py:101
msgid "Enter a password: "
msgstr ""
#: lib/disk/filesystem.py:117 lib/disk/filesystem.py:117
msgid "Enter a encryption password for {}"
msgstr ""
#: lib/menu/selection_menu.py:174 lib/menu/selection_menu.py:174
msgid "Enter disk encryption password (leave blank for no encryption): "
msgstr ""
#: lib/menu/selection_menu.py:407 lib/menu/selection_menu.py:407
msgid "Create a required super-user with sudo privileges: "
msgstr ""
#: lib/menu/selection_menu.py:347 lib/menu/selection_menu.py:347
msgid "Enter root password (leave blank to disable root): "
msgstr ""
#: lib/user_interaction.py:307 lib/user_interaction.py:324
#: lib/user_interaction.py:307 lib/user_interaction.py:324
msgid "Password for user \"{}\": "
msgstr ""
#: lib/user_interaction.py:405 lib/user_interaction.py:408
#: lib/user_interaction.py:408
msgid ""
"Verifying that additional packages exist (this might take a few seconds)"
msgstr ""
#: lib/user_interaction.py:281 lib/user_interaction.py:281
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?\n"
msgstr ""
#: lib/user_interaction.py:282 lib/user_interaction.py:282
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work.\n"
"For more information, please check the Arch wiki"
msgstr ""
#: lib/menu/selection_menu.py:411 lib/menu/selection_menu.py:411
msgid "Enter a username to create an additional user (leave blank to skip): "
msgstr ""

View File

@ -1,351 +1,506 @@
#: lib/user_interaction.py:82
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
#: lib/installer.py:144
msgid "[!] A log file has been created here: {} {}"
msgstr "[!] Eine Logdatei wurde erstellt: {} {}"
#: lib/installer.py:145
msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues"
msgstr "Bitte melden sie das Problem mit der erstellten Datei auf https://github.com/archlinux/archinstall/issues"
#: lib/user_interaction.py:83
msgid "Do you really want to abort?"
msgstr ""
msgstr "Wollen Sie wirklich abbrechen?"
#: lib/user_interaction.py:100
#: lib/user_interaction.py:101 lib/user_interaction.py:104
msgid "And one more time for verification: "
msgstr ""
msgstr "Und nocheinmal zur Besätigung: "
#: lib/user_interaction.py:271
#: lib/user_interaction.py:272 lib/user_interaction.py:275
msgid "Would you like to use swap on zram?"
msgstr ""
msgstr "Möchten Sie swap mit zram verwenden?"
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
#: lib/user_interaction.py:285 lib/user_interaction.py:288
msgid "Desired hostname for the installation: "
msgstr ""
msgstr "Gewnüschter Hostname für die Installation: "
#: lib/user_interaction.py:289
#: lib/user_interaction.py:290 lib/user_interaction.py:293
msgid "Username for required superuser with sudo privileges: "
msgstr ""
msgstr "Benutzername für den erforderlichen superuser mit sudo Rechten: "
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
#: lib/user_interaction.py:310 lib/user_interaction.py:313
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
msgstr "Geben Sie weitere Benutzernamen ein die installiert werden sollen (leer lassen für keine weiteren Benutzer): "
#: lib/user_interaction.py:323
#: lib/user_interaction.py:324 lib/user_interaction.py:327
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
msgstr "Soll dieser Benutzer ein superuser sein (sudoer)?"
#: lib/user_interaction.py:339
#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346
msgid "Select a timezone"
msgstr ""
msgstr "Bitte wählen Sie eine Zeitzone aus"
#: lib/user_interaction.py:353
#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
msgstr "Möchten Sie GRUB als bootloader anstelle von system-boot verwenden?"
#: lib/user_interaction.py:363
#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370
msgid "Choose a bootloader"
msgstr ""
msgstr "Bitte wählen Sie einen bootloader aus"
#: lib/user_interaction.py:379
#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386
msgid "Choose an audio server"
msgstr ""
msgstr "Bitte wählen Sie einen Audio server aus"
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397
msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed."
msgstr "Nur die Packete base, base-devel, linux, linux-firmware, efibootmgr und optionale Profilpackete werden installiert"
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398
msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt."
msgstr "Wenn Sie einen Webbrowser, z.B. Firefox oder Chromium, installieren möchten, können Sie diese nun eingeben."
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402
msgid "Write additional packages to install (space separated, leave blank to skip): "
msgstr "Schreiben Sie zusätzliche Packete die installiert werden sollen mit einem Leerzeichen getrennt (zum Überspringen leer lassen): "
#: lib/user_interaction.py:418
#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425
msgid "Copy ISO network configuration to installation"
msgstr ""
msgstr "ISO netzwerk Einstellungen in die Installation kopieren"
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426
msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)"
msgstr "NetworkManager benutzen (notwendig um Internet auf graphische Weise in GNOME und KDE einzustellen)"
#: lib/user_interaction.py:427
#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434
msgid "Select one network interface to configure"
msgstr ""
msgstr "Bitte wählen Sie ein netzwerk zur Konfiguration aus"
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447
msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr "Bitte wählen Sie einen Modus zur Konfiguration von \"{}\" aus oder Überspringen um mit dem voreingestellten Modus \"{}\" fortzufahren"
#: lib/user_interaction.py:445
#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
msgstr "Bitte geben Sie eine IP Adresse und ein Subnet für {} ein (z.B. 192.168.0.5/24)"
#: lib/user_interaction.py:460
#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
msgstr "Bitte geben Sie eine gateway (router) IP Adresse ein (leer lassen für kein Adresse): "
#: lib/user_interaction.py:475
#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
msgstr "Bitte geben Sie die DNS server ein (mit Leerzeichen getrennt oder leer lassen für keinen server): "
#: lib/user_interaction.py:509
#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516
msgid "Select which filesystem your main partition should use"
msgstr ""
msgstr "Bitte wählen Sie ein Dateisystem aus, welches für die Hauptpartition verwendet werden soll"
#: lib/user_interaction.py:555
#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562
msgid "Current partition layout"
msgstr ""
msgstr "Momentanes Partitionslayout"
#: lib/user_interaction.py:606
#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
"Bitte wählen Sie eine Aktion aus für\n"
"{}"
#: lib/user_interaction.py:623 lib/user_interaction.py:708
#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722
msgid "Enter a desired filesystem type for the partition"
msgstr ""
msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus"
#: lib/user_interaction.py:625
#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
msgstr "Bitte geben Sie den start Sektor ein (in Prozent oder Blocknummer, default: {}): "
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648
msgid "Enter the end sector of the partition (percentage or block number, ex: {}): "
msgstr "Bitte geben Sie den end Sektor ein (in Prozent oder Blocknummer, default: {}): "
#: lib/user_interaction.py:660
#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
msgstr "{} enthält Partitionen in der Warteschlange, dies werden damit entfernt, sind sie sicher?"
#: lib/user_interaction.py:673
#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
"{}\n"
"\n"
"Wählen sie anhand vom index welche Partitionen gelöscht werden sollen"
#: lib/user_interaction.py:681
#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
"{}\n"
"\n"
"Wählen sie anhand vom index welche Partitionen zu mounten"
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699
msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example."
msgstr " * Die Mountorte sind relativ zur Installation, zum Beispiel boot würde gemountet auf /boot"
#: lib/user_interaction.py:686
#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
msgstr "Bitte geben sie an wo die Partition gemounted werden soll (leer lassen um den Mountort zu entfernen): "
#: lib/user_interaction.py:697
#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
"{}\n"
"\n"
"Bitte wählen sie welche Partition formatiert werden soll"
#: lib/user_interaction.py:716
#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
"{}\n"
"\n"
"Bitte wählen sie welche Partition verschlüsselt werden soll"
#: lib/user_interaction.py:724
#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
"{}\n"
"\n"
"Bitte wählen sie welche Partition bootbar ist"
#: lib/user_interaction.py:731
#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
"{}\n"
"\n"
"Bitte wählen sie auf welche Partition ein Dateisystem eingerichtet werden soll"
#: lib/user_interaction.py:738
#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
msgstr "Bitte geben sie einen gewünschten Dateisystemtyp für die Partition ein: "
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773
msgid "Select Archinstall language"
msgstr "Sprache fuer Archinstall"
msgstr "Sprache für Archinstall"
#: lib/user_interaction.py:764
#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
msgstr "Alle Laufwerke löschen und ein vorgegebenes Partitionenlayout verwenden"
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779
msgid "Select what to do with each individual drive (followed by partition usage)"
msgstr "Bitte geben sie an was mit jedem individuellem Laufwerk geschehen soll"
#: lib/user_interaction.py:768
#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783
msgid "Select what you wish to do with the selected block devices"
msgstr ""
msgstr "Bitte wählen sie was mit dem ausgewählten Gerät geschehen soll"
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836
msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments"
msgstr "Dies ist eine Liste von bereits programmierten Profilen, diese ermöglichen es einfacher Desktop Umgebungen einzustellen"
#: lib/user_interaction.py:846
#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860
msgid "Select Keyboard layout"
msgstr ""
msgstr "Bitte wählen sie ein Tastaturlayout aus"
#: lib/user_interaction.py:861
#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875
msgid "Select one of the regions to download packages from"
msgstr ""
msgstr "Bitte wählen sie eine Region zum downloaden von Packeten aus"
#: lib/user_interaction.py:883
#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897
msgid "Select one or more hard drives to use and configure"
msgstr ""
msgstr "Bitte wählen sie eine oder mehrere Laufwerke aus die konfiguriert werden sollen"
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924
msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options."
msgstr "Für die beste kompabilität mit ihrer AMD hardware, sollten sie womöglich die open-source oder AMD / ATI optionen verwenden"
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926
msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n"
msgstr "Für die beste kompabilität mit ihrer Intel hardware, sollten sie womöglich die open-source oder Intel optionen verwenden.\n"
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928
msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n"
msgstr "Für die beste kompabilität mit ihrer Nvidia hardware, sollten sie womöglich die Nvidia proprietary driver option verwenden.\n"
#: lib/user_interaction.py:917
#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
"\n"
"\n"
"Bitte wählen sie einen Grafiktreiber aus oder leer lassen um alle open-source Treiber zu installieren"
#: lib/user_interaction.py:921
#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935
msgid "All open-source (default)"
msgstr ""
msgstr "Alle open-source (default)"
#: lib/user_interaction.py:940
#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
msgstr "Bitte wählen sie welche Kernel benutzt werden sollen oder leer lassen für default \"{}\""
#: lib/user_interaction.py:954
#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968
msgid "Choose which locale language to use"
msgstr ""
msgstr "Bitte wählen sie eine lokale Sprache aus"
#: lib/user_interaction.py:968
#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982
msgid "Choose which locale encoding to use"
msgstr ""
msgstr "Bitte wählen sie eine lokale Kodierung aus"
#: lib/user_interaction.py:1009
#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023
msgid "Select one of the values shown below: "
msgstr ""
msgstr "Bitte wählen sie einen der folgenden Werte aus:"
#: lib/user_interaction.py:1050
#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064
msgid "Select one or more of the options below: "
msgstr ""
msgstr "Bitte wählen sie eine oder mehrere Optionen aus: "
#: lib/menu/selection_menu.py:122
#: lib/disk/filesystem.py:86
msgid "Adding partition...."
msgstr "Partitionen werden hinzugefügt..."
#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141
msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's."
msgstr "Bitte geben sie einen gültigen Dateisystemtyp ein um fortzufahren. Wenden sie sich an \"man parted\" für eine Liste von gültigen Typen."
#: lib/profiles.py:89
msgid "Error: Listing profiles on URL \"{}\" resulted in:"
msgstr "Fehler: Auflistung von Profilen mit URL \"{}\":"
#: lib/profiles.py:92
msgid "Error: Could not decode \"{}\" result as JSON:"
msgstr "Fehler: \"{}\" konnte nicht in ein JSON format dekodiert werden:"
#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148
msgid "Select keyboard layout"
msgstr ""
msgstr "Tastaturlayout auswählen"
#: lib/menu/selection_menu.py:125
#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151
msgid "Select mirror region"
msgstr ""
msgstr "Mirror-region auswählen"
#: lib/menu/selection_menu.py:130
#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156
msgid "Select locale language"
msgstr ""
msgstr "Lokale Sprache auswählen"
#: lib/menu/selection_menu.py:132
#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158
msgid "Select locale encoding"
msgstr ""
msgstr "Lokale Kodierung auswählen"
#: lib/menu/selection_menu.py:135
#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161
msgid "Select harddrives"
msgstr ""
msgstr "Laufwerke auswählen"
#: lib/menu/selection_menu.py:139
#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165
msgid "Select disk layout"
msgstr ""
msgstr "Laufwerke-layout auswählen"
#: lib/menu/selection_menu.py:147
#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173
msgid "Set encryption password"
msgstr ""
msgstr "Verschlüsselungspasswort angeben"
#: lib/menu/selection_menu.py:153
#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179
msgid "Use swap"
msgstr ""
msgstr "Swap benützen"
#: lib/menu/selection_menu.py:158
#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184
msgid "Select bootloader"
msgstr ""
msgstr "Bootloader auswählen"
#: lib/menu/selection_menu.py:164
#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190
msgid "Set root password"
msgstr ""
msgstr "Root Passwort wählen"
#: lib/menu/selection_menu.py:169
#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195
msgid "Specify superuser account"
msgstr ""
msgstr "Superuser Konto wählen"
#: lib/menu/selection_menu.py:175
#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201
msgid "Specify user account"
msgstr ""
msgstr "Benutzerkonto wählen"
#: lib/menu/selection_menu.py:181
#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207
msgid "Specify profile"
msgstr ""
msgstr "Profile auswählen"
#: lib/menu/selection_menu.py:186
#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212
msgid "Select audio"
msgstr ""
msgstr "Audio auswählen"
#: lib/menu/selection_menu.py:190
#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216
msgid "Select kernels"
msgstr ""
msgstr "Kernel auswählen"
#: lib/menu/selection_menu.py:195
#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221
msgid "Additional packages to install"
msgstr ""
msgstr "Zus. Packete für die Installation"
#: lib/menu/selection_menu.py:200
#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226
msgid "Configure network"
msgstr ""
msgstr "Netzwerkonfiguration"
#: lib/menu/selection_menu.py:208
#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234
msgid "Set automatic time sync (NTP)"
msgstr "Autom. Zeitsynchronisierung (NTP)"
#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315
msgid "Install ({} config(s) missing)"
msgstr "Installieren ({} konfiguration(en) ausständig)"
#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378
msgid ""
"You decided to skip harddrive selection\n"
"and will use whatever drive-setup is mounted at {} (experimental)\n"
"WARNING: Archinstall won't check the suitability of this setup\n"
"Do you wish to continue?"
msgstr ""
"Sie haben sich entschieden keine Laufwerke auszuwählen\n"
"und jene Einstellungen zu verwenden welche momentan auf {} verfügbar sind (experimentell)\n"
"WARNUNG: Archinstall wird die Kompabilität der Einstellung nicht überprüfen\n"
"Wollen sie trotzdem fortfahren?"
#: lib/disk/filesystem.py:97
msgid "Re-using partition instance: {}"
msgstr "Wiederverwenden der Partitionsinstanz: {}"
#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596
msgid "Create a new partition"
msgstr "Neue Partition erstellen"
#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598
msgid "Delete a partition"
msgstr "Partition löschen"
#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599
msgid "Clear/Delete all partitions"
msgstr "Alle partitionen löschen"
#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600
msgid "Assign mount-point for a partition"
msgstr "Mountort für Partition angeben"
#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601
msgid "Mark/Unmark a partition to be formatted (wipes data)"
msgstr "Markieren welche Partition formattiert werden soll (alle Daten werden gelöscht)"
#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602
msgid "Mark/Unmark a partition as encrypted"
msgstr "Markieren welche Partitionen verschlüsselt werden sollen"
#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603
msgid "Mark/Unmark a partition as bootable (automatic for /boot)"
msgstr "Markieren welche Partition bootbar ist (automatisch für /boot)"
#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604
msgid "Set desired filesystem for a partition"
msgstr "Bitte wählen Sie einen Dateisystemtyp für die Partition aus"
#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270
msgid "Abort"
msgstr "Abbrechen"
#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187
msgid "Specify hostname"
msgstr "Hostnamen wählen"
#: lib/menu/selection_menu.py:228
msgid "Not configured, unavailable unless setup manually"
msgstr "Nicht konfiguriert, unverfügbar wenn nicht selber eingestellt"
#: lib/menu/selection_menu.py:231
msgid "Select timezone"
msgstr "Zeitzone wählen"
#: lib/menu/selection_menu.py:266
msgid "Set/Modify the below options"
msgstr "Setzen sie die unten stehenden Einstellungen"
#: lib/menu/selection_menu.py:272
msgid "Install"
msgstr "Installieren"
#: lib/menu/menu.py:68
msgid ""
"Use ESC to skip\n"
"\n"
msgstr ""
"ESC um zu Überspringen\n"
"\n"
#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597
msgid "Suggest partition layout"
msgstr "Ein Partitionslayout vorschlagen"
#: lib/user_interaction.py:101
msgid "Enter a password: "
msgstr "Passwort eingeben: "
#: lib/disk/filesystem.py:117
msgid "Enter a encryption password for {}"
msgstr "Verschlüsselungspasswort angeben für {}"
#: lib/menu/selection_menu.py:174
msgid "Enter disk encryption password (leave blank for no encryption): "
msgstr "Geben sie ein Verschlüsselungspasswort ein (leer lassen um zu Überspringen): "
#: lib/menu/selection_menu.py:407
msgid "Create a required super-user with sudo privileges: "
msgstr "Geben sie einen super-user mit sudo Privilegien an: "
#: lib/menu/selection_menu.py:347
msgid "Enter root password (leave blank to disable root): "
msgstr "Geben sie ein Root passwort ein (leer lassen um Root zu deaktivieren): "
#: lib/user_interaction.py:307 lib/user_interaction.py:324
msgid "Password for user \"{}\": "
msgstr "Passwort für Benutzer \"{}\": "
#: lib/user_interaction.py:405 lib/user_interaction.py:408
msgid "Verifying that additional packages exist (this might take a few seconds)"
msgstr "Angegebene Packete werden verifiziert (dies könnte einige Sekunden dauern)"
#: lib/user_interaction.py:281
msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n"
msgstr "Möchten sie automatische Zeitsynchronisierung mit dem default Server einschalten?\n"
#: lib/user_interaction.py:282
msgid ""
"Hardware time and other post-configuration steps might be required in order for NTP to work.\n"
"For more information, please check the Arch wiki"
msgstr ""
"Hardware Zeit und andere Einstellungsschritte könnten notwendig sein um NTP zu benutzen.\n"
"Für weitere Informationen wenden sie sich bitte an das Arch wiki"
#: lib/menu/selection_menu.py:411
msgid "Enter a username to create an additional user (leave blank to skip): "
msgstr "Geben sie einen weiteren Benutzernamen an der angelegt werden soll (leer lassen um zu Überspringen): "

View File

@ -1,351 +1,468 @@
#: lib/user_interaction.py:82
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/installer.py:144
msgid "[!] A log file has been created here: {} {}"
msgstr ""
#: lib/installer.py:145
msgid " Please submit this issue (and file) to https://github.com/archlinux/archinstall/issues"
msgstr ""
#: lib/user_interaction.py:83
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
#: lib/user_interaction.py:101 lib/user_interaction.py:104
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
#: lib/user_interaction.py:272 lib/user_interaction.py:275
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
#: lib/user_interaction.py:285 lib/user_interaction.py:288
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
#: lib/user_interaction.py:290 lib/user_interaction.py:293
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
#: lib/user_interaction.py:310 lib/user_interaction.py:313
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
#: lib/user_interaction.py:324 lib/user_interaction.py:327
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
#: lib/user_interaction.py:340 lib/user_interaction.py:343 lib/user_interaction.py:346
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
#: lib/user_interaction.py:354 lib/user_interaction.py:357 lib/user_interaction.py:360
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
#: lib/user_interaction.py:364 lib/user_interaction.py:367 lib/user_interaction.py:370
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
#: lib/user_interaction.py:380 lib/user_interaction.py:383 lib/user_interaction.py:386
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
#: lib/user_interaction.py:391 lib/user_interaction.py:394 lib/user_interaction.py:397
msgid "Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
#: lib/user_interaction.py:392 lib/user_interaction.py:395 lib/user_interaction.py:398
msgid "If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
#: lib/user_interaction.py:396 lib/user_interaction.py:399 lib/user_interaction.py:402
msgid "Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
#: lib/user_interaction.py:419 lib/user_interaction.py:422 lib/user_interaction.py:425
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
#: lib/user_interaction.py:420 lib/user_interaction.py:423 lib/user_interaction.py:426
msgid "Use NetworkManager (necessary to configure internet graphically in GNOME and KDE)"
msgstr ""
#: lib/user_interaction.py:427
#: lib/user_interaction.py:428 lib/user_interaction.py:431 lib/user_interaction.py:434
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
#: lib/user_interaction.py:441 lib/user_interaction.py:444 lib/user_interaction.py:447
msgid "Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
#: lib/user_interaction.py:446 lib/user_interaction.py:449 lib/user_interaction.py:452
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
#: lib/user_interaction.py:461 lib/user_interaction.py:464 lib/user_interaction.py:467
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
#: lib/user_interaction.py:476 lib/user_interaction.py:479 lib/user_interaction.py:482
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
#: lib/user_interaction.py:510 lib/user_interaction.py:513 lib/user_interaction.py:516
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
#: lib/user_interaction.py:556 lib/user_interaction.py:559 lib/user_interaction.py:562
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
#: lib/user_interaction.py:607 lib/user_interaction.py:614 lib/user_interaction.py:617 lib/user_interaction.py:620
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
#: lib/user_interaction.py:624 lib/user_interaction.py:709 lib/user_interaction.py:631 lib/user_interaction.py:716 lib/user_interaction.py:634 lib/user_interaction.py:719 lib/user_interaction.py:637 lib/user_interaction.py:722
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
#: lib/user_interaction.py:626 lib/user_interaction.py:633 lib/user_interaction.py:636 lib/user_interaction.py:639
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
#: lib/user_interaction.py:635 lib/user_interaction.py:642 lib/user_interaction.py:645 lib/user_interaction.py:648
msgid "Enter the end sector of the partition (percentage or block number, ex: {}): "
msgstr ""
#: lib/user_interaction.py:660
#: lib/user_interaction.py:661 lib/user_interaction.py:668 lib/user_interaction.py:671 lib/user_interaction.py:674
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
#: lib/user_interaction.py:674 lib/user_interaction.py:681 lib/user_interaction.py:684 lib/user_interaction.py:687
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
#: lib/user_interaction.py:682 lib/user_interaction.py:689 lib/user_interaction.py:692 lib/user_interaction.py:695
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
#: lib/user_interaction.py:686 lib/user_interaction.py:693 lib/user_interaction.py:696 lib/user_interaction.py:699
msgid " * Partition mount-points are relative to inside the installation, the boot would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
#: lib/user_interaction.py:687 lib/user_interaction.py:694 lib/user_interaction.py:697 lib/user_interaction.py:700
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
#: lib/user_interaction.py:698 lib/user_interaction.py:705 lib/user_interaction.py:708 lib/user_interaction.py:711
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
#: lib/user_interaction.py:717 lib/user_interaction.py:724 lib/user_interaction.py:727 lib/user_interaction.py:730
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
#: lib/user_interaction.py:725 lib/user_interaction.py:732 lib/user_interaction.py:735 lib/user_interaction.py:738
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
#: lib/user_interaction.py:732 lib/user_interaction.py:739 lib/user_interaction.py:742 lib/user_interaction.py:745
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
#: lib/user_interaction.py:739 lib/user_interaction.py:746 lib/user_interaction.py:749 lib/user_interaction.py:752
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
#: lib/user_interaction.py:760 lib/menu/selection_menu.py:141 lib/user_interaction.py:767 lib/menu/selection_menu.py:139 lib/menu/selection_menu.py:143 lib/user_interaction.py:770 lib/user_interaction.py:773
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764
#: lib/user_interaction.py:765 lib/user_interaction.py:772 lib/user_interaction.py:775 lib/user_interaction.py:778
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
#: lib/user_interaction.py:766 lib/user_interaction.py:773 lib/user_interaction.py:776 lib/user_interaction.py:779
msgid "Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
#: lib/user_interaction.py:769 lib/user_interaction.py:770 lib/user_interaction.py:777 lib/user_interaction.py:780 lib/user_interaction.py:783
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
#: lib/user_interaction.py:822 lib/user_interaction.py:823 lib/user_interaction.py:830 lib/user_interaction.py:833 lib/user_interaction.py:836
msgid "This is a list of pre-programmed profiles, they might make it easier to install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
#: lib/user_interaction.py:846 lib/user_interaction.py:847 lib/user_interaction.py:854 lib/user_interaction.py:857 lib/user_interaction.py:860
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
#: lib/user_interaction.py:861 lib/user_interaction.py:862 lib/user_interaction.py:869 lib/user_interaction.py:872 lib/user_interaction.py:875
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
#: lib/user_interaction.py:883 lib/user_interaction.py:884 lib/user_interaction.py:891 lib/user_interaction.py:894 lib/user_interaction.py:897
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
#: lib/user_interaction.py:910 lib/user_interaction.py:911 lib/user_interaction.py:918 lib/user_interaction.py:921 lib/user_interaction.py:924
msgid "For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
#: lib/user_interaction.py:912 lib/user_interaction.py:913 lib/user_interaction.py:920 lib/user_interaction.py:923 lib/user_interaction.py:926
msgid "For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
#: lib/user_interaction.py:914 lib/user_interaction.py:915 lib/user_interaction.py:922 lib/user_interaction.py:925 lib/user_interaction.py:928
msgid "For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
#: lib/user_interaction.py:917 lib/user_interaction.py:918 lib/user_interaction.py:925 lib/user_interaction.py:928 lib/user_interaction.py:931
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
#: lib/user_interaction.py:921 lib/user_interaction.py:922 lib/user_interaction.py:929 lib/user_interaction.py:932 lib/user_interaction.py:935
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
#: lib/user_interaction.py:940 lib/user_interaction.py:941 lib/user_interaction.py:948 lib/user_interaction.py:951 lib/user_interaction.py:954
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
#: lib/user_interaction.py:954 lib/user_interaction.py:955 lib/user_interaction.py:962 lib/user_interaction.py:965 lib/user_interaction.py:968
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
#: lib/user_interaction.py:968 lib/user_interaction.py:969 lib/user_interaction.py:976 lib/user_interaction.py:979 lib/user_interaction.py:982
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
#: lib/user_interaction.py:1009 lib/user_interaction.py:1010 lib/user_interaction.py:1017 lib/user_interaction.py:1020 lib/user_interaction.py:1023
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
#: lib/user_interaction.py:1050 lib/user_interaction.py:1051 lib/user_interaction.py:1058 lib/user_interaction.py:1061 lib/user_interaction.py:1064
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122
#: lib/disk/filesystem.py:86
msgid "Adding partition...."
msgstr ""
#: lib/disk/filesystem.py:139 lib/disk/filesystem.py:141
msgid "You need to enter a valid fs-type in order to continue. See `man parted` for valid fs-type's."
msgstr ""
#: lib/profiles.py:89
msgid "Error: Listing profiles on URL \"{}\" resulted in:"
msgstr ""
#: lib/profiles.py:92
msgid "Error: Could not decode \"{}\" result as JSON:"
msgstr ""
#: lib/menu/selection_menu.py:146 lib/menu/selection_menu.py:144 lib/menu/selection_menu.py:148
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
#: lib/menu/selection_menu.py:149 lib/menu/selection_menu.py:147 lib/menu/selection_menu.py:151
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
#: lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:152 lib/menu/selection_menu.py:156
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
#: lib/menu/selection_menu.py:156 lib/menu/selection_menu.py:154 lib/menu/selection_menu.py:158
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
#: lib/menu/selection_menu.py:159 lib/menu/selection_menu.py:157 lib/menu/selection_menu.py:161
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
#: lib/menu/selection_menu.py:163 lib/menu/selection_menu.py:161 lib/menu/selection_menu.py:165
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
#: lib/menu/selection_menu.py:171 lib/menu/selection_menu.py:169 lib/menu/selection_menu.py:173
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
#: lib/menu/selection_menu.py:177 lib/menu/selection_menu.py:175 lib/menu/selection_menu.py:179
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
#: lib/menu/selection_menu.py:182 lib/menu/selection_menu.py:180 lib/menu/selection_menu.py:184
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
#: lib/menu/selection_menu.py:188 lib/menu/selection_menu.py:186 lib/menu/selection_menu.py:190
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
#: lib/menu/selection_menu.py:193 lib/menu/selection_menu.py:191 lib/menu/selection_menu.py:195
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
#: lib/menu/selection_menu.py:199 lib/menu/selection_menu.py:197 lib/menu/selection_menu.py:201
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
#: lib/menu/selection_menu.py:205 lib/menu/selection_menu.py:203 lib/menu/selection_menu.py:207
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
#: lib/menu/selection_menu.py:210 lib/menu/selection_menu.py:208 lib/menu/selection_menu.py:212
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
#: lib/menu/selection_menu.py:214 lib/menu/selection_menu.py:212 lib/menu/selection_menu.py:216
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
#: lib/menu/selection_menu.py:219 lib/menu/selection_menu.py:217 lib/menu/selection_menu.py:221
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
#: lib/menu/selection_menu.py:224 lib/menu/selection_menu.py:222 lib/menu/selection_menu.py:226
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
#: lib/menu/selection_menu.py:232 lib/menu/selection_menu.py:230 lib/menu/selection_menu.py:234
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/menu/selection_menu.py:310 lib/menu/selection_menu.py:308 lib/menu/selection_menu.py:315
msgid "Install ({} config(s) missing)"
msgstr ""
#: lib/menu/selection_menu.py:373 lib/menu/selection_menu.py:371 lib/menu/selection_menu.py:378
msgid ""
"You decided to skip harddrive selection\n"
"and will use whatever drive-setup is mounted at {} (experimental)\n"
"WARNING: Archinstall won't check the suitability of this setup\n"
"Do you wish to continue?"
msgstr ""
#: lib/disk/filesystem.py:97
msgid "Re-using partition instance: {}"
msgstr ""
#: lib/user_interaction.py:590 lib/user_interaction.py:593 lib/user_interaction.py:596
msgid "Create a new partition"
msgstr ""
#: lib/user_interaction.py:592 lib/user_interaction.py:595 lib/user_interaction.py:598
msgid "Delete a partition"
msgstr ""
#: lib/user_interaction.py:593 lib/user_interaction.py:596 lib/user_interaction.py:599
msgid "Clear/Delete all partitions"
msgstr ""
#: lib/user_interaction.py:594 lib/user_interaction.py:597 lib/user_interaction.py:600
msgid "Assign mount-point for a partition"
msgstr ""
#: lib/user_interaction.py:595 lib/user_interaction.py:598 lib/user_interaction.py:601
msgid "Mark/Unmark a partition to be formatted (wipes data)"
msgstr ""
#: lib/user_interaction.py:596 lib/user_interaction.py:599 lib/user_interaction.py:602
msgid "Mark/Unmark a partition as encrypted"
msgstr ""
#: lib/user_interaction.py:597 lib/user_interaction.py:600 lib/user_interaction.py:603
msgid "Mark/Unmark a partition as bootable (automatic for /boot)"
msgstr ""
#: lib/user_interaction.py:598 lib/user_interaction.py:601 lib/user_interaction.py:604
msgid "Set desired filesystem for a partition"
msgstr ""
#: lib/menu/selection_menu.py:239 lib/menu/selection_menu.py:237 lib/menu/selection_menu.py:241 lib/menu/selection_menu.py:270
msgid "Abort"
msgstr ""
#: lib/menu/selection_menu.py:183 lib/menu/selection_menu.py:187
msgid "Specify hostname"
msgstr ""
#: lib/menu/selection_menu.py:228
msgid "Not configured, unavailable unless setup manually"
msgstr ""
#: lib/menu/selection_menu.py:231
msgid "Select timezone"
msgstr ""
#: lib/menu/selection_menu.py:266
msgid "Set/Modify the below options"
msgstr ""
#: lib/menu/selection_menu.py:272
msgid "Install"
msgstr ""
#: lib/menu/menu.py:68
msgid ""
"Use ESC to skip\n"
"\n"
msgstr ""
#: lib/user_interaction.py:591 lib/user_interaction.py:594 lib/user_interaction.py:597
msgid "Suggest partition layout"
msgstr ""
#: lib/user_interaction.py:101
msgid "Enter a password: "
msgstr ""
#: lib/disk/filesystem.py:117
msgid "Enter a encryption password for {}"
msgstr ""
#: lib/menu/selection_menu.py:174
msgid "Enter disk encryption password (leave blank for no encryption): "
msgstr ""
#: lib/menu/selection_menu.py:407
msgid "Create a required super-user with sudo privileges: "
msgstr ""
#: lib/menu/selection_menu.py:347
msgid "Enter root password (leave blank to disable root): "
msgstr ""
#: lib/user_interaction.py:307 lib/user_interaction.py:324
msgid "Password for user \"{}\": "
msgstr ""
#: lib/user_interaction.py:405 lib/user_interaction.py:408
msgid "Verifying that additional packages exist (this might take a few seconds)"
msgstr ""
#: lib/user_interaction.py:281
msgid "Would you like to use automatic time synchronization (NTP) with the default time servers?\n"
msgstr ""
#: lib/user_interaction.py:282
msgid ""
"Hardware time and other post-configuration steps might be required in order for NTP to work.\n"
"For more information, please check the Arch wiki"
msgstr ""
#: lib/menu/selection_menu.py:411
msgid "Enter a username to create an additional user (leave blank to skip): "
msgstr ""

View File

@ -1,359 +0,0 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759
msgid "Select archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:116
msgid "Archinstall language"
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""

View File

@ -1,354 +0,0 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#~ msgid "this is a test string"
#~ msgstr "Questo e un esempio"

View File

@ -1,362 +0,0 @@
#: lib/user_interaction.py:82
msgid "Do you really want to abort?"
msgstr ""
#: lib/user_interaction.py:100
msgid "And one more time for verification: "
msgstr ""
#: lib/user_interaction.py:271
msgid "Would you like to use swap on zram?"
msgstr ""
#: lib/user_interaction.py:277
msgid ""
"Would you like to use automatic time synchronization (NTP) with the default "
"time servers?"
msgstr ""
#: lib/user_interaction.py:278
msgid ""
"Hardware time and other post-configuration steps might be required in order "
"for NTP to work. For more information, please check the Arch wiki"
msgstr ""
#: lib/user_interaction.py:284
msgid "Desired hostname for the installation: "
msgstr ""
#: lib/user_interaction.py:289
msgid "Username for required superuser with sudo privileges: "
msgstr ""
#: lib/user_interaction.py:303 lib/user_interaction.py:320
msgid "Password for user \"{}\""
msgstr ""
#: lib/user_interaction.py:309
msgid "Any additional users to install (leave blank for no users): "
msgstr ""
#: lib/user_interaction.py:323
msgid "Should this user be a superuser (sudoer)?"
msgstr ""
#: lib/user_interaction.py:339
msgid "Select a timezone"
msgstr ""
#: lib/user_interaction.py:353
msgid "Would you like to use GRUB as a bootloader instead of systemd-boot?"
msgstr ""
#: lib/user_interaction.py:363
msgid "Choose a bootloader"
msgstr ""
#: lib/user_interaction.py:379
msgid "Choose an audio server"
msgstr ""
#: lib/user_interaction.py:390
msgid ""
"Only packages such as base, base-devel, linux, linux-firmware, efibootmgr "
"and optional profile packages are installed."
msgstr ""
#: lib/user_interaction.py:391
msgid ""
"If you desire a web browser, such as firefox or chromium, you may specify it "
"in the following prompt."
msgstr ""
#: lib/user_interaction.py:395
msgid ""
"Write additional packages to install (space separated, leave blank to skip): "
msgstr ""
#: lib/user_interaction.py:418
msgid "Copy ISO network configuration to installation"
msgstr ""
#: lib/user_interaction.py:419
msgid ""
"Use NetworkManager (necessary to configure internet graphically in GNOME and "
"KDE)"
msgstr ""
#: lib/user_interaction.py:427
msgid "Select one network interface to configure"
msgstr ""
#: lib/user_interaction.py:440
msgid ""
"Select which mode to configure for \"{}\" or skip to use default mode \"{}\""
msgstr ""
#: lib/user_interaction.py:445
msgid "Enter the IP and subnet for {} (example: 192.168.0.5/24): "
msgstr ""
#: lib/user_interaction.py:460
msgid "Enter your gateway (router) IP address or leave blank for none: "
msgstr ""
#: lib/user_interaction.py:475
msgid "Enter your DNS servers (space separated, blank for none): "
msgstr ""
#: lib/user_interaction.py:509
msgid "Select which filesystem your main partition should use"
msgstr ""
#: lib/user_interaction.py:555
msgid "Current partition layout"
msgstr ""
#: lib/user_interaction.py:606
msgid ""
"Select what to do with\n"
"{}"
msgstr ""
#: lib/user_interaction.py:623 lib/user_interaction.py:708
msgid "Enter a desired filesystem type for the partition"
msgstr ""
#: lib/user_interaction.py:625
msgid "Enter the start sector (percentage or block number, default: {}): "
msgstr ""
#: lib/user_interaction.py:634
msgid ""
"Enter the end sector of the partition (percentage or block number, ex: {}): "
"\""
msgstr ""
#: lib/user_interaction.py:660
msgid "{} contains queued partitions, this will remove those, are you sure?"
msgstr ""
#: lib/user_interaction.py:673
msgid ""
"{}\n"
"\n"
"Select by index which partitions to delete"
msgstr ""
#: lib/user_interaction.py:681
msgid ""
"{}\n"
"\n"
"Select by index which partition to mount where"
msgstr ""
#: lib/user_interaction.py:685
msgid ""
" * Partition mount-points are relative to inside the installation, the boot "
"would be /boot as an example."
msgstr ""
#: lib/user_interaction.py:686
msgid "Select where to mount partition (leave blank to remove mountpoint): "
msgstr ""
#: lib/user_interaction.py:697
msgid ""
"{}\n"
"\n"
"Select which partition to mask for formatting"
msgstr ""
#: lib/user_interaction.py:716
msgid ""
"{}\n"
"\n"
"Select which partition to mark as encrypted"
msgstr ""
#: lib/user_interaction.py:724
msgid ""
"{}\n"
"\n"
"Select which partition to mark as bootable"
msgstr ""
#: lib/user_interaction.py:731
msgid ""
"{}\n"
"\n"
"Select which partition to set a filesystem on"
msgstr ""
#: lib/user_interaction.py:738
msgid "Enter a desired filesystem type for the partition: "
msgstr ""
#: lib/user_interaction.py:759
msgid "Select archinstall language"
msgstr ""
#: lib/user_interaction.py:764
msgid "Wipe all selected drives and use a best-effort default partition layout"
msgstr ""
#: lib/user_interaction.py:765
msgid ""
"Select what to do with each individual drive (followed by partition usage)"
msgstr ""
#: lib/user_interaction.py:768
msgid "Select what you wish to do with the selected block devices"
msgstr ""
#: lib/user_interaction.py:821
msgid ""
"This is a list of pre-programmed profiles, they might make it easier to "
"install things like desktop environments"
msgstr ""
#: lib/user_interaction.py:846
msgid "Select Keyboard layout"
msgstr ""
#: lib/user_interaction.py:861
msgid "Select one of the regions to download packages from"
msgstr ""
#: lib/user_interaction.py:883
msgid "Select one or more hard drives to use and configure"
msgstr ""
#: lib/user_interaction.py:910
msgid ""
"For the best compatibility with your AMD hardware, you may want to use "
"either the all open-source or AMD / ATI options."
msgstr ""
#: lib/user_interaction.py:912
msgid ""
"For the best compatibility with your Intel hardware, you may want to use "
"either the all open-source or Intel options.\n"
msgstr ""
#: lib/user_interaction.py:914
msgid ""
"For the best compatibility with your Nvidia hardware, you may want to use "
"the Nvidia proprietary driver.\n"
msgstr ""
#: lib/user_interaction.py:917
msgid ""
"\n"
"\n"
"Select a graphics driver or leave blank to install all open-source drivers"
msgstr ""
#: lib/user_interaction.py:921
msgid "All open-source (default)"
msgstr ""
#: lib/user_interaction.py:940
msgid "Choose which kernels to use or leave blank for default \"{}\""
msgstr ""
#: lib/user_interaction.py:954
msgid "Choose which locale language to use"
msgstr ""
#: lib/user_interaction.py:968
msgid "Choose which locale encoding to use"
msgstr ""
#: lib/user_interaction.py:1009
msgid "Select one of the values shown below: "
msgstr ""
#: lib/user_interaction.py:1050
msgid "Select one or more of the options below: "
msgstr ""
#: lib/menu/selection_menu.py:116
msgid "Archinstall language"
msgstr ""
#: lib/menu/selection_menu.py:122
msgid "Select keyboard layout"
msgstr ""
#: lib/menu/selection_menu.py:125
msgid "Select mirror region"
msgstr ""
#: lib/menu/selection_menu.py:130
msgid "Select locale language"
msgstr ""
#: lib/menu/selection_menu.py:132
msgid "Select locale encoding"
msgstr ""
#: lib/menu/selection_menu.py:135
msgid "Select harddrives"
msgstr ""
#: lib/menu/selection_menu.py:139
msgid "Select disk layout"
msgstr ""
#: lib/menu/selection_menu.py:147
msgid "Set encryption password"
msgstr ""
#: lib/menu/selection_menu.py:153
msgid "Use swap"
msgstr ""
#: lib/menu/selection_menu.py:158
msgid "Select bootloader"
msgstr ""
#: lib/menu/selection_menu.py:164
msgid "Set root password"
msgstr ""
#: lib/menu/selection_menu.py:169
msgid "Specify superuser account"
msgstr ""
#: lib/menu/selection_menu.py:175
msgid "Specify user account"
msgstr ""
#: lib/menu/selection_menu.py:181
msgid "Specify profile"
msgstr ""
#: lib/menu/selection_menu.py:186
msgid "Select audio"
msgstr ""
#: lib/menu/selection_menu.py:190
msgid "Select kernels"
msgstr ""
#: lib/menu/selection_menu.py:195
msgid "Additional packages to install"
msgstr ""
#: lib/menu/selection_menu.py:200
msgid "Configure network"
msgstr ""
#: lib/menu/selection_menu.py:208
msgid "Set automatic time sync (NTP)"
msgstr ""
#: lib/user_interaction.py:759 lib/menu/selection_menu.py:116
msgid "Select Archinstall language"
msgstr ""
#~ msgid "this is a test string"
#~ msgstr "Questo e un esempio"

View File

@ -8,7 +8,7 @@ if archinstall.arguments.get('help'):
print("See `man archinstall` for help.")
exit(0)
if os.getuid() != 0:
print("Archinstall requires root privileges to run. See --help for more.")
print(_("Archinstall requires root privileges to run. See --help for more."))
exit(1)
# Log various information about hardware before starting the installation. This might assist in troubleshooting
@ -36,7 +36,7 @@ def ask_user_questions():
# the system immediately
archinstall.SysCommand('timedatectl set-ntp true')
global_menu = archinstall.GlobalMenu()
global_menu = archinstall.GlobalMenu(data_store=archinstall.arguments)
global_menu.enable('keyboard-layout')
# Set which region to download packages from during the installation
@ -97,7 +97,7 @@ def perform_filesystem_operations():
"""
if archinstall.arguments.get('harddrives', None):
print(f" ! Formatting {archinstall.arguments['harddrives']} in ", end='')
print(_(f" ! Formatting {archinstall.arguments['harddrives']} in "), end='')
archinstall.do_countdown()
"""
@ -113,6 +113,7 @@ def perform_filesystem_operations():
with archinstall.Filesystem(drive, mode) as fs:
fs.load_layout(archinstall.arguments['disk_layouts'][drive.path])
def perform_installation(mountpoint):
"""
Performs the installation steps on a block device.
@ -138,11 +139,11 @@ def perform_installation(mountpoint):
installation.log('Waiting for automatic mirror selection (reflector) to complete.', level=logging.INFO)
while archinstall.service_state('reflector') not in ('dead', 'failed'):
time.sleep(1)
# Set mirrors used by pacstrap (outside of installation)
if archinstall.arguments.get('mirror-region', None):
archinstall.use_mirrors(archinstall.arguments['mirror-region']) # Set the mirrors for the live medium
if installation.minimal_installation():
installation.set_locale(archinstall.arguments['sys-language'], archinstall.arguments['sys-encoding'].upper())
installation.set_hostname(archinstall.arguments['hostname'])

View File

@ -4,41 +4,41 @@ import pathlib
import archinstall
def ask_harddrives():
# Ask which harddrives/block-devices we will install to
# and convert them into archinstall.BlockDevice() objects.
if archinstall.arguments.get('harddrives', None) is None:
archinstall.arguments['harddrives'] = archinstall.generic_multi_select(archinstall.all_disks(),
text="Select one or more harddrives to use and configure (leave blank to skip this step): ",
allow_empty=True)
class OnlyHDMenu(archinstall.GlobalMenu):
def _setup_selection_menu_options(self):
super()._setup_selection_menu_options()
options_list = []
mandatory_list = []
options_list = ['harddrives', 'disk_layouts', '!encryption-password','swap']
mandatory_list = ['harddrives']
options_list.extend(['install','abort'])
if not archinstall.arguments['harddrives']:
archinstall.log("You decided to skip harddrive selection",fg="red",level=logging.INFO)
archinstall.log(f"and will use whatever drive-setup is mounted at {archinstall.storage['MOUNT_POINT']} (experimental)",fg="red",level=logging.INFO)
archinstall.log("WARNING: Archinstall won't check the suitability of this setup",fg="red",level=logging.INFO)
if input("Do you wish to continue ? [Y/n]").strip().lower() == 'n':
exit(1)
else:
if archinstall.arguments.get('disk_layouts', None) is None:
archinstall.arguments['disk_layouts'] = archinstall.select_disk_layout(archinstall.arguments['harddrives'], archinstall.arguments.get('advanced', False))
for entry in self._menu_options:
if entry in options_list:
# for not lineal executions, only self.option(entry).set_enabled and set_mandatory are necessary
if entry in mandatory_list:
self.enable(entry,mandatory=True)
else:
self.enable(entry)
else:
self.option(entry).set_enabled(False)
self._update_install()
def _missing_configs(self):
""" overloaded method """
def check(s):
return self.option(s).has_selection()
# Get disk encryption password (or skip if blank)
if archinstall.arguments.get('!encryption-password', None) is None:
if passwd := archinstall.get_password(prompt='Enter disk encryption password (leave blank for no encryption): '):
if passwd := archinstall.get_password(prompt=str(_('Enter disk encryption password (leave blank for no encryption): '))):
archinstall.arguments['!encryption-password'] = passwd
if archinstall.arguments.get('!encryption-password', None):
# If no partitions was marked as encrypted, but a password was supplied and we have some disks to format..
# Then we need to identify which partitions to encrypt. This will default to / (root).
if len(list(archinstall.encrypted_partitions(archinstall.arguments['disk_layouts']))) == 0:
archinstall.arguments['disk_layouts'] = archinstall.select_encrypted_partitions(archinstall.arguments['disk_layouts'], archinstall.arguments['!encryption-password'])
# Ask which boot-loader to use (will only ask if we're in BIOS (non-efi) mode)
if not archinstall.arguments.get("bootloader", None):
archinstall.arguments["bootloader"] = archinstall.ask_for_bootloader(archinstall.arguments.get('advanced', False))
if not archinstall.arguments.get('swap', None):
archinstall.arguments['swap'] = archinstall.ask_for_swap()
_, missing = self.mandatory_overview()
if check('harddrives'):
if not self.option('harddrives').is_empty() and not check('disk_layouts'):
missing += 1
return missing
def ask_user_questions():
"""
@ -46,7 +46,11 @@ def ask_user_questions():
Not until we're satisfied with what we want to install
will we continue with the actual installation steps.
"""
ask_harddrives()
with OnlyHDMenu(data_store=archinstall.arguments) as menu:
# We select the execution language separated
menu.exec_option('archinstall-language')
menu.option('archinstall-language').set_enabled(False)
menu.run()
def perform_disk_operations():
"""
@ -56,7 +60,6 @@ def perform_disk_operations():
if archinstall.arguments.get('harddrives', None):
print(f" ! Formatting {archinstall.arguments['harddrives']} in ", end='')
archinstall.do_countdown()
"""
Setup the blockdevice, filesystem (and optionally encryption).
Once that's done, we'll hand over to perform_installation()
@ -66,9 +69,9 @@ def perform_disk_operations():
mode = archinstall.MBR
for drive in archinstall.arguments.get('harddrives', []):
if dl_disk := archinstall.arguments.get('disk_layouts', {}).get(drive.path):
if archinstall.arguments.get('disk_layouts', {}).get(drive.path):
with archinstall.Filesystem(drive, mode) as fs:
fs.load_layout(dl_disk)
fs.load_layout(archinstall.arguments['disk_layouts'][drive.path])
def perform_installation(mountpoint):
"""

512
examples/swiss.py Normal file
View File

@ -0,0 +1,512 @@
"""
Script swiss (army knife)
Designed to make different workflows for the installation process. Which is controled by the argument --mode
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_os processes only the installation of Archlinux and software at --mountpoint (or /mnt/archinstall)
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)
When using the argument --advanced. an aditional menu for several special parameters needed during installation appears
This script respects the --dry_run argument
"""
import logging
import os
import time
import pathlib
import archinstall
if archinstall.arguments.get('help'):
print("See `man archinstall` for help.")
exit(0)
if os.getuid() != 0:
print("Archinstall requires root privileges to run. See --help for more.")
exit(1)
"""
particular routines to SetupMenu
TODO exec con return parameter
"""
def select_activate_NTP():
prompt = "Would you like to use automatic time synchronization (NTP) with the default time servers? [Y/n]: "
choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='yes').run()
if choice == 'yes':
return True
else:
return False
def select_mode():
return archinstall.generic_select(['full','only_hd','only_os','minimal','lineal'],
'Select one execution mode',
default=archinstall.arguments.get('mode','full'))
"""
following functions will be at locale_helpers, so they will have to be called prefixed by archinstall
"""
def get_locale_mode_text(mode):
if mode == 'LC_ALL':
mode_text = "general (LC_ALL)"
elif mode == "LC_CTYPE":
mode_text = "Character set"
elif mode == "LC_NUMERIC":
mode_text = "Numeric values"
elif mode == "LC_TIME":
mode_text = "Time Values"
elif mode == "LC_COLLATE":
mode_text = "sort order"
elif mode == "LC_MESSAGES":
mode_text = "text messages"
else:
mode_text = "Unassigned"
return mode_text
def reset_cmd_locale():
""" sets the cmd_locale to its saved default """
archinstall.storage['CMD_LOCALE'] = archinstall.storage.get('CMD_LOCALE_DEFAULT',{})
def unset_cmd_locale():
""" archinstall will use the execution environment default """
archinstall.storage['CMD_LOCALE'] = {}
def set_cmd_locale(general :str = None,
charset :str = 'C',
numbers :str = 'C',
time :str = 'C',
collate :str = 'C',
messages :str = 'C'):
"""
Set the cmd locale.
If the parameter general is specified, it takes precedence over the rest (might as well not exist)
The rest define some specific settings above the installed default language. If anyone of this parameters is none means the installation default
"""
installed_locales = list_installed_locales()
result = {}
if general:
if general in installed_locales:
archinstall.storage['CMD_LOCALE'] = {'LC_ALL':general}
else:
archinstall.log(f"{get_locale_mode_text('LC_ALL')} {general} is not installed. Defaulting to C",fg="yellow",level=logging.WARNING)
return
if numbers:
if numbers in installed_locales:
result["LC_NUMERIC"] = numbers
else:
archinstall.log(f"{get_locale_mode_text('LC_NUMERIC')} {numbers} is not installed. Defaulting to installation language",fg="yellow",level=logging.WARNING)
if charset:
if charset in installed_locales:
result["LC_CTYPE"] = charset
else:
archinstall.log(f"{get_locale_mode_text('LC_CTYPE')} {charset} is not installed. Defaulting to installation language",fg="yellow",level=logging.WARNING)
if time:
if time in installed_locales:
result["LC_TIME"] = time
else:
archinstall.log(f"{get_locale_mode_text('LC_TIME')} {time} is not installed. Defaulting to installation language",fg="yellow",level=logging.WARNING)
if collate:
if collate in installed_locales:
result["LC_COLLATE"] = collate
else:
archinstall.log(f"{get_locale_mode_text('LC_COLLATE')} {collate} is not installed. Defaulting to installation language",fg="yellow",level=logging.WARNING)
if messages:
if messages in installed_locales:
result["LC_MESSAGES"] = messages
else:
archinstall.log(f"{get_locale_mode_text('LC_MESSAGES')} {messages} is not installed. Defaulting to installation language",fg="yellow",level=logging.WARNING)
archinstall.storage['CMD_LOCALE'] = result
def list_installed_locales() -> list[str]:
lista = []
for line in archinstall.SysCommand('locale -a'):
lista.append(line.decode('UTF-8').strip())
return lista
"""
end of locale helpers
"""
def select_installed_locale(mode):
mode_text = get_locale_mode_text(mode)
if mode == 'LC_ALL':
texto = "Select the default execution locale \nIf none, you will be prompted for specific settings"
else:
texto = f"Select the {mode_text} ({mode}) execution locale \nIf none, you will get the installation default"
return archinstall.generic_select([None] + list_installed_locales(),
texto,
allow_empty_input=True,
default=archinstall.storage.get('CMD_LOCALE',{}).get(mode,'C'))
"""
_menus
"""
class SetupMenu(archinstall.GeneralMenu):
def __init__(self,storage_area):
super().__init__(data_store=storage_area)
def _setup_selection_menu_options(self):
self.set_option('archinstall-language',
archinstall.Selector(
_('Select Archinstall language'),
lambda: self._select_archinstall_language('English'),
default='English',
enabled=True))
self.set_option('ntp',
archinstall.Selector(
'Activate NTP',
lambda: select_activate_NTP(),
default='Y',
enabled=True))
self.set_option('mode',
archinstall.Selector(
'Excution mode',
lambda: select_mode(),
default='full',
enabled=True))
for item in ['LC_ALL','LC_CTYPE','LC_NUMERIC','LC_TIME','LC_MESSAGES','LC_COLLATE']:
self.set_option(item,
archinstall.Selector(
f'{get_locale_mode_text(item)} locale',
lambda item=item: select_installed_locale(item), # the parmeter is needed for the lambda in the loop
enabled=True,
dependencies_not=['LC_ALL'] if item != 'LC_ALL' else []))
self.option('LC_ALL').set_enabled(True)
self.set_option('continue',
archinstall.Selector(
'Continue',
exec_func=lambda n,v: True,
enabled=True))
def exit_callback(self):
if self._data_store.get('ntp',False):
archinstall.log("Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki.", fg="yellow")
archinstall.SysCommand('timedatectl set-ntp true')
if self._data_store.get('mode',None):
archinstall.arguments['mode'] = self._data_store['mode']
archinstall.log(f"Archinstall will execute under {archinstall.arguments['mode']} mode")
if self._data_store.get('LC_ALL',None):
archinstall.storage['CMD_LOCALE'] = {'LC_ALL':self._data_store['LC_ALL']}
else:
exec_locale = {}
for item in ['LC_COLLATE','LC_CTYPE','LC_MESSAGES','LC_NUMERIC','LC_TIME']:
if self._data_store.get(item,None):
exec_locale[item] = self._data_store[item]
archinstall.storage['CMD_LOCALE'] = exec_locale
archinstall.log(f"Archinstall will execute with {archinstall.storage.get('CMD_LOCALE',None)} locale")
class MyMenu(archinstall.GlobalMenu):
def __init__(self,data_store=archinstall.arguments,mode='full'):
self._execution_mode = mode
super().__init__(data_store)
def _setup_selection_menu_options(self):
super()._setup_selection_menu_options()
options_list = []
mandatory_list = []
if self._execution_mode in ('full','lineal'):
options_list = ['keyboard-layout', 'mirror-region', 'harddrives', 'disk_layouts',
'!encryption-password','swap', 'bootloader', 'hostname', '!root-password',
'!superusers', '!users', 'profile', 'audio', 'kernels', 'packages','nic',
'timezone', 'ntp']
if archinstall.arguments.get('advanced',False):
options_list.extend(['sys-language','sys-encoding'])
mandatory_list = ['harddrives','bootloader','hostname']
elif self._execution_mode == 'only_hd':
options_list = ['harddrives', 'disk_layouts', '!encryption-password','swap']
mandatory_list = ['harddrives']
elif self._execution_mode == 'only_os':
options_list = ['keyboard-layout', 'mirror-region','bootloader', 'hostname',
'!root-password', '!superusers', '!users', 'profile', 'audio', 'kernels',
'packages', 'nic', 'timezone', 'ntp']
mandatory_list = ['hostname']
if archinstall.arguments.get('advanced',False):
options_list.expand(['sys-language','sys-encoding'])
elif self._execution_mode == 'minimal':
pass
else:
archinstall.log(f"self._execution_mode {self._execution_mode} not supported")
exit(1)
if self._execution_mode != 'lineal':
options_list.extend(['install','abort'])
if not archinstall.arguments.get('advanced'):
options_list.append('archinstall-language')
for entry in self._menu_options:
if entry in options_list:
# for not lineal executions, only self.option(entry).set_enabled and set_mandatory are necessary
if entry in mandatory_list:
self.enable(entry,mandatory=True)
else:
self.enable(entry)
else:
self.option(entry).set_enabled(False)
self._update_install()
def post_callback(self,option,value=None):
self._update_install(self._execution_mode)
def _missing_configs(self,mode='full'):
def check(s):
return self.option(s).has_selection()
_, missing = self.mandatory_overview()
if mode in ('full','only_os') and (not check('!root-password') and not check('!superusers')):
missing += 1
if mode in ('full', 'only_hd') and check('harddrives'):
if not self.option('harddrives').is_empty() and not check('disk_layouts'):
missing += 1
return missing
def _install_text(self,mode='full'):
missing = self._missing_configs(mode)
if missing > 0:
return f'Instalation ({missing} config(s) missing)'
return 'Install'
def _update_install(self,mode='full'):
text = self._install_text(mode)
self.option('install').update_description(text)
"""
Instalation general subroutines
"""
def get_current_status():
# Log various information about hardware before starting the installation. This might assist in troubleshooting
archinstall.log(f"Hardware model detected: {archinstall.sys_vendor()} {archinstall.product_name()}; UEFI mode: {archinstall.has_uefi()}", level=logging.DEBUG)
archinstall.log(f"Processor model detected: {archinstall.cpu_model()}", level=logging.DEBUG)
archinstall.log(f"Memory statistics: {archinstall.mem_available()} available out of {archinstall.mem_total()} total installed", level=logging.DEBUG)
archinstall.log(f"Virtualization detected: {archinstall.virtualization()}; is VM: {archinstall.is_vm()}", level=logging.DEBUG)
archinstall.log(f"Graphics devices detected: {archinstall.graphics_devices().keys()}", level=logging.DEBUG)
# For support reasons, we'll log the disk layout pre installation to match against post-installation layout
archinstall.log(f"Disk states before installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
def ask_user_questions(mode):
"""
First, we'll ask the user for a bunch of user input.
Not until we're satisfied with what we want to install
will we continue with the actual installation steps.
"""
if archinstall.arguments.get('advanced',None):
# 3.9 syntax. former x = {**y,**z} or x.update(y)
set_cmd_locale(charset='es_ES.utf8',collate='es_ES.utf8')
setup_area = archinstall.storage.get('CMD_LOCALE',{}) | {}
with SetupMenu(setup_area) as setup:
if mode == 'lineal':
for entry in setup.list_enabled_options():
if entry in ('continue','abort'):
continue
if not setup.option(entry).enabled:
continue
setup.exec_option(entry)
else:
setup.run()
archinstall.arguments['archinstall-language'] = setup_area.get('archinstall-language')
else:
archinstall.log("Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki.", fg="yellow")
archinstall.SysCommand('timedatectl set-ntp true')
with MyMenu(data_store=archinstall.arguments,mode=mode) as global_menu:
if mode == 'lineal':
for entry in global_menu.list_enabled_options():
if entry in ('install','abort'):
continue
global_menu.exec_option(entry)
archinstall.arguments[entry] = global_menu.option(entry).get_selection()
else:
global_menu.set_option('install',
archinstall.Selector(
global_menu._install_text(mode),
exec_func=lambda n,v: True if global_menu._missing_configs(mode) == 0 else False,
enabled=True))
global_menu.run()
def perform_filesystem_operations():
"""
Issue a final warning before we continue with something un-revertable.
We mention the drive one last time, and count from 5 to 0.
"""
if archinstall.arguments.get('harddrives', None):
print(f" ! Formatting {archinstall.arguments['harddrives']} in ", end='')
archinstall.do_countdown()
"""
Setup the blockdevice, filesystem (and optionally encryption).
Once that's done, we'll hand over to perform_installation()
"""
mode = archinstall.GPT
if archinstall.has_uefi() is False:
mode = archinstall.MBR
for drive in archinstall.arguments.get('harddrives', []):
if archinstall.arguments.get('disk_layouts', {}).get(drive.path):
with archinstall.Filesystem(drive, mode) as fs:
fs.load_layout(archinstall.arguments['disk_layouts'][drive.path])
def disk_setup(installation):
# Mount all the drives to the desired mountpoint
# This *can* be done outside of the installation, but the installer can deal with it.
if archinstall.arguments.get('disk_layouts'):
installation.mount_ordered_layout(archinstall.arguments['disk_layouts'])
# Placing /boot check during installation because this will catch both re-use and wipe scenarios.
for partition in installation.partitions:
if partition.mountpoint == installation.target + '/boot':
if partition.size < 0.19: # ~200 MiB in GiB
raise archinstall.DiskError(
f"The selected /boot partition in use is not large enough to properly install a boot loader. Please resize it to at least 200MiB and re-run the installation.")
def os_setup(installation):
# if len(mirrors):
# Certain services might be running that affects the system during installation.
# Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist
# We need to wait for it before we continue since we opted in to use a custom mirror/region.
installation.log('Waiting for automatic mirror selection (reflector) to complete.', level=logging.INFO)
while archinstall.service_state('reflector') not in ('dead', 'failed'):
time.sleep(1)
# Set mirrors used by pacstrap (outside of installation)
if archinstall.arguments.get('mirror-region', None):
archinstall.use_mirrors(archinstall.arguments['mirror-region']) # Set the mirrors for the live medium
if installation.minimal_installation():
installation.set_locale(archinstall.arguments['sys-language'], archinstall.arguments['sys-encoding'].upper())
installation.set_hostname(archinstall.arguments['hostname'])
if archinstall.arguments['mirror-region'].get("mirrors", None) is not None:
installation.set_mirrors(
archinstall.arguments['mirror-region']) # Set the mirrors in the installation medium
if archinstall.arguments["bootloader"] == "grub-install" and archinstall.has_uefi():
installation.add_additional_packages("grub")
installation.add_bootloader(archinstall.arguments["bootloader"])
if archinstall.arguments['swap']:
installation.setup_swap('zram')
# If user selected to copy the current ISO network configuration
# Perform a copy of the config
if archinstall.arguments.get('nic', {}) == 'Copy ISO network configuration to installation':
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
elif archinstall.arguments.get('nic', {}):
installation.configure_nic(**archinstall.arguments.get('nic', {}))
installation.enable_service('systemd-networkd')
installation.enable_service('systemd-resolved')
if archinstall.arguments.get('audio', None) is not None:
installation.log(f"This audio server will be used: {archinstall.arguments.get('audio', None)}",level=logging.INFO)
if archinstall.arguments.get('audio', None) == 'pipewire':
archinstall.Application(installation, 'pipewire').install()
elif archinstall.arguments.get('audio', None) == 'pulseaudio':
print('Installing pulseaudio ...')
installation.add_additional_packages("pulseaudio")
else:
installation.log("No audio server will be installed.", level=logging.INFO)
if archinstall.arguments.get('packages', None) and archinstall.arguments.get('packages', None)[0] != '':
installation.add_additional_packages(archinstall.arguments.get('packages', None))
if archinstall.arguments.get('profile', None):
installation.install_profile(archinstall.arguments.get('profile', None))
for user, user_info in archinstall.arguments.get('!users', {}).items():
installation.user_create(user, user_info["!password"], sudo=False)
for superuser, user_info in archinstall.arguments.get('!superusers', {}).items():
installation.user_create(superuser, user_info["!password"], sudo=True)
if timezone := archinstall.arguments.get('timezone', None):
installation.set_timezone(timezone)
if archinstall.arguments.get('ntp', False):
installation.activate_time_syncronization()
if archinstall.accessibility_tools_in_use():
installation.enable_espeakup()
if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw):
installation.user_set_pw('root', root_pw)
# This step must be after profile installs to allow profiles to install language pre-requisits.
# After which, this step will set the language both for console and x11 if x11 was installed for instance.
installation.set_keyboard_language(archinstall.arguments['keyboard-layout'])
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_post_install():
with archinstall.arguments['profile'].load_instructions(
namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported:
if not imported._post_install():
archinstall.log(' * Profile\'s post configuration requirements was not fulfilled.', fg='red')
exit(1)
# If the user provided a list of services to be enabled, pass the list to the enable_service function.
# Note that while it's called enable_service, it can actually take a list of services and iterate it.
if archinstall.arguments.get('services', None):
installation.enable_service(*archinstall.arguments['services'])
# If the user provided custom commands to be run post-installation, execute them now.
if archinstall.arguments.get('custom-commands', None):
archinstall.run_custom_user_commands(archinstall.arguments['custom-commands'], installation)
def perform_installation(mountpoint, mode):
"""
Performs the installation steps on a block device.
Only requirement is that the block devices are
formatted and setup prior to entering this function.
"""
with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get('kernels', ['linux'])) as installation:
if mode in ('full','only_hd'):
disk_setup(installation)
if mode == 'only_hd':
target = pathlib.Path(f"{mountpoint}/etc/fstab")
if not target.parent.exists():
target.parent.mkdir(parents=True)
if mode in ('full','only_os'):
os_setup(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'):
prompt = 'Would you like to chroot into the newly created installation and perform post-installation configuration?'
choice = archinstall.Menu(prompt, ['yes', 'no'], default_option='yes').run()
if choice == 'yes':
try:
installation.drop_to_shell()
except:
pass
# For support reasons, we'll log the disk layout post installation (crash or no crash)
archinstall.log(f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
if not archinstall.check_mirror_reachable():
log_file = os.path.join(archinstall.storage.get('LOG_PATH', None), archinstall.storage.get('LOG_FILE', None))
archinstall.log(f"Arch Linux mirrors are not reachable. Please check your internet connection and the log file '{log_file}'.", level=logging.INFO, fg="red")
exit(1)
mode = archinstall.arguments.get('mode', 'full').lower()
if not archinstall.arguments.get('silent'):
ask_user_questions(mode)
archinstall.output_configs(archinstall.arguments,show=False if archinstall.arguments.get('silent') else True)
if archinstall.arguments.get('dry_run'):
exit(0)
if not archinstall.arguments.get('silent'):
input('Press Enter to continue.')
if mode in ('full','only_hd'):
perform_filesystem_operations()
perform_installation(archinstall.storage.get('MOUNT_POINT', '/mnt'), mode)

View File

@ -3,6 +3,7 @@
import archinstall
import logging
from archinstall.lib.hardware import __packages__ as __hwd__packages__
is_top_level_profile = True
__description__ = 'Installs a minimal system as well as xorg and graphics drivers.'