virt-install에 의해 설치된 Ubuntu 커널 매개 변수를 설치할 때 설정

virt-install에 의해 설치된 Ubuntu 커널 매개 변수를 설치할 때 설정

2022-10-03 last update

7 minutes reading
virt-install에서 Ubuntu를 설치할 때이 Ubuntu 커널 매개 변수를 설정하는 방법을 알았으므로 메모를 남겨 둡니다. 호스트 OS와 게스트 OS 모두 우분투 20.04입니다.

결론


virt-install에 --extra-args 'console=ttyS0 --- console=ttyS0' 와 같은 옵션을 주면, "---"전은 인스톨러의 커널 파라미터로서 사용해, "---"의 후에는 인스톨 된 OS의 커널 파라미터로 설정한다.
2022/1/1 23時ごろ追記

これはvirt-installではなくインストーラの機能らしい。Ubuntuでは実際にできることを確認して、かつ、Debianでもドキュメント上はできることを確認した。他のdistroについては調べていないので知らない。

貴重な情報を教えてくださったsatoru_satohさん、naoktonさん、ありがとうございました。

https://twitter.com/satoru_satoh/status/1477253441991110662
https://twitter.com/naokton/status/1477254404017434624

이것을 알게 된 경위


virt-install은 다음과 같이 CUI 환경에서도 text 기반 설치 프로그램을 사용하여 가상 머신에 Ubuntu를 설치할 수 있습니다.
$ virt-install --name ubuntu2004 --vcpus 1--memory 8192 --os-variant ubuntu20.04 --graphics none --extra-args console=ttyS0 --location http://us.archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/
평소 Linux의 GUI(가상 머신의 인스톨의 문맥으로 말하면 virt-manager)를 사용하지 않는 나에게 있어서는 이것은 매우 편리합니다. --extra-args console=ttyS0 옵션에 의해 인스톨러의 커널 파라미터를 설정해, 가상 머신의 콘솔 출력을 시리얼 경유로 virt-install에 건네주도록(듯이) 설정하고 있기 때문입니다.
그러나 인스톨이 종료해 재기동 후 하면 virsh console ubuntu2004 로 연결하려고 하면 이하의 메세지를 발행한 후에 로그인 프롬프트가 나오지 않고, 피크리와도 하지 않습니다.
$ virsh console ubuntu2004
Connected to domain ubuntu2004
Escape character is ^]
이것은 왜인가라고 하면 전술의 --extra-args 옵션의 인수로 건네준 파라미터는 어디까지나 인스톨러의 커널 파라미터를 변경하는 것이며, 인스톨 된 커널의 파라미터는 건드리지 않기 때문입니다.
설치된 커널의 파라미터를 변경하는 방법은 얼마든지 있습니다만, 언제나는 결국 가상 머신을 만들고 싶을 때에 과장된 일은 하고 싶지 않기 때문에, ip neigh 주소를 찾아 ssh 연결하고 거기에서 grub 설정을 다시 쓰고 ...라는 것을하고있었습니다.
그런데 오늘은 일념발기해 virt-install만으로 완결되지 않을까나 여러가지 검색하고 있었던 곳, 정확히 묻는 것이 쓰여진 사이트 를 발견했습니다.
virt-install \
<snip>
    --extra-args 'console=ttyS0,115200n8 --- console=ttyS0,115200n8' \
<snip>
The arguments after the triple dash in the --extra-args option are used when writing the boot loader options. This allows one to see the Linux boot messages on the console on subsequent boots.
그리고 실제로 해보면 할 수 있었습니다.
$ virt-install --name ubuntu2004 --vcpus 1--memory 8192 --os-variant ubuntu20.04 --graphics none --extra-args "console=ttyS0 --- console=ttyS0" --location http://us.archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/
...
$ virsh console ubuntu2004
Connected to domain ubuntu2004
Escape character is ^]

ubuntu login:
로그인해 "/etc/default/grub"를 보면(당연하지만) 제대로 커널 파라미터가 추가되고 있었습니다.
$ cat /etc/default/grub
<snip>
GRUB_CMDLINE_LINUX="console=ttyS0"
<snip>
이런 설정 방법은 매뉴얼에 쓰지 않았기 때문에 virt-install (정확하게는 virt-manager)의 소스 원래 git grep -- --- 를 해도 코드의 어디에도 걸리지 않고. 누군가 알고있는 사람이 있으면 알려주세요.
2022/1/1 23時ごろ追記

これはvirt-installではなくインストーラの機能のようです。Ubuntuでは上記の通り、実際にできることを確認して、かつ、Debianでもドキュメント上はできることを確認しました。他のdistroは調べていないので知らないです。

Ubuntu 20.04のドキュメント:
https://help.ubuntu.com/lts/installation-guide/arm64/ch05s03.html
> Be sure to specify this option after “---”, so that it is copied into the bootloader configuration for the installed system (if supported by the installer for the bootloader).

Debian 11.0のドキュメント:
https://www.debian.org/releases/bullseye/amd64/apbs02.en.html#preseed-bootparms
> A “---” in the boot options has special meaning. Kernel parameters that appear after the last “---” may be copied into the bootloader configuration for the installed system (if supported by the installer for the bootloader).
그리고 이런 일을 하지 않아도 virt-install로 동등한 것을 할 수 있다고 알고 싶은 분이 있으면, 그쪽도 가르쳐 주었으면 합니다.