FreeNAS 8.2.0 の init: getty repeating too quickly on port /dev/ttyv0, sleeping 30 secs

困った

FreeNAS を 8.2.0 にアップデートしたところ、ログに次のようなメッセージが延々と繰り返し表示されるようになりました(>_<)

Dec  4 09:30:51 freenas init: getty repeating too quickly on port /dev/ttyv0, sleeping 30 secs

恐らく・・・

  • (init) getty 起動するよ
  • (init) 何回やっても何回やっても getty が即死するよ
  • (init) 疲れたんで 30 秒寝てからまた頑張ります!

と言っているのだと思います。英語とかわからないので適当ですが。

とりあえずググると言語設定を English にすれば治るらしいですが、残念ながらこの方法は使えません。英語とかよくわかんないので。

調べた

仕方ないので詳しく調べることにしました。

getty がおかしいのならとりあえず initab を見てみるといいんじゃないでしょうか

# cat /etc/inittab  
cat: /etc/inittab: No such file or directory

( ゚Д゚)ハァ?

・・・そういえば FreeBSD なんてほとんど触ったことがありませんでした。

気を取り直して /etc の直下からそれっぽいファイルを探して覗いてみました。

# grep ttyv0 /etc/ttys 
ttyv0   "/usr/libexec/getty freenas"    cons25  on  secure

# grep -A1 freenas /etc/gettytab
FreeNAS|freenas|FreeNAS Menu:\
        :ht:np:sp#15200:lo=/etc/netcli.sh:al=root:
freenas_serial:\
        :ht:np:sp#9600:lo=/etc/netcli.sh:al=root:

どうやら getty → /etc/netcli.sh → 即死 のコンボになっているようです。

試しに /etc/netcli.sh を直接実行してみましたが・・・

# /etc/netcli.sh
Console setup
-------------

1) Configure Network Interfaces
2) Configure Link Aggregation
3) Create VLAN Interface
4) Configure Default Route
5) Configure Static Routes
6) Configure DNS
7) Reset WebGUI login credentials
8) Reset to factory defaults

と表示されるだけでした。本当なら「どの項目選ぶねん」みたいなプロンプトになるのだと思います。

/etc/netcli.sh の中身は次のようなシェルスクリプトだったので・・・

/etc/netcli.sh

#!/bin/sh
# Helper script to set the path for netcli menu
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
exec /etc/netcli

/etc/netcli を弄ればどうにかなりそうです。只のシェルスクリプトなら FreeBSD でも Linux でも対して変わらないでしょう!

修正した

早速 /etc/netcli を弄り倒すことにします

vi /etc/netcli

/etc/netcli

#!/usr/bin/env python
   :
 以下略

いろんな意味で終わりました。英語はよく判りませんが python はもっとよく判りません(>_<)

仕方ないので先生に教えてもらいました。

さすが先生、一発で引き当ててくれました。

コンソールに文字を表示しようとして、でも適切なフォントが無くて表示出来ずに死んでしまっているっぽいです。英語とかわかんないので適当ですが。

要約すると次のようにすると解決するみたいです。

  1. / を rw で再マウント(mount -o rw /dev/ufs/FreeNASs1a /)
  2. /conf/base/etc/netcli から "Shell" という文字を探す
  3. Shell, Reboot, Shutdown の 3 つを SHELL, REBOOT, SHUTDOWN に書き換える
  4. リブートする

3 番目は要するに翻訳されないようにすればいいので _("Shell")"Shell" のように書き換えても良いと思います。

ちなみに /etc/netcli を直接書き換えてもブート時に /conf/base/etc/netcli からコピーされるのでダメなようです(/etc はramfsっぽい)。

追記した

なんとなく FreeNAS の WebUI を眺めていたら「システム -> 設定 -> 高度な設定」に「コンソールメニューの有効化」という項目がありました。

f:id:ngyuki:20121204220525p:plain

試しにこれを off にして /conf/base/etc/netcli も元に戻してリブートしてみると・・・例のメッセージは出なくなりました。その代わりにコンソールがメニューっぽいものでは無く、只のログインプロンプトになってしまいましたが。

まとめると次のいずれかで解決出来るようです。

  • 言語設定を English にする
  • コンソールメニューを off にする
  • ↑のように /conf/base/etc/netcli を修正する