! NetBSD でシングルユーザーモードを使う !!現象 root ですら login できなくなってしまった。 !!やったこと 不要なパッケージを削除しようとして [[その他の NetBSD パッケージコレクション用コマンド|http://www.jp.netbsd.org/ja/Documentation/software/packages.html#other_commands]] を見て、たしかこんなことをやった。 for i in `pkg_info | awk '{ print $0 }'`; do pkg_delete $i; done 実行してから root が zsh を使ってることを思い出してすぐに止めた。 vipw やろうとしたら $EDITOR が emacsclient だったので ~/.zshenv を編集してとりあえず $EDITOR を vi にして logout して login したら Shared object "libzsh-4.2.1.so" not found といわれて login 直後にまた login プロンプトに戻ってしまった。 一般ユーザ rin も zsh を使っていたので login するとこんなことを言われる。 rin@sakura[~]% ssh kahori rin@kahori's password: Last login: Thu Nov 4 06:52:21 2004 NetBSD 2.99.10 (GENERIC) #1: Sat Oct 30 17:49:02 JST 2004 Welcome to NetBSD! Shared object "libzsh-4.2.1.so" not found Connection to kahori closed. rin@sakura[~]% ひとまずシングルユーザーモードで起動しようと考えたけど、まず root になれないので shutdown できない。なので電源スイッチオフ。 しかしシングルユーザーモードで起動する方法が分からない。 [[シングルユーザーモードってなに、どうして、なんのため?|http://www.jp.netbsd.org/ja/Documentation/misc/index.html#why-single-user]] を読んだけど ""システムの起動中に、 '-s' フラグを使う(この方法は port ごとによってさまざまです) ことでもできます。 i386 port での方法が書いてない。 ぐぐって [[vimrc diary|http://vimrc.hp.infoseek.co.jp/diary/2004-10.html#2004-10-15]] の 「 root の password を忘れたとき」を発見。 boot netbsd -s mount -u / mount -u /dev/wd0e /usr として /etc/passwd の root の shell を /bin/sh に変更。reboot 。 しかし相変わらず login したあとに「 Shared object "libzsh-4.2.1.so" not found 」と言われてまた login に戻ってしまう。 login shell を /bin/sh にしたので zsh は関係ないだろうと思ったのだけど、関係あるんだろか。 ! NetBSD としさめに聞いたら「 vipw で編集しろ 」と言われたので、たぶんこんなことをやった。 boot netbsd -s シングルユーザーで起動。 mount -u / シングルユーザーで起動すると ro で mount される / を rw で mount しなおし。 mount -a /etc/fstab に書いてあるファイルシステムをすべて mount vipw して root の login shell を確認すると /usr/pkg/bin/zsh のままだった。こんなところに vipw の恩恵。login shell を /bin/sh に変更。 シングルユーザーから抜けるには exit もしくは Ctrl-D する。 [[どうやって、シングルユーザーからマルチユーザーに移行するの|http://www.jp.netbsd.org/ja/Documentation/misc/index.html#single-user-to-multi-user]] 私は reboot してしまった。 ひとまずこれにて root で login できるようになった。 !! 追記 *[[FAQ - よくあるカーネルに関する質問 - カーネルの作り方|http://www.jp.netbsd.org/ja/Documentation/kernel/#how_to_build_a_kernel]] 何か問題があったら: シングルユーザーモードで 'netbsd.old' カーネルをブートしましょう。 変更する手順はブート手順に依存していますが、i386 ではこうでしょう: 1. 最初の NetBSD のメッセージが表示されたら SPACE を押す 2. "boot netbsd.old -s"