いつもの通り、Fedoraのバージョンが上がってから二週間前後たったので自鯖のアップグレードを行うことに決め、その作業をやっていたのですが・・・。
いままでのFedoraの更新とは訳が違うほどやっかいでした。Fedora15を新規インストールする人でも変わった点がかなりあるので注意してインストールが必要です。
ちなみに、その後の最新状態への更新でもいろいろと引っかかる項目があるのでそれも気にしながら・・。
更新インストールそのものは今まで通り
です。インストール用のISOイメージをダウンロードした後にDVDに焼いてアップグレードインストールを行うだけです。
この作業は新規インストールでも同じはずですのでそれほど難しくないのですが・・・。
デスクトップがMacっぽい?
Fedora15ではデスクトップがGNOME3に更新されていますが、これが妙にMacを意識したとしか思えない画面です。
特に設定画面が完璧にMacでした。ま、Fedora15をクライアントとして使うわけではないのであまり気にはしませんが。
クライアントOSとして使う分にはMacを使うみたいな感じなのでその分にはいいのかもしれませんが・・・。
ネットワークアダプタなどの名前付け規則が変更されているの
といっても、私の環境でアップグレードしたときには変更されませんでしたが・・・。
ネットワークアダプタの名前が今までの「eth0」などから、アダプタ固有の識別名+管理番号の形に変わっています。
特にアダプタ名を直接指定して動かすようなdaemon(iptablesなど)ではこれを覚えておく必要があります。
Daemon系の管理が変わっているので要注意
これが今回のFedora14=>Fedora15における最大の問題点かも。
daemon(というよりはサービス)の管理がFedora14まではSysVという形式で動いていたわけですが、これが今回新しくsystemdという形式を使うようにしたわけです。
利点とかは調べればわかると思いますので省きますが、これによって旧のサービスは相変わらず/etc/rc.d/以下で管理されるわけですが、systemdに対応したサービスは/etc/systemd/以下と/lib/systemd/以下に管理ファイルが置かれることになります。
さらに追加すると、SysV系からの脱却のためにランレベルの管理もかなり変更されています。特にinittabが不要ファイルとなり、ランレベルの管理もちょっと特殊な管理になるように変更されています。
たとえば、Fedora15のインストール時点では起動時ランレベルは一応5(Graphic)となっていますが、これを3(Multi-User)に変更するにはこんな方法を使います。
# rm /etc/systemd/system/default.target # ln -s /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
ちなみに、このdefault.targetがないと・・・どうなるのでしょうか?実験したくないので間違えないようにしましょうね。
動作中の切り替えであればinitコマンドが使用できますのでそれで変更可能です。ちなみに、ランレベル2~4はsystemd上では同じ設定ファイルを指すようになっています。
そして、サービスの起動および起動予約のやり方がまた面倒。
これを行うにはsystemctlというコマンドを使います。
たとえば、いままで(SysV系)のhttpdの起動/状態確認/停止/起動時実行は以下のようにしてきました。
# service httpd start # service httpd status # service httpd stop # chkconfig httpd on # chkconfig httpd off
これがsystemdでは以下のように記述します。
# systemctl start httpd.service # systemctl status httpd.service # systemctl stop httpd.service # systemctl enable httpd.service # systemctl disable httpd.service
それぞれのコマンドがすべてsystemctlコマンドに集結したような体制になっています。
これからみてわかるとおり、systemdでのdaemon系の処理はsystemctlコマンドを通して行います。
が、これがまだ移行段階のため、SysVのみで記述されたもの、systemdのみで記述されたもの、擬似的に両方に対応しているものが混在している状態です。
systemdのみの場合はSysV形式の動作設定はできず、SysVのみの場合はsystemd形式の動作設定は基本的にはできません。なお、httpdは最後の擬似的に両方に対応しているものなります。
また、systemctlの起動時実行に関してはsystemctlがchkconfigを内部的に呼び出す仕様になっているため、その設定だけは共通で使えます。(止まらないこともありますが)
面倒なのはサービス一覧を出したりするときですね。systemdでサービス一覧を出そうと
# systemctl list-units
とやっても、SysV形式で記述されたdaemonは表示されませんし、もちろん
# chkconfig --list
とやっても、systemd形式で記述されたdaemonは表示されないので両方確認しないとだめです。
これ以降がんばって統一されていくんでしょうかね・・・。
ちなみに、SysVでのサービス処理は内部的にはsystemctlの処理に置き換えられています。そのため表向きSysVが使える、ということですね。
そしてパッケージ更新後のKernel Panic
最後にはまった現象がこれ。yumでFedora15のパッケージをすべて更新した後に起こった出来事。
大量更新の後の再起動が私の流儀なのですが、再起動するとどうもマシンからの応答がない。
画面を見てみるとそこには「Kernel Panic」の無情な文字が・・・。
なぜに?という思いを秘めながらこのことについて調べてみたり、kernelのバージョンを戻してみたりして何とか復旧しましたが・・・。
(原因は後で説明しますが)Fedora15でパッケージを使ってkernelを更新するとどうもこんな感じになるらしいです。とある解説ページ(英語)では
kernel-develとkernel-debugをインストールすれば直る
とか
/bootでdracut –forceとする
とかいろいろとありましたが。
で、結局原因はkernelのパッケージにinitramfdがついていないために正しい起動シーケンスを行うことができなかったというものでした。
何でついていないでしょ?という疑問はありますが、簡単な解決法は起動するためのkernelを過去バージョンに戻す、というものです。
インストールディスクから「Rescue installed system」で起動させた後に
# vi /mnt/sysimage/boot/grub/grub.conf
でインストールされたkernelを使う起動をコメントアウトでつぶして元のkernelを使うようにします。
Fedora15の場合、初期カーネルに「rc1」の文字がついているのでわかりやすいと思います。
それでkernelイメージを戻して起動できれば「とりあえず放置」か「kernelの再構築でinitramfdを作成できるようにする」かどちらかになるとおもいます。面倒なら前者でしばらくはどうにかできるはずです。
initramfdを作成するときには先にも書いたとおりdracutコマンドを使うことで作成できます。なお、再構築の手順を取らずにdracutで作成しようとすると、(私の場合)確かに起動するのですが、ネットワークアダプタが見つからないという致命的状態になったのでいろいろと大変でした・・・。
今後kernelの更新時には(特に遠隔操作の場合)かなりの注意が必要だな~と思わせてくれる出来事でした。
6/17 追記
この段階でkernelをyum経由でupdateしましたが、問題なく更新できたことを確認しました。
これがミスなのか何なのかがよくわかりませんが、この件は毎回確認しないとまずそうですね・・・。
私の自鯖は動くようにはなったのでとりあえずよしとしておきます。
インストール後の処理に本当に珍しく時間がかかりました。Fedora15での変更は大きかった、というわけですね。