Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-03-29 16:19:52 +0000
committerGitHub <noreply@github.com>2021-03-29 16:19:52 +0000
commitbb5caf70b7c3daae863778738775823a51b0b92b (patch)
treea2bdefe6205388899336a75392e2969199a25b91
parent4c5be619181b34093e42306c00526fb56e0a328f (diff)
parentb03de49f0f6d29ec8cb7588c2216eb70d523e74d (diff)
Merge pull request #125 from Torxed/torxed-v2.2.3
Fixes encrypted -> non-encrypted setups
-rw-r--r--archinstall/lib/disk.py25
-rw-r--r--archinstall/lib/luks.py2
-rw-r--r--examples/guided.py8
3 files changed, 21 insertions, 14 deletions
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
index 9afece2e..9ad49ac2 100644
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -1,5 +1,5 @@
import glob, re, os, json, time, hashlib
-import pathlib
+import pathlib, traceback
from collections import OrderedDict
from .exceptions import DiskError
from .general import *
@@ -107,7 +107,7 @@ class BlockDevice():
if part_id not in self.part_cache:
## TODO: Force over-write even if in cache?
if part_id not in self.part_cache or self.part_cache[part_id].size != part['size']:
- self.part_cache[part_id] = Partition(root_path + part_id, part_id=part_id, size=part['size'])
+ self.part_cache[part_id] = Partition(root_path + part_id, self, part_id=part_id, size=part['size'])
return {k: self.part_cache[k] for k in sorted(self.part_cache)}
@@ -133,9 +133,11 @@ class BlockDevice():
self.part_cache = OrderedDict()
class Partition():
- def __init__(self, path, part_id=None, size=-1, filesystem=None, mountpoint=None, encrypted=False, autodetect_filesystem=True):
+ def __init__(self, path :str, block_device :BlockDevice, part_id=None, size=-1, filesystem=None, mountpoint=None, encrypted=False, autodetect_filesystem=True):
if not part_id:
part_id = os.path.basename(path)
+
+ self.block_device = block_device
self.path = path
self.part_id = part_id
self.mountpoint = mountpoint
@@ -189,7 +191,10 @@ class Partition():
@encrypted.setter
def encrypted(self, value :bool):
- log(f'Marking {self} as encrypted', level=LOG_LEVELS.Debug)
+ if value:
+ log(f'Marking {self} as encrypted: {value}', level=LOG_LEVELS.Debug)
+ log(f"Callstrack when marking the partition: {''.join(traceback.format_stack())}", level=LOG_LEVELS.Debug)
+
self._encrypted = value
@property
@@ -316,6 +321,12 @@ class Partition():
else:
raise UnknownFilesystemFormat(f"Fileformat '{filesystem}' is not yet implemented.")
+
+ if get_filesystem_type(path) == 'crypto_LUKS' or get_filesystem_type(self.real_device) == 'crypto_LUKS':
+ self.encrypted = True
+ else:
+ self.encrypted = False
+
return True
def find_parent_of(self, data, name, parent=None):
@@ -431,7 +442,7 @@ class Filesystem():
"""
return self.raw_parted(string).exit_code
- def use_entire_disk(self, root_filesystem_type='ext4', encrypt_root_partition=True):
+ def use_entire_disk(self, root_filesystem_type='ext4'):
log(f"Using and formatting the entire {self.blockdevice}.", level=LOG_LEVELS.Debug)
self.add_partition('primary', start='1MiB', end='513MiB', format='fat32')
self.set_name(0, 'EFI')
@@ -451,10 +462,6 @@ class Filesystem():
self.blockdevice.partition[0].allow_formatting = True
self.blockdevice.partition[1].allow_formatting = True
- if encrypt_root_partition:
- log(f"Marking partition {self.blockdevice.partition[1]} as encrypted.", level=LOG_LEVELS.Debug)
- self.blockdevice.partition[1].encrypted = True
-
def add_partition(self, type, start, end, format=None):
log(f'Adding partition to {self.blockdevice}', level=LOG_LEVELS.Info)
diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py
index 30c38ec8..19c21795 100644
--- a/archinstall/lib/luks.py
+++ b/archinstall/lib/luks.py
@@ -113,7 +113,7 @@ class luks2():
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}'):
self.mapdev = f'/dev/mapper/{mountpoint}'
- unlocked_partition = Partition(self.mapdev, encrypted=True, filesystem=get_filesystem_type(self.mapdev), autodetect_filesystem=False)
+ unlocked_partition = Partition(self.mapdev, None, encrypted=True, filesystem=get_filesystem_type(self.mapdev), autodetect_filesystem=False)
unlocked_partition.allow_formatting = self.partition.allow_formatting
return unlocked_partition
diff --git a/examples/guided.py b/examples/guided.py
index 92331450..71e1e01d 100644
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -247,10 +247,10 @@ def perform_installation_steps():
with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT) as fs:
# Wipe the entire drive if the disk flag `keep_partitions`is False.
if archinstall.arguments['harddrive'].keep_partitions is False:
- fs.use_entire_disk(root_filesystem_type=archinstall.arguments.get('filesystem', 'btrfs'),
- encrypt_root_partition=archinstall.arguments.get('!encryption-password', False))
- # Otherwise, check if encryption is desired and mark the root partition as encrypted.
- elif archinstall.arguments.get('!encryption-password', None):
+ fs.use_entire_disk(root_filesystem_type=archinstall.arguments.get('filesystem', 'btrfs'))
+
+ # Check if encryption is desired and mark the root partition as encrypted.
+ if archinstall.arguments.get('!encryption-password', None):
root_partition = fs.find_partition('/')
root_partition.encrypted = True