Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/general.py
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-11-23 23:09:33 +0000
committerGitHub <noreply@github.com>2021-11-24 00:09:33 +0100
commite729457b6c12a00b17207254ee72e98b78912f8d (patch)
tree554c13c7a363ccc5ef2c25873af15598df9a2ba3 /archinstall/lib/general.py
parent29736c4a051d2c72bcbf0b20abdebc6992a92e4b (diff)
Support encrypting multiple partitions (#759)
* Added support for storing disk encryption keyfiles and add them to a keyslot. * Added a luks2().add_key() function in order to inject a keyfile into a keyslot on a encrypted volume. * Simplified 'missing encryption password' logic in Filesystem(). Added a call to luks2().add_key() after the root-password is set on the volume, to add the keyfile in slot 2 * Adding in password handling in luks2().add_key(). It's required to enter a previous passphrase to unlock the volume and add a new keyslot. Also simplified the handling of partition in Installer().mount_ordered_layout() * Adding in encryption on all partitions except /boot when encryption is opted in * Removed setting size on Partition() as it's a read only value. No idea how Partition().size = size hasn't caused an issue before. Removed size=X argument to Partition() * Added a uniqueness to the loopdevice name. This should ensure that multiple encrypted volumes can be opened at the same time, except for Partition().detect_inner_filesystem() operations which can only happen one at a time since they share namespace. This should never be an issue since archinstall is single threaded and no concurrent operations can/should happen. * Added partprobe() as part of disk/helpers.py, added a /dev/ -> UUID mapper function called convert_device_to_uuid(path). Added a luks2().crypttab() function that sets up a /etc/crypttab entry. * Moved the responsability for telling archinstall to generate a keyfile from Filesystem() to user_interaction.py. This should in the future be a user-input based value, and not something the Filesystem() automatically dictates. * Added a retry mechanism to luks2().encrypt() to avoid having to re-start the installation when a device simply wasn't up yet. * Swapping UUID= lookup from loopdev to physdev.
Diffstat (limited to 'archinstall/lib/general.py')
-rw-r--r--archinstall/lib/general.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py
index a057af5a..48de4cbe 100644
--- a/archinstall/lib/general.py
+++ b/archinstall/lib/general.py
@@ -2,8 +2,10 @@ import hashlib
import json
import logging
import os
+import secrets
import shlex
import subprocess
+import string
import sys
import time
from datetime import datetime, date
@@ -46,6 +48,9 @@ from .storage import storage
def gen_uid(entropy_length=256):
return hashlib.sha512(os.urandom(entropy_length)).hexdigest()
+def generate_password(length=64):
+ haystack = string.printable # digits, ascii_letters, punctiation (!"#$[] etc) and whitespace
+ return ''.join(secrets.choice(haystack) for i in range(length))
def multisplit(s, splitters):
s = [s, ]
@@ -61,7 +66,6 @@ def multisplit(s, splitters):
s = ns
return s
-
def locate_binary(name):
for PATH in os.environ['PATH'].split(':'):
for root, folders, files in os.walk(PATH):