努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


サイドバー

documents:freebsd:freebsd-013

FreeBSD8.2-RELEASEからFreeBSD9.0-RC3へのアップグレード

2011/12/12

FreeBSD9.0-RELEASE前に練習。実運用中のマシンでやっちゃ駄目よ?

ここで使うマシンは

CPU: AMD Phenom(tm) 8450e Triple-Core Processor (2099.93-MHz K8-class CPU)

という、今となっては古すぎる部類の奴で、アーキテクチャはamd64(64bit)です。

2012/01/05
9.0-RELEASE出ました。同じ手順でインストール出きる事を確認しました。

ソース取得

ずっとcvsupコマンドでやってきてるので今回も。supfileに書くtagはこれでよいみたい。

*default release=cvs tag=RELENG_9_0

freebsd-updateコマンドでもいいんでしょうけど、わたしはうまくいった事が数えるほどしかないので。

portsも念のため新しくする

いつも使っている方法でportsツリーも新しくしておきましょう。わたしはこれもcvsupを使ってます。

OSのビルドとインストール

UPDATINGには特に目立ったものはなさそうなので、Makefileに書かれている手順でコンパイルしていきます。

make buildworld

-j オプションで処理を多重にしてくれるそうなので、4多重=-j4 を指定。

make -j4 buildworld

この -j4 は他のターゲットの時も指定してくださいな。このmakeが通ればツール回りが出来たのはずなので、次はカーネルのビルド。

…お、コンパイルオプションに

  -DLLVM_ON_UNIX -DLLVM_ON_FREEBSD

とか出てる。コンパイラ変わったからって理解でいいのかしらん?

make buildkernel

特にコンフィグレーションいじっていないならこれでOK。要はGENERICのコンフィグ使うぜって事。

make -j4 buildkernel

コンフィグをいじるのは大概無駄なデバイス定義を削ってメモリの確保をやったり必要な非標準機能に火を入れたり起動時に必ず有効でなければならないモジュールを指定したいような場合。 今時ならほとんどの場合カーネルモジュールの形でカーネルから分離されているし、モジュールのロードもあとから指定できる。よほどのことがなければいじることもないと思う。

サービス群の停止

make installkernelの前にサービス関連は停止しておきましょう。

データベースを動かしているならデータのバックアップを行ってから停止します。 Jailを動かしている場合も同じく。

今回試しに停止せずにmergemasterまでやってリブートしたところ、JailにいたPostgreSQLが立ち上がらず、ブートシーケンスがぴたっと止まってしまい、CTRL+Cで殺さないと先に進みませんでした。

あらかじめ、可能な限りサービスを止め、/etc/rc.conf のenabled=“NO”への書き換えをやっておきましょう。

/etcのバックアップ

mergemaster やりますからねぇ。しくじった場合の保険です。

make installkernel

とうとう覚悟を決める時間です。これでカーネルモジュールを置き換えします。

make -j4 installkernel

reboot ... しないでやってみる

本来の手順だとシングルモードで再起動なんですけどね。 実は遠隔地にあるマシンのアップデートを想定しての練習でもあったりするので、リブートしないで続けて見ます。

mergemaster

はいはい、おっかないmergemasterの時間です。

mergemaster -p

まだこれは簡単なほうですよ。 基本は i でインストール(上書き)するだけですが、自分で更新した設定ファイルは m でマージします。

make installworld

このターゲットをmakeすることで、ユーザランドも9.0-RC3になります。

make -j4 installworld

make delete-old

FreeBSD9.0ではもう使用しない設定ファイル等をバックアップしてから消してくれます。

make -j4 delete-old

mergemaster 再び

今度は -p が付かないmergemasterの実行です。/etc などの下にあるファイルの更新です。対象の量も多いし、単調な作業になるのでおそらく手順的に一番誤りの発生するところでしょう。

mergemaster

基本は -p が付いていた mergemasterとおなじ。 以下なんかは気をつけないと泣きを見ます。sshd_configなんかはやっちまったら最後、現地に行かないとどうしようもありません。

  • passwd
  • hosts
  • mailer.conf
  • shells
  • sshd_config
  • sysctl.conf
  • ttys
  • named.conf

やっとreboot

どきどきの瞬間。リブートできたらいいね。 これでリブートしなければコンソールへ直行して作業しなきゃなりません。どきどきして待ちましょう。

再起動が出来て、うまく更新がいっていれば

FreeBSD 9.0-RC3 (GENERIC) #9: Sun Dec 11 07:18:45 JST 2011

が表示されているかと思います。

make delete-old-libs はとりあえず待て

これはまだ実行しないほうがよろしいかと。 というのは、古いライブラリの回復手段を失ってしまった場合、動かなくなるアプリ、サービスが出てきてしまうためです。 まぁ、そもそも9.0で使えないライブラリの場合はどうしようもなくなりますが。

サービスのの回復

止めていたサービスやJailの回復を行います。

Jailの更新

わたしは ezjail を使っているので、ezjail-adminで各Jailのバイナリを更新します。

ezjail-admin update -i

-iオプションは、ビルド済みのバイナリをJailへ適用する指定です。 既にホストのアップグレードのために必要なバイナリはビルドされているので、再コンパイルをしないでそのまま利用させるということですね。

/etc/rc.confの回復

disabled=“NO” を YES に戻すだけですね。

アプリケーションの再コンパイル

念のため、portsで導入しているアプリの再コンパイルをやっておきます。

ほとんどの場合は問題ないと思うけど、7.xRELEASEの頃から使ってます的なアプリがあるならこれを機会に再コンパイルやっときましょう。 大量にそういうのがある、コンパイルつらい、というなら /usr/ports/misc/compat7x などの互換性維持のためのライブラリを導入してみればよいかと。

カーネルパラメタで、8.2にはあったけど9.0-RC3には存在しないものがあるようです。 kern.ipc.semmap はPostgreSQLのインストールに当たって変更する必要があったパラメタなんですが、少なくとも 9.0-RC3にはないようです。

amanda# uname -a
FreeBSD amanda.hogehoge.jp 9.0-RC3 FreeBSD 9.0-RC3 #9: Sun Dec 11 07:18:45 JST 2011     k@amanda.hogehoge.jp:/usr/obj/usr/src/sys/GENERIC  amd64
amanda# sysctl kern.ipc
kern.ipc.maxsockbuf: 2097152
kern.ipc.sockbuf_waste_factor: 8
kern.ipc.somaxconn: 128
kern.ipc.max_linkhdr: 16
kern.ipc.max_protohdr: 60
kern.ipc.max_hdr: 76
kern.ipc.max_datalen: 92
kern.ipc.nmbjumbo16: 3200
kern.ipc.nmbjumbo9: 6400
kern.ipc.nmbjumbop: 12800
kern.ipc.nmbclusters: 25600
kern.ipc.piperesizeallowed: 1
kern.ipc.piperesizefail: 0
kern.ipc.pipeallocfail: 0
kern.ipc.pipefragretry: 0
kern.ipc.pipekva: 655360
kern.ipc.maxpipekva: 129699840
kern.ipc.msgseg: 2048
kern.ipc.msgssz: 8
kern.ipc.msgtql: 40
kern.ipc.msgmnb: 2048
kern.ipc.msgmni: 40
kern.ipc.msgmax: 16384
kern.ipc.semaem: 16384
kern.ipc.semvmx: 32767
kern.ipc.semusz: 632
kern.ipc.semume: 50
kern.ipc.semopm: 100
kern.ipc.semmsl: 340
kern.ipc.semmnu: 256
kern.ipc.semmns: 512
kern.ipc.semmni: 256
kern.ipc.shm_allow_removed: 0
kern.ipc.shm_use_phys: 0
kern.ipc.shmall: 32768
kern.ipc.shmseg: 128
kern.ipc.shmmni: 192
kern.ipc.shmmin: 1
kern.ipc.shmmax: 134217728
kern.ipc.maxsockets: 25600
kern.ipc.numopensockets: 147
kern.ipc.nsfbufsused: 0
kern.ipc.nsfbufspeak: 0
kern.ipc.nsfbufs: 0
amanda#

また、portupgrade コマンドを使っている場合、注意がいるかもしれません。 私のときは、ruby18-dbd との依存関係が解決できないようで、makeのコマンドラインに -DFORCE_PKG_REGISTER をつけて手動で導入しました。ほかにも、ruby-dbdのバージョン等によってうまく更新できないことがあるかもしれません。

そういう時はばっさり入れ直しですねぇ。

あ、ほかには

[Updating the portsdb <format:dbm_hash> in /usr/ports ... - 20903 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.............HASH: Out of overflow pages. Increase page size error] Remove and try again.
[Updating the portsdb <format:dbm_hash> in /usr/ports ... - 20903 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.............HASH: Out of overflow pages. Increase page size error] Remove and try again.

こんなのが延々繰り返し表示で進まない。こんなときはこちらで説明している方法などをどうぞ。http://forums.freebsd.org/archive/index.php/t-8882.html

clangは標準組み込みされています

amanda#  clang -v
FreeBSD clang version 3.0 (branches/release_30 142614) 20111021
Target: x86_64-unknown-freebsd9.0
Thread model: posix
amanda#

もしportsあたりで入れたようなものがあれば消しておきましょう。

デバイス名変更

デバイス名変わってるから、fstabとか修正しなよー、というので見てみると、あー、ほんとだー。

amanda# cd /dev
amanda# ll
total 2
crw-r--r--  1 root  wheel       0,  35 12月 11 09:12 acpi
lrwxr-xr-x  1 root  wheel            4 12月 11 09:12 ad4 -> ada0
lrwxr-xr-x  1 root  wheel            6 12月 11 09:12 ad4s1 -> ada0s1
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1a -> ada0s1a
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1b -> ada0s1b
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1d -> ada0s1d
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1e -> ada0s1e
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1f -> ada0s1f
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad4s1g -> ada0s1g
lrwxr-xr-x  1 root  wheel            4 12月 11 09:12 ad6 -> ada1
lrwxr-xr-x  1 root  wheel            6 12月 11 09:12 ad6s1 -> ada1s1
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad6s1d -> ada1s1d
lrwxr-xr-x  1 root  wheel            7 12月 11 09:12 ad6s1e -> ada1s1e
crw-r-----  1 root  operator    0,  93 12月 11 09:12 ada0
crw-r-----  1 root  operator    0,  95 12月 11 09:12 ada0s1
crw-r-----  1 root  operator    0, 100 12月 11 18:12 ada0s1a
crw-r-----  1 root  operator    0, 102 12月 11 09:12 ada0s1b
crw-r-----  1 root  operator    0, 104 12月 11 18:12 ada0s1d
crw-r-----  1 root  operator    0, 106 12月 11 18:12 ada0s1e
crw-r-----  1 root  operator    0, 108 12月 11 18:12 ada0s1f
crw-r-----  1 root  operator    0, 110 12月 11 18:12 ada0s1g
crw-r-----  1 root  operator    0,  97 12月 11 09:12 ada1
crw-r-----  1 root  operator    0, 112 12月 11 09:12 ada1s1
crw-r-----  1 root  operator    0, 119 12月 11 18:12 ada1s1d
crw-r-----  1 root  operator    0, 121 12月 11 18:12 ada1s1e

昔のデバイスはリンクになってるわけか。 話だと、古いデバイス名のままだと有効にならない機能もあるとかで、やはり直したほうがよさそう。

/etc/fstab 修正して再起動。

documents/freebsd/freebsd-013.txt · 最終更新: 2014/04/27 17:30 (外部編集)

ページ用ツール