2011/12/31(Sat)Fedora15 -> Fedora16 へのアップグレード

2011/12/31 19:45 Software::Linux
半年おきにメジャーアップデートされるFedoraですが、そろそろFedora 16が出て2~3ヶ月というところ。
ユーザも増えて情報量も増えてきた頃なのでアップデートしてみたのだが、その時のTipsやメモのまとめ。

アップデートって面倒?

普段サーバ機には電源ケーブルとLANケーブルしか刺さっていないが、今までアップデートの時はVGAケーブルとキーボードを接続してモニタリングしていた。
サーバの置いてあるスペースなんて、普段立ち入らないから狭い隙間しかないので、この手間が結構大変。

というわけで、大きな問題が起こらない事を祈りつつ、LAN内からオンラインアップデートしてみました。*1

*1 : もちろん対外接続はdownさせて、スタンドアローン状態にはしている

事前準備

とりあえずyumで最新にしておくことと、.rpm(save|new)という設定ファイルを適当にマージなり削除しておくことでしょうか。
初めてpreupgradeを使う人は、 yum install preupgradeもお忘れ無く。
#  yum update

#  find /etc -print | egrep "rpm(new|save)$"
公式Wikiでは/全体を探してますが、だいたい/etcの下にしか設定ファイルは無いのでこれで十分です。

アップデート作業

preupgrade

いつものようにpreupgrade-cliコマンドを使ってやります。
が、いつものLANG=ja_JP.UTF-8だと途中でエラーを起こして止まってしまうので*2、LANG=Cを付けるのがミソです

使い方は簡単で、第1引数に"Fedora xx (CODENAME)"と書くだけですが、引数無しで実行するとアップグレード可能なバージョンが列挙されるのでコピペすると良いでしょう。
これまで避けていたバージョン飛ばしアップデートですが、公式Wikiによると
Upgrade to current release directly
Preupgrade provides an upgrade directly to the latest version of Fedora. It is not necessary to upgrade to intermediate versions. For example, it is possible to go from Fedora 14 to Fedora 16 directly.
とのことなので、例えばFedora 14から16にいきなり上げても良いみたいです。

VNCオプションが便利

そしてその時、VNCオプションを与えて、サーバのIPアドレス情報をstaticに指定してやると、再起動後のパッケージインストール中の様子をVNCで見守る事ができちゃいます。
# LANG=C preupgrade-cli --vnc[=password] --ip=[IPADDR] --netmask=[NETMASK] --gateway=[IPADDR] --dns=[DNSSERVER] "Fedora 16 (Verne)"
どーせパッケージダウンロードは再起動に行うので、ゲートウェイやDNSのアドレスはどうでも良いのですが、一応ね。
あと、VNCパスワードは適当に1234等にすると"6文字以上で"と怒られたりしました。よしなにしましょう。

VNCオプションを付けていた場合、
The upgrade will start a VNC server on port 5901, requiring the given password.
等と最後に表示されるので、サーバが再起動したのを見計らって先ほどのIPアドレスの5901番に接続すれば見えます。解像度はXGAでした。
ちなみに、この時sshなどは拒否されるので、実質制御は何も出来ないと考えた方がよさそうです。


サポートされないパッケージの削除

アップデートが終わったら、サポートされなくなったパッケージの削除を行っておきます。
#  package-cleanup --orphans

アップデートのベリファイ

repolistで正しいFedora 16のリポジトリが設定されている事を確認して、リポジトリと正しくバージョン同期が取れているかを確認。
yum updateと違ってdistro-syncは、downgradeが必要な場合にはdowngradeを行ってくれる点が違うようです。
#  yum repolist

#  yum distro-sync

*2 : いつの頃からかyumの出力が日本語になったのと関係あるかな?

Fedora 15から16になって注意する事

grub2

今回からGRUB->GRUB2に変更されたので、/boot/grub/menu.lstではなく/boot/grub2/grub.cfgに変更になってます。
しかも、このファイルは動的に作られるらしく、GRUBの各種設定は/etc/default/grubに書くだとか、テンプレートは/etc/grub.d/にあるとか勝手が変わっていて、最後に、 grub2-mkconfig -o /boot/grub2/grub.cfgとする流儀のようです。

Windows Vista以後のNTLDR(+boot.ini)->BOOTMGRへの変更のように、テキストファイルのエントリを直接するスタイルから、プログラムを使って動的生成するスタイルにシフトしつつあるんですかね……。
個人的には、その互換OSが無いとブートエントリが編集できなくなるようなブートシステムは好みじゃないんですがねー。

systemd

Fedora 15からいくつかのサービスがservice, chkconfigコマンドで管理されるSysVからsystemdという新しい管理体系に変わりました。

Fedora 14 -> Fedora 15の移行の時にもcrondが自動起動しなくなっていたり、困った事はいくつかあったのですが、Fedora 16になってさらに多くのシステムサービスがsystemdに移行したことで、自動起動しないアプリが多数ありました。ここは注意。

一つ一つ確認しておきましょう。
#  systemctl -a | grep \.service | lv
主に困ったのは
  • httpd
  • mysqld
  • smb, nmb
など…。
#  systemctl enable httpd.service

#  systemctl start httpd.service
のように2つコマンドを打っておけば、自動起動の設定と即時起動できます

あと、SysV系のpostfixも何故か立ち上がってこなかったので、service postfix startしたり…


SysV系、減りましたな…
▼Fedora 15
$ chkconfig --list | cut -f1

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

auditd
cpuspeed
dnsmasq
hddtemp
httpd
ip6tables
iptables
irda
mdmonitor
multipathd
named
netconsole
netfs
network
nfs
nfslock
pcscd
psacct
rpcbind
rpcgssd
rpcidmapd
rpcsvcgssd
rrdgraph
saslauthd
sendmail
snmpd
snmptrapd
sshd
svnserve
wpa_supplicant
ypbind
▼Fedora 16
$ chkconfig --list | cut -f1

注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。
      systemd services. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。
dc_client
dc_server
fetchmail
ipmi
named
netconsole
netfs
network
postfix
rrdgraph
svnserve
※上記の結果は異なる筐体の出力です。

追記: 2つ以上のNICがある場合 2012/01/31

オンボードのeth0とPCIスロットのeth1がある場合、preupgradeに指定したVNCサーバはeth0側で立っていました。お間違えの無いよう。

参考文献

How to use PreUpgrade - FedoraProject