それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

USBシリアルのttyUSB0 でgrub を使えるのか。

LinuxをインストールしたPCをリモートメンテナンスしたい。

Linuxをインストールして、サーバやルータとして利用している格安PCをリモートでメンテナンスしてたい。

IPMI 対応を買えと言われればそれまでだが。ネットワーク周りを触ってミスってつながらなくなる、アップグレード時にトラブルなどが恐ろしいので。リモートからネットワーク経由以外の方法でメンテナンスする経路を確保しておきたい。

Raspberry Pi ZeroをUSB-OTGでつないでおくとか、Raspberry PiとPCをシリアルでつないでおけば、RaspberryPiを踏み台にgrubの起動画面を見られるはずですよね。

結論。

Grubはできない。Fedora/CentOSならなんとかできる。Ubuntu/Debianはできない。

最初に結論を書いておくと、ttyUSB0を起動時に扱うのは、USBドライバ一式をブートローダーに含める必要があり、またLinuxが起動時ttyUSBを扱うにはカーネルにUSBドライバを含める必要がある。

ブートのシーケンスを、よく考えると当たり前じゃんって思います。

どちらのOSも起動後でUSB機器を認識し後であれば、getty を起動して「ログイン login:」を出すことはできる。

いろいろ調べた結果。

以前のCentOSだと、カーネルのビルドオプションにCONFIG_USB_SERIAL_CONSOLE=y が設定されていて、USBシリアルがカーネルに含まれるっぽい。

どうやら、そういうことらしい。なので、次のブログのような記述で動くっぽいですね。

http://qunisaki.blog.fc2.com/blog-entry-22.html?sp

USB-serial を利用する ついでにサーバとして使うので VGA の代わりに USB serial を設定することにした。(grub は USB serial に対応していないのでそこでは使えないが・・・)

USB-serialのドライバを起動時に組込むために /etc/dracut.conf の追加ドライバに pl2303 を追加して、initrd を再生成しておく。 add_drivers+="mmc_block sdhci sdhci-pci pl2303" grub2 の設定(/etc/default/grub) の GRUB_CMDLINE_LINUX に "console=tty console=ttyUSB0,115200n8" を追加すれば、起動時に USB serial が繋がっていれば出力されるようになる。

さらに、USB serial を常時繋いでいたくはないので、以下の systemd 設定で USB serial を差したら getty が起動されるようにした。

ln -sf /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants ?>getty@ttyUSB0.service これで使えるようになった!と思ったら、これだと syslog に以下のようなエラーログが延々と出力さてしまう。 Apr 10 06:51:54 flora systemd: getty@ttyUSB0.service has no holdoff time, scheduling restart.

Stack Exchange のスレに紹介されているので

Debian のバグレポートを見たりすると

Debian currently does not build its Linux kernel with CONFIG_USB_SERIAL_CONSOLE=y, which is required for this feature to work.

The corresponding bug report is https://bugs.debian.org/cgi-bin/bugreport.cgi?> bug=868352

After building my own kernel with CONFIG_USB_SERIAL_CONSOLE=y (see https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official), I also had to include the FTDI serial driver for my adapter in the initrd

Afterwards, I successfully see the boot messages and can log in via the automatically starting serial-getty@ttyUSB0 service.

Debianチームは、USBシリアルのために、USB全部を含めるなんてありえないって言ってる感じですね

I think this case is too unusual to make it worth building in all the USB stuff needed to make this work on all x86 systems.

まぁFedoraは有効にしているから、いずれ誰かがぱぱっと変えるんだろうけど、それはまでは野良ビルドを作るしかない。

野良ビルドをメンテナンスしていくほど私は暇じゃないので諦めるか、必要なときにFedoraを使うことにする。