Merge pull request #125 from Torxed/torxed-v2.2.3

Fixes encrypted -> non-encrypted setups
This commit is contained in:
Anton Hvornum 2021-03-29 16:19:52 +00:00 committed by GitHub
commit bb5caf70b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 14 deletions

View File

@ -1,5 +1,5 @@
import glob, re, os, json, time, hashlib import glob, re, os, json, time, hashlib
import pathlib import pathlib, traceback
from collections import OrderedDict from collections import OrderedDict
from .exceptions import DiskError from .exceptions import DiskError
from .general import * from .general import *
@ -107,7 +107,7 @@ class BlockDevice():
if part_id not in self.part_cache: if part_id not in self.part_cache:
## TODO: Force over-write even if in 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']: 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)} return {k: self.part_cache[k] for k in sorted(self.part_cache)}
@ -133,9 +133,11 @@ class BlockDevice():
self.part_cache = OrderedDict() self.part_cache = OrderedDict()
class Partition(): 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: if not part_id:
part_id = os.path.basename(path) part_id = os.path.basename(path)
self.block_device = block_device
self.path = path self.path = path
self.part_id = part_id self.part_id = part_id
self.mountpoint = mountpoint self.mountpoint = mountpoint
@ -189,7 +191,10 @@ class Partition():
@encrypted.setter @encrypted.setter
def encrypted(self, value :bool): 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 self._encrypted = value
@property @property
@ -316,6 +321,12 @@ class Partition():
else: else:
raise UnknownFilesystemFormat(f"Fileformat '{filesystem}' is not yet implemented.") 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 return True
def find_parent_of(self, data, name, parent=None): def find_parent_of(self, data, name, parent=None):
@ -431,7 +442,7 @@ class Filesystem():
""" """
return self.raw_parted(string).exit_code 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) log(f"Using and formatting the entire {self.blockdevice}.", level=LOG_LEVELS.Debug)
self.add_partition('primary', start='1MiB', end='513MiB', format='fat32') self.add_partition('primary', start='1MiB', end='513MiB', format='fat32')
self.set_name(0, 'EFI') self.set_name(0, 'EFI')
@ -451,10 +462,6 @@ class Filesystem():
self.blockdevice.partition[0].allow_formatting = True self.blockdevice.partition[0].allow_formatting = True
self.blockdevice.partition[1].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): def add_partition(self, type, start, end, format=None):
log(f'Adding partition to {self.blockdevice}', level=LOG_LEVELS.Info) log(f'Adding partition to {self.blockdevice}', level=LOG_LEVELS.Info)

View File

@ -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') 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}'): if os.path.islink(f'/dev/mapper/{mountpoint}'):
self.mapdev = 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 unlocked_partition.allow_formatting = self.partition.allow_formatting
return unlocked_partition return unlocked_partition

View File

@ -247,10 +247,10 @@ def perform_installation_steps():
with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT) as fs: with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT) as fs:
# Wipe the entire drive if the disk flag `keep_partitions`is False. # Wipe the entire drive if the disk flag `keep_partitions`is False.
if archinstall.arguments['harddrive'].keep_partitions is False: if archinstall.arguments['harddrive'].keep_partitions is False:
fs.use_entire_disk(root_filesystem_type=archinstall.arguments.get('filesystem', 'btrfs'), 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. # Check if encryption is desired and mark the root partition as encrypted.
elif archinstall.arguments.get('!encryption-password', None): if archinstall.arguments.get('!encryption-password', None):
root_partition = fs.find_partition('/') root_partition = fs.find_partition('/')
root_partition.encrypted = True root_partition.encrypted = True