전체 시스템 암호화 USB 드라이브 Arch 설치를 위한 mkinitcpio.conf의 Cryptohook

전체 시스템 암호화 USB 드라이브 Arch 설치를 위한 mkinitcpio.conf의 Cryptohook

컴퓨터에 Arch Linux를 설치했습니다USB 드라이브그리고시스템 전체 암호화LUKS를 사용하세요. Arch 위키는 평소처럼 거의 모든 것을 안내해 주었습니다. 내가 가진 유일한 문제는 mkinitcpio.Arch 위키에서 USB 설치의 경우 block후크가 udev후크 바로 뒤에 와야 한다고 말합니다. Wikipedia에서는 또한 암호화를 위해 encrypt후크가 후크 앞에 있어야 하지만 반드시 바로 옆에 있을 필요는 없다고 말합니다 filesystem. 다음 규칙에 따라 처음 시도했습니다.

HOOKS="encrypt base udev block autodetect modconf filesystems keyboard fsck"

하지만 작동하지 않아서 encrypt뒤로 이동했습니다.

HOOKS="base udev block autodetect modconf encrypt filesystems keyboard fsck"

그리고 그것은 훌륭하게 작동합니다. 이것은 내 질문으로 이어집니다. 후크의 종속성은 무엇입니까 encrypt? 후크 종속성에 대한 자세한 내용은 어디에서 찾을 수 있나요?

답변1

귀하의 후크는 모두 여기에 있습니다:

% ls /usr/lib/initcpio/{hooks,install}
/usr/lib/initcpio/hooks:
btrfs        dmraid   keymap  mdadm    mhwd-fb  miso_loop_mnt  net     shutdown  udev  v86d
consolefont  encrypt  lvm2    memdisk  miso     miso_pxe_nbd   resume  sleep     usr

/usr/lib/initcpio/install:
autodetect  consolefont  fw        mdadm_udev  miso_loop_mnt  pata    sd-encrypt   sleep    usbinput
base        dmraid       keyboard  memdisk     miso_pxe_nbd   pcmcia  sd-lvm2      strip    usr
bcache      encrypt      keymap    mhwd-fb     mmc            resume  sd-shutdown  systemd  v86d
block       filesystems  lvm2      miso        modconf        sata    sd-vconsole  udev     virtio
btrfs       fsck         mdadm     miso_kms    net            scsi    shutdown     usb

둘 다 쉘 스크립트입니다.

% cat /usr/lib/initcpio/{hooks,install}/encrypt
#!/usr/bin/ash
run_hook() {
    modprobe -a -q dm-crypt >/dev/null 2>&1
    [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
    # Get keyfile if specified
    ckeyfile="/crypto_keyfile.bin"
    if [ -n "$cryptkey" ]; then
        IFS=: read ckdev ckarg1 ckarg2 <<EOF
...

이것은 여러분이 이미 알고 있는 것입니다. 매우 친숙합니다.

기본적으로 초기 사용자 공간에서 어떤 일이 일어나기를 원한다면 필요한 커널 모듈을 로드하고 그에 따라 행동하면 됩니다. 이것이 바로 이러한 모든 후크가 수행하는 작업입니다.

이미지에서 무슨 일이 일어나고 있는지 알고 싶다면 initramfs다음을 살펴보세요.

% lsinitcpio --help lsinitcpio 17 usage: lsinitcpio [action] [options] 
usage: lsinitcpio [action] [options] <initramfs>

  Actions:
   -a, --analyze        analyze contents of image
   -c, --config         show configuration file image was built with
   -l, --list           list contents of the image (default)
   -x, --extract        extract image to disk

  Options:
   -h, --help           display this help
   -n, --nocolor        disable colorized output
   -V, --version        display version information
   -v, --verbose        more verbose output

lsinitcpio편리하지만 다른 기능과 마찬가지로 도우미 쉘 기능에 지나지 않습니다. 디스크 이미지를 보면 실제로는 그 이상 아무것도 아니라는 것을 알 수 있습니다. 결국 일반 Linux 루트 이미지일 뿐입니다.

% mkdir /tmp/init ; cd $_
% lsinitcpio $(printf /boot/*.img | head -n1) | grep -Eo '^./[^/]*' | sort -u
./VERSION
./bin
./buildconfig
./config
./dev
./etc
./init
./init_functions
./lib
./lib64
./new_root
./proc
./run
./sbin
./sys
./tmp
./usr

다음과 같이 추출할 수 있습니다.

% lsinitcpio --extract $(printf /boot/*.img | head -n1)
% ls
dev
etc
new_root
proc
run
sys
tmp
usr
VERSION
bin
buildconfig
config
init
init_functions
lib
lib64
sbin

그리고 주위를 둘러보세요:

% cat ./init_functions
...
default_mount_handler() {
    if [ ! -b "$root" ]; then
        err "Unable to find root device '$root'."
        echo "You are being dropped to a recovery shell"
        echo "    Type 'exit' to try and continue booting"
        launch_interactive_shell
        msg "Trying to continue (this will most likely fail) ..."
    fi
    msg ":: mounting '$root' on real root"
    if ! mount ${fstype:+-t $fstype} -o ${rwopt:-ro}${rootflags:+,$rootflags} "$root" "$1"; then
        echo "You are now being dropped into an emergency shell."
        launch_interactive_shell
        msg "Trying to continue (this will most likely fail) ..."
    fi
}
...

답변2

문제는 후크가 HOOKS 라인(단지 배열)에 나열된 순서대로 실행된다는 것입니다 /etc/mkinitcpio.conf. 기본적으로 암호화 스크립트를 실행하려고 합니다.앞으로base시작하는 데 필요한 런타임을 제공하는 후크 1 .

각 후크를 발행하여 해당 후크에 대한 정보를 읽을 수 있습니다 mkinitcpio -H $hook.

이것Arch Wiki mkinitcpio 페이지좋은 설명이 있습니다. 각 후크를 읽어 /usr/lib/initcpio/hooks/실제로 실행 중인 내용을 확인할 수도 있습니다.

아치 개발자 mkinitcpioDave Reisner는 다음과 같습니다.mkinitcpio 최적화서로 어떻게 결합되는지 자세히 설명합니다.


base1. Archwiki mkinitcpio 페이지에는 "무슨 일을 하고 있는지 알지 않는 한" 항상 후크를 먼저 포함해야 한다고 명시되어 있습니다 .강사에게 경고하다...

관련 정보