Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archinstall/lib/disk.py4
-rw-r--r--archinstall/lib/exceptions.py2
-rw-r--r--archinstall/lib/installer.py16
-rw-r--r--docs/archinstall/general.rst10
-rw-r--r--profiles/applications/mate.py3
-rw-r--r--profiles/desktop.py2
-rw-r--r--profiles/mate.py34
7 files changed, 60 insertions, 11 deletions
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
index 1a2dc4dc..bada4076 100644
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -199,9 +199,9 @@ class Partition():
mount_repr = f", rel_mountpoint={self.target_mountpoint}"
if self._encrypted:
- return f'Partition(path={self.path}, real_device={self.real_device}, fs={self.filesystem}{mount_repr})'
+ return f'Partition(path={self.path}, size={self.size}, real_device={self.real_device}, fs={self.filesystem}{mount_repr})'
else:
- return f'Partition(path={self.path}, fs={self.filesystem}{mount_repr})'
+ return f'Partition(path={self.path}, size={self.size}, fs={self.filesystem}{mount_repr})'
@property
def uuid(self) -> str:
diff --git a/archinstall/lib/exceptions.py b/archinstall/lib/exceptions.py
index a320eef6..49913980 100644
--- a/archinstall/lib/exceptions.py
+++ b/archinstall/lib/exceptions.py
@@ -18,4 +18,6 @@ class HardwareIncompatibilityError(BaseException):
class PermissionError(BaseException):
pass
class UserError(BaseException):
+ pass
+class ServiceException(BaseException):
pass \ No newline at end of file
diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py
index 92e89f26..4ff9e80a 100644
--- a/archinstall/lib/installer.py
+++ b/archinstall/lib/installer.py
@@ -178,9 +178,11 @@ class Installer():
if self.enable_service('ntpd'):
return True
- def enable_service(self, service):
- self.log(f'Enabling service {service}', level=LOG_LEVELS.Info)
- return self.arch_chroot(f'systemctl enable {service}').exit_code == 0
+ def enable_service(self, *services):
+ for service in services:
+ self.log(f'Enabling service {service}', level=LOG_LEVELS.Info)
+ if (output := self.arch_chroot(f'systemctl enable {service}')).exit_code != 0:
+ raise ServiceException(f"Unable to start service {service}: {output}")
def run_command(self, cmd, *args, **kwargs):
return sys_command(f'/usr/bin/arch-chroot {self.target} {cmd}')
@@ -245,14 +247,12 @@ class Installer():
# If we haven't installed the base yet (function called pre-maturely)
if self.helper_flags.get('base', False) is False:
def post_install_enable_networkd_resolved(*args, **kwargs):
- self.enable_service('systemd-networkd')
- self.enable_service('systemd-resolved')
-
+ self.enable_service('systemd-networkd', 'systemd-resolved')
self.post_base_install.append(post_install_enable_networkd_resolved)
# Otherwise, we can go ahead and enable the services
else:
- self.enable_service('systemd-networkd')
- self.enable_service('systemd-resolved')
+ self.enable_service('systemd-networkd', 'systemd-resolved')
+
return True
diff --git a/docs/archinstall/general.rst b/docs/archinstall/general.rst
index 312c03af..c3913ea9 100644
--- a/docs/archinstall/general.rst
+++ b/docs/archinstall/general.rst
@@ -91,3 +91,13 @@ Exceptions
.. autofunction:: archinstall.ProfileError
.. autofunction:: archinstall.SysCallError
+
+.. autofunction:: archinstall.ProfileNotFound
+
+.. autofunction:: archinstall.HardwareIncompatibilityError
+
+.. autofunction:: archinstall.PermissionError
+
+.. autofunction:: archinstall.UserError
+
+.. autofunction:: archinstall.ServiceException
diff --git a/profiles/applications/mate.py b/profiles/applications/mate.py
new file mode 100644
index 00000000..24d6be47
--- /dev/null
+++ b/profiles/applications/mate.py
@@ -0,0 +1,3 @@
+import archinstall
+
+installation.add_additional_packages("mate mate-extra lightdm lightdm-gtk-greeter") \ No newline at end of file
diff --git a/profiles/desktop.py b/profiles/desktop.py
index 4d64dcef..846182e2 100644
--- a/profiles/desktop.py
+++ b/profiles/desktop.py
@@ -16,7 +16,7 @@ def _prep_function(*args, **kwargs):
for more input before any other installer steps start.
"""
- supported_desktops = ['gnome', 'kde', 'awesome', 'sway', 'cinnamon', 'xfce4', 'lxqt', 'i3', 'budgie']
+ supported_desktops = ['gnome', 'kde', 'awesome', 'sway', 'cinnamon', 'xfce4', 'lxqt', 'i3', 'budgie', 'mate']
desktop = archinstall.generic_select(supported_desktops, 'Select your desired desktop environment: ')
# Temporarily store the selected desktop profile
diff --git a/profiles/mate.py b/profiles/mate.py
new file mode 100644
index 00000000..b4c697b1
--- /dev/null
+++ b/profiles/mate.py
@@ -0,0 +1,34 @@
+# A desktop environment using "MATE"
+
+import archinstall
+
+is_top_level_profile = False
+
+def _prep_function(*args, **kwargs):
+ """
+ Magic function called by the importing installer
+ before continuing any further. It also avoids executing any
+ other code in this stage. So it's a safe way to ask the user
+ for more input before any other installer steps start.
+ """
+
+ # MATE requires a functional xorg installation.
+ profile = archinstall.Profile(None, 'xorg')
+ with profile.load_instructions(namespace='xorg.py') as imported:
+ if hasattr(imported, '_prep_function'):
+ return imported._prep_function()
+ 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("mate", "/somewhere/mate.py")
+# or through conventional import mate
+if __name__ == 'mate':
+ # Install dependency profiles
+ installation.install_profile('xorg')
+
+ # Install the application mate from the template under /applications/
+ mate = archinstall.Application(installation, 'mate')
+ mate.install()
+
+ installation.enable_service('lightdm') # Light Display Manager