Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archinstall/__init__.py2
-rw-r--r--archinstall/__main__.py9
-rw-r--r--archinstall/lib/disk.py25
-rw-r--r--archinstall/lib/general.py31
-rw-r--r--archinstall/lib/luks.py8
-rw-r--r--archinstall/lib/mirrors.py8
-rw-r--r--archinstall/lib/networking.py4
-rw-r--r--archinstall/lib/packages.py2
-rw-r--r--archinstall/lib/profiles.py2
-rw-r--r--archinstall/lib/services.py5
-rw-r--r--archinstall/lib/tts.py0
-rw-r--r--docs/conf.py29
-rw-r--r--examples/guided.py3
-rw-r--r--profiles/52-54-00-12-34-56.py13
-rw-r--r--profiles/applications/awesome.py15
-rw-r--r--profiles/awesome.py32
-rw-r--r--profiles/gnome.py2
17 files changed, 114 insertions, 76 deletions
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.