AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 786259
Accepted
Daniel
Daniel
Asked: 2024-11-07 14:26:12 +0800 CST2024-11-07 14:26:12 +0800 CST 2024-11-07 14:26:12 +0800 CST

Guix: Como definir um (file-system) como dependência de outro? Ou montar um dispositivo antes do mapeamento de dispositivos?

  • 772

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.scmarquivo 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-mountantes de tentar abrir o LUKS.

boot
  • 1 1 respostas
  • 25 Views

1 respostas

  • Voted
  1. Best Answer
    Daniel
    2024-11-10T19:25:37+08:002024-11-10T19:25:37+08:00

    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-initrdprocedimento dentro do (initrd)campo (operating-system)e adicione a montagem no #:pre-mountparâmetro como este:

    (operating-system
    
        ;...
    
        (mapped-devices ...) ; As normal
    
        (file-systems ...) ; With or without the file system to 'pre-mount'
    
        (initrd
            (lambda*
                (
                    file-systems
                    #:key
                        (linux-modules '())
                        (keyboard-layout #f)
                        (helper-packages '())
                        volatile-root?
                        #:allow-other-keys
                    ; Will always include all keys. Call raw-initrd with this first then override.
                    #:rest all-key-arguments
                )
    
                (apply
                    raw-initrd
                    (append
                        (list file-systems)
                        all-key-arguments
                        (list
                            ; TODO https://issues.guix.gnu.org/74285
                            ;#:linux-modules linux-modules 
                            #:pre-mount
                                #~(begin
                                    (use-modules (
                                        (gnu build file-systems)
                                            #:select (mount-file-system)
                                    ))
                                    (mount-file-system
                                        (file-system
                                            (mount-point "/mnt/my-label")
                                            (device (file-system-label "my-label"))
                                            (type "ext4")
                                        )
                                        ; This is needed otherwise the mount point
                                        ;  will be prefixed by '/root'
                                        #:root ""
                                    )
                                )
                            #:helper-packages (append
                                helper-packages
                                (file-system-packages
                                    file-systems
                                    #:volatile-root? volatile-root?
                                )
                                (if keyboard-layout
                                    (list loadkeys-static)
                                    '()
                                )
                            )
                        )
                    )
                )
            )
        )
    )
    
    • 0

relate perguntas

  • Por que `journalctl --list-boots` não corresponde ao relatório `uptime` e `who -b`?

  • Como iniciar um programa de console na inicialização (dentro de ../openbox/autostart)

  • Sistema intacto, grub quebrado

  • "pacman -Syu" 'provavelmente' quebrou meu sistema, porque a inicialização não foi montada

  • SSD clonado não inicializa e imprime linhas estranhas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve