FreeBSD11.2サポート期間間もなく終了

サーバーメンテナンスを行っていたところ、現在使用している FreeBSD 11.2 のサポートライフサイクルが間もなく終了するとメッセージが出て来ました。
サポートライフサイクルが終了するからといって慌てる必要はありませんが、半年以内に ports パッケージの更新に影響が出るので、いずれ更新せざるを得なくなります。

来週から忙しくなる予定で、どうせ更新するしかないなら、その前に遠隔地に置いてある2台の FreeBSD 11.2サーバーだけでも 11.3 に上げておくことにしました。OS再起動に失敗すると、現場の人に対処して頂くしかないので、万が一の場合、余裕がある平日深夜に更新作業を行いました。失敗しても昼間に作業をお願いできますからね。

そして、今回は、やっちゃいました。

2台中一台は、FreeBSD10.2から、更新、更新を行ってきた64bit サーバー。こっちは特に問題なし。
もう一台は、FreeBSD 7の時代から、ハードウェアを替えながら、データを dump/restore で丸々引き継ぎながら、今 32bit FreeBSD 11.2 で動いているサーバー。

freebsd-update -r コマンドは何度も使っているので、使い始めた頃はびびっていた操作も、最近では事務的流れ作業になってきました。

# freebsd-update -r 11.3-RELEASE upgrade

今回も、表示される /etc 配下のファイルを手作業で編集し、保存し、y, y, y と答えて行くだけ。64bit サーバーの方は、編集ファイルが数個だったのが、32bit サーバーの方は、トラブルシュートの対処が雑だったのか、/etc 配下のテキストファイルのヘッダーに大量の前OSバージョン「FreeBSD 10.3」 を含むヘッダーファイルが残っていて、これを手作業で一つ一つ編集して行く必要がありました。

表示は、こんな感じ。詳しくは過去メモへ

<<<<<<< current version 
# $FreeBSD: releng/10.3/etc/master.passwd 299365 2016-05-10 12:47:36Z bcr $ 
======= 
# $FreeBSD: releng/11.3/etc/master.passwd 299365 2016-05-10 12:47:36Z bcr $ 
>>>>>>> 11.3-RELEASE

オリジナルから編集しているカスタマイズファイルが多いと、その数分編集を繰り返す必要があります。
そして、システムがクラッシュした時などに、別のサーバーからファイルをコピーして対処した場合などは、設定の記述にはしっかりやりますが、こんなファイルのヘッダーなんか気にしないわけです。そのツケが、OS更新時にやってきます。今回がまさにそう。

編集は忍耐強く行うかしか手段はありません。(または全て諦めるかですが、こっちは選択肢にない。)
実際のところ、ヘッダーファイルにコメントとして書かれているバージョンが違うからといってOSの動きに問題が発生することはないので、ひたすら根気が要るだけの仕事。何の生産性も無し。

殆どは、上から3行と、11.3 の下のマーカー1行を消せば終わりですが、5ファイルに1ファイルくらい違うパターンがあるから手抜きが出来ないのが面倒。30分くらい/etc配下の設定ファイルを編集し、ようやくOS再起動。
最後に、「freebsd-update install」コマンドを発行して作業完了。

成功と、思ってました。実際、OSは無事に FreeBSD11.3になっているし、デーモン類も動いていて問題なし。

ところが、ちょっと編集したい /etc 以下のファイルがあり、su で root になろうとしたらroot になれない!

svr:~>	su
su: Sorry
svr:~>	su
su: Sorry

あれれ。なにこれ?
passwdデータベースが壊れたか?

よくよく見てみると、壊れたどころの話じゃなく、/etc/passwd ファイルに、root アカウントが無い!!!

やっちまったよ〜。どうしよう〜。

事務的な流れ作業の指使いで上から3行を消してしまったようです。(3行と1行を消すべきところ、3行+3行を消しちゃったんでしょうね。3dd j dd と行うべきところを、3dd . とやっちまったみたい。)

# $FreeBSD: releng/11.2/etc/master.passwd 299365 2016-05-10 12:47:36Z bcr $
#
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5:System &:/:/usr/sbin/nologin

さてどうしよう。サーバーは動いているものの、何もメンテナンスできない!

これが手元にあるサーバーなら、ルートHDDを取り外して、別のFreeBSDの/mntあたりにマウントして、パスワード関係のファイルをコピーしたあと戻せば回復できます。(こういう事があるから私は rootファイルシステムには、RAIDとか暗号化をかけたくない。)

問題はこれがリモートサーバーであって手を出せないって事。サーバーを送ってもらうしかないのか?
ず〜ん と気分が重くなっていたところ、ふとpasswdファイル最上位にある toor アカウントを思い出しました。

FreeBSD の toor は root と同じ権限を持つbashシェルアカウントですが、通常はディスエーブル状態。
しかし、リモートサーバーは不慮の事故に備えて、過去に有効化していたような記憶が蘇ってきました。

su - toor

と、試して見たところ、過去の設定が残ってました。無事に ‘#’ プロンプトが出て来てひと安心。

あとは、手作業でpasswdファイルの root アカウントの行を作り直したあと、パスワードを設定し直すことで復旧完了。

いやいや、焦りました。繰り返し手作業は気付かないうちにこういう事をやっちゃう。まさか自分が、passwd  ファイルから root 行を削除してしまうとは考えもしませんでした。

緊張感のない流れ作業、恐ろしや〜。

コメントを残す