現在のFreeBSDには、freebsd-updateという、便利なコマンドがあって
データセンターに設置したマシンのバイナリアップデートを現地に行かないでおこなうことができます。
また、FreeBSD-8.2以降には、upgradeオプションがついたので、メジャーバージョンのアップデートも可能です。(もちろん、ソースからアップデートする方法は、昔からあります。)
しかし、FreeBSD-8.2未満では、このupgradeオプションがありません。
わたしは、FreeBSD4の頃から、リモートでアップデートする場合に
ソースからでは、ダルイので、ここに示す方法で、アップデートしていました。
メジャーバージョンアップももマイナーバージョンアップも同じ方法でできます。
FreeBSD5の頃に書いたメモですが、8.1の頃に中途半端に書き直してるので
記述に矛盾があります。
重要なのは、インストールCDの中に、
XXX-RELEASE/kernels/install.sh
XXX-RELEASE/base/install.sh
XXX-RELEASE/lib32/install.sh
というスクリプトがあるので、それを実行するという事です。
ーーーーーーーー
注意:4系列->6へは、いきなりやると、バイナリが読めなくなる。
ーーーーーーーー
FreeBSD-5系列のリモートによるバージョンアップ法
これは、FreeBSD-5.Xがインストールされている環境に
最新版のFreeBSD-5.Xを上書きインストールする事を目的としている。
ただし、その環境を、最初にインストールしたものが
FreeBSD-4系列以前のバージョンであり、
その環境から、なんらかの方法で、FreeBSD-5.X系列にアップデートした環境から
さらに、最新版にすることは想定していない。
(できないわけではないが、注意点が多いのでここでは割愛する)
なんらかの理由で再起動に失敗すると悲惨なことになるので
稼働中の環境のアップデートには使用しないこと。
するならば、別のマシンからシリアル経由でログインすることができる環境でのみするベキである。
どちらかといえば、新設のサーバにOSをインストールしてデータセンターに設置、
リモートで、そのほかのソフトの設定などをしてる間に
アップデートが出てしまった場合などに向いている。
つまり、/etcがあまり変更されていない場合
稼働中マシンにするならば、rc.confやrc.dの自動起動を殺しておいてからにした方がいい。
とくに、MTAの停止は必須。
カレントに8.1-XXXX-disc1.isoに、ISO_IMAGEがある想定
mkdir /iso
mdconfig -a -t vnode -f FreeBSD-8.1-RELEASE-i386-disc1.iso -u 0
mdconfig -a -t vnode -f FreeBSD-8.1-RELEASE-amd64-disc1.iso -u 0
mount -t cd9660 /dev/md0 /iso
umount /mnt
mdconfig -d -u 0
(注意)
インストール中に、アカウントとエイリアスがデフォルトで上書きされる。
そのため、作業の開始前に、MTAを停止をすること
また、このため、リモートで作業中のシエルからログアウトすると、コンソールからrootで
ログインするしか方法がなくなるので、予備に別のシエルでログインしておくこと。
また、Winodws版のターミナルソフトなどで、暇になると勝手にセッションをきるものがあるので
予備のシエルでは、topなどを実行させておいた法がいいだろう。
*NIXな環境で作業する方がベターだろう。私はMAC OS XのTerminalを使用している。
ここから作業開始
chflags -R noschg /old/*
rm -rf /old
mkdir -p /old/usr
cp -rp /etc /old/etc
mv /rescue /old/rescue
chflags -R noschg /boot/*
chflags -R noschg /bin/*
chflags -R noschg /sbin/*
chflags -R noschg /lib/*
chflags -R noschg /libexec/*
chflags -R noschg /usr/bin/*
chflags -R noschg /usr/sbin/*
chflags -R noschg /usr/lib/*
chflags -R noschg /var/*
chflags -R noschg /usr/lib32/*
cd /iso/8.1-RELEASE/kernels
sh install.sh generic
rm -r /boot/kernel.old
mv /boot/kernel /boot/kernel.old
mv /boot/GENERIC /boot/kernel
rm -r /usr/include
cd ../lib32
sh install.sh
cd ../base
sh install.sh
cd /etc
/old/rescue/cp ../old/etc/ttys .
/old/rescue/cp ../old/etc/master.passwd .
/old/rescue/cp ../old/etc/passwd .
/old/rescue/cp ../old/etc/pwd.db .
/old/rescue/cp ../old/etc/spwd.db .
/old/rescue/cp ../old/etc/group .
/old/rescue/cp ../old/etc/hosts .
/old/rescue/cp ../old/etc/remote .
/old/rescue/cp ../old/etc/sysctl.conf .
/old/rescue/cp ../old/etc/make.conf .
/old/rescue/cp ../old/etc/shells .
/old/rescue/cp ../old/etc/inetd.conf .
/old/rescue/cp ../old/etc/mail/mailer.conf mail
/old/rescue/cp ../old/etc/mail/aliases mail
/old/rescue/cp ../old/etc/mail/aliases.db mail
newaliases
ls
外部からログインできる事を確認する。
/old/rescue/reboot
神に祈って再起動を待つ......合掌