dracut을 사용하여 initramfs에 스크립트를 포함하는 방법은 무엇입니까?

dracut을 사용하여 initramfs에 스크립트를 포함하는 방법은 무엇입니까?

저는 TPM 칩에서 키를 생성하는 스크립트를 테스트하기 위해 dracut을 사용하여 initramfs를 생성하고 있습니다. 현재 이 스크립트는 initramfs가 올바르게 생성되었는지 확인할 수 있는 더미 스크립트일 뿐입니다.

#!/usr/bin/env bash
#
read -p 'This file will run to initialize the TPM'
exit 0

설치 전 시작 단계에 이 스크립트를 포함하고 싶습니다. "사전 설치 시작 스크립트를 작성하는 방법은 무엇입니까?"라는 질문에 대한 답변을 따랐습니다. 이 포럼에서는 필요에 따라 수정하지만 이미지 파일의 내용을 나열하면 내 스크립트가 존재하지 않습니다. 또한 --include 및 --install dracut 옵션을 사용해 보았지만 오류가 발생하거나 오류가 발생하지 않으면 스크립트가 initramfs에 없는 것입니다. 파일 이름을 tpm.img로 지정하고 /boot 디렉터리에 배치했습니다. 컴퓨터를 부팅할 때 "e"를 눌러 grub 라인을 수정하고 initdefi 명령이 내 tpm.img를 가리키도록 변경했습니다. 물론 내 스크립트는 initramfs에 존재하지 않기 때문에 실행되지 않습니다. dracut 매뉴얼의 "사용자 정의 파일 삽입" 섹션을 이해하고 있는지 잘 모르겠습니다.

https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html

포함할 모듈의 전체 경로를 표시하는 dracut 구성 파일이나 dracut 명령줄 파일의 예를 찾을 수 없습니다. 내 스크립트가 initramfs에 포함되지 않은 이유를 이해하도록 도와주세요.

감사해요! 제프

답변1

나는 성공했다 --include. 에 사용자 정의 스크립트를 넣었다고 가정하면 /etc/dracut.conf.d/tpm.sh다음을 수행할 수 있습니다.

sudo dracut --include /etc/dracut.conf.d/tpm.sh /usr/lib/dracut/hooks/pre-mount/tpm.sh tpm.img

파일은 다음과 같습니다.

$ sudo lsinitrd tpm.img | grep -F tpm.sh
Arguments: --include '/etc/dracut.conf.d/tpm.sh' '/usr/lib/dracut/hooks/pre-mount/tpm.sh'
-rw-rw-r--   1 root     root           80 Apr  5 17:22 usr/lib/dracut/hooks/pre-mount/tpm.sh

불행하게도 내가 아는 한 --include명령줄 옵션에 해당하는 구성 파일은 없습니다. 예 install_items, 와 동일합니다 --install. initramfs의 경로가 기본 FS의 경로와 동일하기 때문에 이 옵션은 하나의 경로만 사용합니다. 따라서 스크립트를 에 넣어야 합니다 /usr/lib/dracut/hooks/pre-mount/tpm.sh. 그런 다음 다음을 만들 수 있습니다 /etc/dracut.conf.d/tpm.conf.

install_items+=" /usr/lib/dracut/hooks/pre-mount/tpm.sh "

그러면 향후 자동으로 생성되는 모든 initramfs 이미지에 이 스크립트가 포함됩니다(예: 커널 업그레이드 시).

답변2

또 다른 옵션은 /usr/lib/dracut/modules.d해당 디렉터리 내에 전용 디렉터리를 만들어 그 안에 90tpm넣는 것입니다 . 또한 빌드 시 함수가 호출되는 tpm.sh특수 스크립트를 넣어야 합니다 . 간단한 것은 다음과 같을 수 있습니다:module-setup.shinstalldracutmodule-setup.sh

#! /bin/bash

install () { inst_hook pre-mount 50 "$moddir/tpm.sh"; }

dracut그러면 추가 매개변수나 구성 파일 없이 호출할 수 있습니다 .

[~]$ ls -l /usr/lib/dracut/modules.d/90tpm
total 8
-rwxr-xr-x. 1 root root 70 Jun  4 01:57 module-setup.sh
-rwxr-xr-x. 1 root root 80 Jun  4 01:46 tpm.sh
[~]$ sudo dracut test.img
[~]$ sudo lsinitrd test.img | grep tpm
tpm
-rwxr-xr-x   1 root     root           80 Apr  5 17:22 usr/lib/dracut/hooks/pre-mount/50-tpm.sh

관련 정보