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.