index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | archinstall/__init__.py | 2 | ||||
-rw-r--r-- | archinstall/__main__.py | 9 | ||||
-rw-r--r-- | archinstall/lib/disk.py | 25 | ||||
-rw-r--r-- | archinstall/lib/general.py | 31 | ||||
-rw-r--r-- | archinstall/lib/luks.py | 8 | ||||
-rw-r--r-- | archinstall/lib/mirrors.py | 8 | ||||
-rw-r--r-- | archinstall/lib/networking.py | 4 | ||||
-rw-r--r-- | archinstall/lib/packages.py | 2 | ||||
-rw-r--r-- | archinstall/lib/profiles.py | 2 | ||||
-rw-r--r-- | archinstall/lib/services.py | 5 | ||||
-rw-r--r-- | archinstall/lib/tts.py | 0 | ||||
-rw-r--r-- | docs/conf.py | 29 | ||||
-rw-r--r-- | examples/guided.py | 3 | ||||
-rw-r--r-- | profiles/52-54-00-12-34-56.py | 13 | ||||
-rw-r--r-- | profiles/applications/awesome.py | 15 | ||||
-rw-r--r-- | profiles/awesome.py | 32 | ||||
-rw-r--r-- | profiles/gnome.py | 2 |
diff --git a/archinstall/__init__.py b/archinstall/__init__.py index a05b8e95..174c6885 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -11,4 +11,4 @@ from .lib.locale_helpers import * from .lib.services import * from .lib.packages import * from .lib.output import * -from .lib.storage import *
\ No newline at end of file +from .lib.storage import * diff --git a/archinstall/__main__.py b/archinstall/__main__.py index 6cd9d482..fe4a3732 100644 --- a/archinstall/__main__.py +++ b/archinstall/__main__.py @@ -30,14 +30,17 @@ def run_as_a_module(): profile = sys.argv[1] library = find_examples() - if not f'{profile}.py' in library: + if f'{profile}.py' not in library: raise ProfileNotFound(f'Could not locate {profile}.py among the example files.') # Import and execute the chosen `<profile>.py`: - spec = importlib.util.spec_from_file_location(library[f'{profile}.py'], library[f'{profile}.py']) + spec = importlib.util.spec_from_file_location( + library[f"{profile}.py"], + library[f"{profile}.py"] + ) imported_path = importlib.util.module_from_spec(spec) spec.loader.exec_module(imported_path) sys.modules[library[f'{profile}.py']] = imported_path if __name__ == '__main__': - run_as_a_module()
\ No newline at end of file + run_as_a_module() diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py index b11f2318..0d0285d2 100644 --- a/archinstall/lib/disk.py +++ b/archinstall/lib/disk.py @@ -1,6 +1,6 @@ import glob, re, os, json from collections import OrderedDict -from .exceptions import * +from .exceptions import DiskError from .general import * ROOT_DIR_PATTERN = re.compile('^.*?/devices') @@ -21,7 +21,7 @@ class BlockDevice(): return f"BlockDevice({self.device})" def __getitem__(self, key, *args, **kwargs): - if not key in self.info: + if key not in self.info: raise KeyError(f'{self} does not contain information: "{key}"') return self.info[key] @@ -37,9 +37,9 @@ class BlockDevice(): def __dump__(self): return { - 'path' : self.path, - 'info' : self.info, - 'partition_cache' : self.part_cache + 'path': self.path, + 'info': self.info, + 'partition_cache': self.part_cache } @property @@ -50,7 +50,8 @@ class BlockDevice(): If it's a ATA-drive it returns the /dev/X device And if it's a crypto-device it returns the parent device """ - if not 'type' in self.info: raise DiskError(f'Could not locate backplane info for "{self.path}"') + if "type" not in self.info: + raise DiskError(f'Could not locate backplane info for "{self.path}"') if self.info['type'] == 'loop': for drive in json.loads(b''.join(sys_command(f'losetup --json', hide_from_log=True)).decode('UTF_8'))['loopdevices']: @@ -60,7 +61,8 @@ class BlockDevice(): elif self.info['type'] == 'disk': return self.path elif self.info['type'] == 'crypt': - if not 'pkname' in self.info: raise DiskError(f'A crypt device ({self.path}) without a parent kernel device name.') + if 'pkname' not in self.info: + raise DiskError(f'A crypt device ({self.path}) without a parent kernel device name.') return f"/dev/{self.info['pkname']}" # if not stat.S_ISBLK(os.stat(full_path).st_mode): @@ -97,7 +99,8 @@ class BlockDevice(): class Partition(): def __init__(self, path, part_id=None, size=-1, filesystem=None, mountpoint=None, encrypted=False): - if not part_id: part_id = os.path.basename(path) + if not part_id: + part_id = os.path.basename(path) self.path = path self.part_id = part_id self.mountpoint = mountpoint @@ -115,7 +118,7 @@ class Partition(): log(f'Formatting {self} -> {filesystem}') if filesystem == 'btrfs': o = b''.join(sys_command(f'/usr/bin/mkfs.btrfs -f {self.path}')) - if not b'UUID' in o: + if b'UUID' not in o: raise DiskError(f'Could not format {self.path} with {filesystem} because: {o}') self.filesystem = 'btrfs' elif filesystem == 'fat32': @@ -244,11 +247,11 @@ def device_state(name, *args, **kwargs): # lsblk --json -l -n -o path def all_disks(*args, **kwargs): - if not 'partitions' in kwargs: kwargs['partitions'] = False + kwargs.setdefault("partitions", False) drives = OrderedDict() #for drive in json.loads(sys_command(f'losetup --json', *args, **lkwargs, hide_from_log=True)).decode('UTF_8')['loopdevices']: for drive in json.loads(b''.join(sys_command(f'lsblk --json -l -n -o path,size,type,mountpoint,label,pkname', *args, **kwargs, hide_from_log=True)).decode('UTF_8'))['blockdevices']: if not kwargs['partitions'] and drive['type'] == 'part': continue drives[drive['path']] = BlockDevice(drive['path'], drive) - return drives
\ No newline at end of file + return drives diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index d9b0c147..abcf25f0 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -73,9 +73,10 @@ class sys_command():#Thread): Stolen from archinstall_gui """ def __init__(self, cmd, callback=None, start_callback=None, *args, **kwargs): - if not 'worker_id' in kwargs: kwargs['worker_id'] = gen_uid() - if not 'emulate' in kwargs: kwargs['emulate'] = False - if not 'suppress_errors' in kwargs: kwargs['suppress_errors'] = False + kwargs.setdefault("worker_id", gen_uid()) + kwargs.setdefault("emulate", False) + kwargs.setdefault("suppress_errors", False) + if kwargs['emulate']: log(f"Starting command '{cmd}' in emulation mode.") self.raw_cmd = cmd @@ -85,7 +86,8 @@ class sys_command():#Thread): raise ValueError(f'Incorrect string to split: {cmd}\n{e}') self.args = args self.kwargs = kwargs - if not 'worker' in self.kwargs: self.kwargs['worker'] = None + + self.kwargs.setdefault("worker", None) self.callback = callback self.pid = None self.exit_code = None @@ -110,7 +112,8 @@ class sys_command():#Thread): if not os.path.isdir(self.exec_dir): os.makedirs(self.exec_dir) - if start_callback: start_callback(self, *args, **kwargs) + if start_callback: + start_callback(self, *args, **kwargs) self.run() def __iter__(self, *args, **kwargs): @@ -125,14 +128,14 @@ class sys_command():#Thread): def dump(self): return { - 'status' : self.status, - 'worker_id' : self.worker_id, - 'worker_result' : self.trace_log.decode('UTF-8'), - 'started' : self.started, - 'ended' : self.ended, - 'started_pprint' : '{}-{}-{} {}:{}:{}'.format(*time.localtime(self.started)), - 'ended_pprint' : '{}-{}-{} {}:{}:{}'.format(*time.localtime(self.ended)) if self.ended else None, - 'exit_code' : self.exit_code + 'status': self.status, + 'worker_id': self.worker_id, + 'worker_result': self.trace_log.decode('UTF-8'), + 'started': self.started, + 'ended': self.ended, + 'started_pprint': '{}-{}-{} {}:{}:{}'.format(*time.localtime(self.started)), + 'ended_pprint': '{}-{}-{} {}:{}:{}'.format(*time.localtime(self.ended)) if self.ended else None, + 'exit_code': self.exit_code } def run(self): @@ -255,4 +258,4 @@ def prerequisite_check(): return True def reboot(): - o = b''.join(sys_command(("/usr/bin/reboot")))
\ No newline at end of file + o = b''.join(sys_command("/usr/bin/reboot")) diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py index e56f3bd2..d4ee6632 100644 --- a/archinstall/lib/luks.py +++ b/archinstall/lib/luks.py @@ -23,14 +23,15 @@ class luks2(): def encrypt(self, partition, password, key_size=512, hash_type='sha512', iter_time=10000, key_file=None): log(f'Encrypting {partition}') - if not key_file: key_file = f'/tmp/{os.path.basename(self.partition.path)}.disk_pw' #TODO: Make disk-pw-file randomly unique? + if not key_file: + key_file = f"/tmp/{os.path.basename(self.partition.path)}.disk_pw" # TODO: Make disk-pw-file randomly unique? if type(password) != bytes: password = bytes(password, 'UTF-8') with open(key_file, 'wb') as fh: fh.write(password) o = b''.join(sys_command(f'/usr/bin/cryptsetup -q -v --type luks2 --pbkdf argon2i --hash {hash_type} --key-size {key_size} --iter-time {iter_time} --key-file {os.path.abspath(key_file)} --use-urandom luksFormat {partition.path}')) - if not b'Command successful.' in o: + if b'Command successful.' not in o: raise DiskError(f'Could not encrypt volume "{partition.path}": {o}') return key_file @@ -43,7 +44,8 @@ class luks2(): :param mountpoint: The name without absolute path, for instance "luksdev" will point to /dev/mapper/luksdev :type mountpoint: str """ - if '/' in mountpoint: os.path.basename(mountpoint) # TODO: Raise exception instead? + if '/' in mountpoint: + os.path.basename(mountpoint) # TODO: Raise exception instead? sys_command(f'/usr/bin/cryptsetup open {partition.path} {mountpoint} --key-file {os.path.abspath(key_file)} --type luks2') if os.path.islink(f'/dev/mapper/{mountpoint}'): return Partition(f'/dev/mapper/{mountpoint}', encrypted=True) diff --git a/archinstall/lib/mirrors.py b/archinstall/lib/mirrors.py index a4aade9c..1cd53ed0 100644 --- a/archinstall/lib/mirrors.py +++ b/archinstall/lib/mirrors.py @@ -78,16 +78,16 @@ def list_mirrors(): region = 'Unknown region' for line in response.readlines(): - if len(line.strip()) == 0: continue + if len(line.strip()) == 0: + continue line = line.decode('UTF-8').strip('\n').strip('\r') if line[:3] == '## ': region = line[3:] elif line[:10] == '#Server = ': - if not region in regions: - regions[region] = {} + regions.setdefault(region, {}) - url = line[1:].lstrip('Server = ') + url = line.lstrip('#Server = ') regions[region][url] = True return regions
\ No newline at end of file diff --git a/archinstall/lib/networking.py b/archinstall/lib/networking.py index ae4126a9..d24bb911 100644 --- a/archinstall/lib/networking.py +++ b/archinstall/lib/networking.py @@ -3,7 +3,6 @@ import socket import struct from collections import OrderedDict -from .exceptions import * def getHwAddr(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -13,7 +12,8 @@ def getHwAddr(ifname): def list_interfaces(skip_loopback=True): interfaces = OrderedDict() for index, iface in socket.if_nameindex(): - if skip_loopback and iface == 'lo': continue + if skip_loopback and iface == "lo": + continue mac = getHwAddr(iface).replace(':', '-') interfaces[mac] = iface diff --git a/archinstall/lib/packages.py b/archinstall/lib/packages.py index 2f5ebe94..ddf11f7f 100644 --- a/archinstall/lib/packages.py +++ b/archinstall/lib/packages.py @@ -11,7 +11,7 @@ def find_package(name): """ ssl_context = ssl.create_default_context() ssl_context.check_hostname = False - ssl_context.verify_mode=ssl.CERT_NONE + ssl_context.verify_mode = ssl.CERT_NONE response = urllib.request.urlopen(BASE_URL.format(package=name), context=ssl_context) data = response.read().decode('UTF-8') return json.loads(data) diff --git a/archinstall/lib/profiles.py b/archinstall/lib/profiles.py index e018f753..322436c0 100644 --- a/archinstall/lib/profiles.py +++ b/archinstall/lib/profiles.py @@ -106,7 +106,7 @@ class Profile(): # To avoid profiles importing the wrong 'archinstall', # we need to ensure that this current archinstall is in sys.path archinstall_path = os.path.abspath(f'{os.path.dirname(__file__)}/../../') - if not archinstall_path in sys.path: + if archinstall_path not in sys.path: sys.path.insert(0, archinstall_path) instructions = self.load_instructions() diff --git a/archinstall/lib/services.py b/archinstall/lib/services.py index 43051f0f..8fcdd296 100644 --- a/archinstall/lib/services.py +++ b/archinstall/lib/services.py @@ -3,11 +3,10 @@ import os from .exceptions import * from .general import * -def service_state(service_name :str): +def service_state(service_name: str): if os.path.splitext(service_name)[1] != '.service': - service_name += '.service' # Just to be safe + service_name += '.service' # Just to be safe state = b''.join(sys_command(f'systemctl show -p SubState --value {service_name}')) return state.strip().decode('UTF-8') -
\ No newline at end of file diff --git a/archinstall/lib/tts.py b/archinstall/lib/tts.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/archinstall/lib/tts.py diff --git a/docs/conf.py b/docs/conf.py index 63e08e8a..02e6cb92 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,17 +1,18 @@ -import sys, os +import os +import re +import sys sys.path.insert(0, os.path.abspath('..')) -import re def process_docstring(app, what, name, obj, options, lines): - spaces_pat = re.compile(r"( {8})") - ll = [] - for l in lines: - ll.append(spaces_pat.sub(" ",l)) - lines[:] = ll + spaces_pat = re.compile(r"( {8})") + ll = [] + for l in lines: + ll.append(spaces_pat.sub(" ", l)) + lines[:] = ll def setup(app): - app.connect('autodoc-process-docstring', process_docstring) + app.connect('autodoc-process-docstring', process_docstring) # Configuration file for the Sphinx documentation builder. # @@ -110,8 +111,10 @@ htmlhelp_basename = 'slimhttpdoc' # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'archinstall', u'archinstall Documentation', - [u'Anton Hvornum'], 1) + ( + "index", "archinstall", u"archinstall Documentation", + [u"Anton Hvornum"], 1 + ) ] # If true, show URL addresses after external links. @@ -124,6 +127,8 @@ man_pages = [ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'archinstall', u'archinstall Documentation', - u'Anton Hvornum', 'archinstall', 'Simple and minimal HTTP server.'), + ( + "index", "archinstall", u"archinstall Documentation", + u"Anton Hvornum", "archinstall", "Simple and minimal HTTP server." + ), ] diff --git a/examples/guided.py b/examples/guided.py index 6de5d6f8..70c2050d 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -88,7 +88,8 @@ archinstall.storage['_guided']['harddrive'] = harddrive # Ask for a hostname hostname = input('Desired hostname for the installation: ') -if len(hostname) == 0: hostname = 'ArchInstall' +if len(hostname) == 0: + hostname = 'ArchInstall' archinstall.storage['_guided']['hostname'] = hostname # Ask for a root password (optional, but triggers requirement for super-user if skipped) diff --git a/profiles/52-54-00-12-34-56.py b/profiles/52-54-00-12-34-56.py index 2f289c0e..679c6721 100644 --- a/profiles/52-54-00-12-34-56.py +++ b/profiles/52-54-00-12-34-56.py @@ -22,7 +22,11 @@ with archinstall.Filesystem(harddrive, archinstall.GPT) as fs: with archinstall.luks2(harddrive.partition[1], 'luksloop', disk_password) as unlocked_device: unlocked_device.format('btrfs') - with archinstall.Installer(unlocked_device, boot_partition=harddrive.partition[0], hostname='testmachine') as installation: + with archinstall.Installer( + unlocked_device, + boot_partition=harddrive.partition[0], + hostname="testmachine" + ) as installation: if installation.minimal_installation(): installation.add_bootloader() @@ -37,7 +41,12 @@ with archinstall.Filesystem(harddrive, archinstall.GPT) as fs: print(f'Submitting {commit}: success') - conditions = {"project" : "archinstall", "profile" : "52-54-00-12-34-56", "status" : "success", "commit" : commit} + conditions = { + "project": "archinstall", + "profile": "52-54-00-12-34-56", + "status": "success", + "commit": commit + } req = urllib.request.Request("https://api.archlinux.life/build/success", data=json.dumps(conditions).encode('utf8'), headers={'content-type': 'application/json'}) diff --git a/profiles/applications/awesome.py b/profiles/applications/awesome.py index 72945275..c0f0951d 100644 --- a/profiles/applications/awesome.py +++ b/profiles/applications/awesome.py @@ -1,14 +1,19 @@ import archinstall -installation.add_additional_packages("awesome xorg-xrandr xterm feh slock terminus-font-otb gnu-free-fonts ttf-liberation xsel") +installation.add_additional_packages( + "awesome xorg-xrandr xterm feh slock terminus-font-otb gnu-free-fonts ttf-liberation xsel" +) with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'r') as xinitrc: xinitrc_data = xinitrc.read() for line in xinitrc_data.split('\n'): - if 'twm &' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") - if 'xclock' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") - if 'xterm' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") + if "twm &" in line: + xinitrc_data = xinitrc_data.replace(line, f"# {line}") + if "xclock" in line: + xinitrc_data = xinitrc_data.replace(line, f"# {line}") + if "xterm" in line: + xinitrc_data = xinitrc_data.replace(line, f"# {line}") xinitrc_data += '\n' xinitrc_data += 'exec awesome\n' @@ -22,4 +27,4 @@ with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'r') as awesome_r awesome = awesome.replace('xterm', 'xterm -ls -xrm \\"XTerm*selectToClipboard: true\\"') with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'w') as awesome_rc_lua: - awesome_rc_lua.write(awesome)
\ No newline at end of file + awesome_rc_lua.write(awesome) diff --git a/profiles/awesome.py b/profiles/awesome.py index 0a695344..db8f42d7 100644 --- a/profiles/awesome.py +++ b/profiles/awesome.py @@ -2,6 +2,7 @@ import archinstall + def _prep_function(*args, **kwargs): """ Magic function called by the importing installer @@ -18,6 +19,7 @@ def _prep_function(*args, **kwargs): else: print('Deprecated (??): xorg profile has no _prep_function() anymore') + # Ensures that this code only gets executed if executed # through importlib.util.spec_from_file_location("awesome", "/somewhere/awesome.py") # or through conventional import awesome @@ -32,17 +34,19 @@ if __name__ == 'awesome': # Then setup and configure the desktop environment: awesome arguments = { #'keyboard_layout' : 'sv-latin1', - "editor" : "nano", - "mediaplayer" : "lollypop gstreamer gst-plugins-good gnome-keyring", - "filebrowser" : "nemo gpicview-gtk3", - "webbrowser" : "chromium", - "window_manager" : "awesome", - "virtulization" : "qemu ovmf", - "utils" : "openssh sshfs git htop pkgfile scrot dhclient wget smbclient cifs-utils libu2f-host", - "audio" : "pulseaudio pulseaudio-alsa pavucontrol" + "editor": "nano", + "mediaplayer": "lollypop gstreamer gst-plugins-good gnome-keyring", + "filebrowser": "nemo gpicview-gtk3", + "webbrowser": "chromium", + "window_manager": "awesome", + "virtulization": "qemu ovmf", + "utils": "openssh sshfs git htop pkgfile scrot dhclient wget smbclient cifs-utils libu2f-host", + "audio": "pulseaudio pulseaudio-alsa pavucontrol" } - installation.add_additional_packages("{webbrowser} {utils} {mediaplayer} {window_manager} {virtulization} {filebrowser} {editor}".format(**arguments)) + installation.add_additional_packages( + "{webbrowser} {utils} {mediaplayer} {window_manager} {virtulization} {filebrowser} {editor}".format( + **arguments)) #with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'a') as X11: # X11.write('setxkbmap se\n') @@ -56,7 +60,10 @@ if __name__ == 'awesome': awesome_lua = awesome_rc_lua.read() # Insert slock as a shortcut on Modkey+l (window+l) - awesome_lua = awesome_lua.replace('\nglobalkeys = gears.table.join(', 'globalkeys = gears.table.join(\n awful.key({ modkey, }, \"l\", function() awful.spawn(\"slock &\") end,\n') + awesome_lua = awesome_lua.replace( + "\nglobalkeys = gears.table.join(", + "globalkeys = gears.table.join(\n awful.key({ modkey, }, \"l\", function() awful.spawn(\"slock &\") end,\n" + ) # Insert some useful applications: #awesome = awesome.replace('{ "open terminal", terminal, ','{ "Chromium", "chromium" },\n "open terminal", terminal, ') @@ -75,5 +82,6 @@ if __name__ == 'awesome': awesome_rc_lua.write(awesome_lua) # Remove some interfering nemo settings - installation.arch_chroot('gsettings set org.nemo.desktop show-desktop-icons false') - installation.arch_chroot('xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search')
\ No newline at end of file + installation.arch_chroot("gsettings set org.nemo.desktop show-desktop-icons false") + installation.arch_chroot( + "xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search") diff --git a/profiles/gnome.py b/profiles/gnome.py index 62519264..b37679de 100644 --- a/profiles/gnome.py +++ b/profiles/gnome.py @@ -32,4 +32,4 @@ if __name__ == 'gnome': installation.enable_service('gdm') # Gnome Display Manager # We could also start it via xinitrc since we do have Xorg, - # but for gnome that's deprecated and wayland is preferred.
\ No newline at end of file + # but for gnome that's deprecated and wayland is preferred. |