Digamos que eu tenha uma partição LUKS que criptografa o sistema de arquivos raiz e cuja chave reside em outro sistema de arquivos.
(mapped-devices (list
(mapped-device
(type (luks-device-mapping-with-options #:key-file "/early-mount/luks-key"))
(source "/dev/sda1")
(target "operating-system")
)
))
Como posso instruir o Guix por meio do config.scm
arquivo para montar o segundo sistema de arquivos antes da etapa de descriptografia do LUKS?
Tentativa nº 1
Tentei configurar (needed-for-boot? #t)
o segundo sistema de arquivos, mas ao inspecionar o script initrd gerado, ele ainda tenta descriptografar antes de montar.
(file-system
(mount-point "/early-mount")
(device (file-system-label "early-mount"))
(type "ext4")
(needed-for-boot? #t) ; This doesn't move it to #:pre-mount
)
Tentativa nº 2
Também tentei definir a dependência do sistema de arquivos raiz via (filter)
e (file-system-mount-point-predicate)
mas recebo o erro:
erro: sistemas de arquivos: variável não vinculada
o que faz sentido porque está no meio da definição(file-systems)
(file-systems (cons*
(file-system ...) ; early-mount definition
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
(filter
(file-system-mount-point-predicate "/early-mount")
file-systems ; This is currently being defined so it's not available yet
)
mapped-devices
))
)
%base-file-systems
))
Tentativa nº 3
Tentei criar uma variável local via (let)
para o segundo sistema de arquivos com a intenção de inseri-la (file-systems)
também, (dependencies)
mas recebo o erro:
erro: (let ...): especificador de campo inválido
(let
(
(early-mount
(file-system
(mount-point "/early-mount")
(device (file-system-label "early-mount"))
(type "ext4")
(needed-for-boot? #t)
)
)
)
(file-systems (cons*
early-mount
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
early-mount
mapped-devices
))
)
%base-file-systems
))
)
Tentativa nº 4
Em seguida, tentei repetir a segunda (file-system)
entrada do sistema de arquivos e isso realmente me permitiu implantar a configuração:
(file-systems (cons*
(file-system ...) ; early-mount definition
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
(file-system ...) ; early-mount definition, copy/pasted
mapped-devices
))
)
%base-file-systems
))
no entanto, isso tenta me solicitar a senha durante a inicialização, o que me leva a acreditar que não foi possível montar /early-mount
antes de tentar abrir o LUKS.
Para montar um sistema de arquivos antes que o mapeamento do dispositivo ocorra (por exemplo, quando você precisa de uma chave em uma unidade USB para descriptografar uma partição LUKS), use o
raw-initrd
procedimento dentro do(initrd)
campo(operating-system)
e adicione a montagem no#:pre-mount
parâmetro como este: