#contents *OpenBSD 3.6がリリースされた。 [#u56ec6cf] **3.5 ->3.6 移行手順の概要 [#ybd2bd24] 詳細を書いているときりがないので、ざっくりと。~ 詳細はリンクを参照のこと -COLOR(blue){一般的な手順} ... [[Upgrade Mini-FAQ:http://www.openbsd.org/faq/upgrade-minifaq.html]]参 -COLOR(green){3.5 -> 3.6に固有の手順} ... [[Upgrade Mini-FAQ:http://www.openbsd.org/faq/upgrade-minifaq.html]]もしくは [[Upgrade Guide:http://www.openbsd.org/faq/upgrade36.html]]参 -適用順序 --COLOR(blue){ソースツリーの更新} --COLOR(green){各サービス固有のuid, gid登録}~ 沢山あるので、まとめてやっとくと楽。 diff -u /etc/master.passwd /usr/src/etc/master.passwd > passwd.diff duff -u /etc/group /usr/src/etc/group > group.diff で、差分作っといて、vipwやvi groupで取り込んだ。 --COLOR(blue){カーネルのコンパイル、リブート}~ カーネルが3.6、ユーザランドが3.5の状にするとpfが効かなくなるので、 ファイアウォール等はこの間の運用に注意。 --COLOR(green){libcライブラリの再構築} --COLOR(blue){ユーザランドのコンパイル} --COLOR(blue){/etc, /dev以下の修正} --COLOR(green){ptyデバイスのマイナー番号変更} --COLOR(green){古い/usr/bin/cksumの消去} --pfアンカーの変更 ... /etc/pf.conf中に該当箇所がないので、実施せず。 *OpenBSD 3.7がリリースされた [#z1d827e1] 今回はgccがバージョンアップしてたりして面倒臭いので、バイナリアップグレードした。http://www.openbsd.org/faq/upgrade37.html を参のこと。 :Tips (というか今回もハマッた...)|運用を続けて行くと、ディスクの容量が足りなくなったりしてディレクトリをシンボリックリンクに置き換えてしまう場合がある; $ ls -l /home lrwxr-xr-x 1 root wheel 9 May 22 03:51 /home -> /opt/home こういうことをやっていると、バイナリアップグレード後、シンボリックリンクが本当のディレクトリに置き換えられている場合があるので注意が要(そのようになっていた場合もリンク先の実体は残っているので、新しく作られたディレクトリを消去し、シンボリックリンクを張り直せばよい)。~ ~ 気づかないでいると、アップグレード後にログインできなくなったり、コマンドが実行できなくなったりして焦ることになる。 *OpenBSD 3.8がリリースされた。 [#h85543de] 通常のアップグレード作業と大きく変わっているところはないようだ。 _hostapdのUID/GIDを追加するくらいか。 参考までに、3.7 -> 3.8で削除したファイルの一覧。 #ref(rmfiles_37_38.txt) *OpenBSD 3.9がリリースされた。 [#m211fb48] 仕事が忙しい+LiveCDの製作にかまけてた所為でまだ完にアップグレード終ってないんだけど、とりあえず書いてみる。 今回は、自作した OpenBSD 3.9 LiveCD の容を使ってやってみた。 正規の方法とはちょっと違っていて、まぁかなりの変化球だけど、以下手順; 既存のports/packagesを消す。 # pkg_delete -q /var/db/pkg/* 3.9のリリースパッケージで上書き~ リリースパッケージが /root/dist以下にあるとして; # cd / # for tgz in /root/dist/!(etc)39.tgz ... 「etc39.tgz以外」を展開する # do # tar xvzpf $tgz # done これにさらにLive CDの中身を上書きする。 # vnconfig svnd0 CD-OpenBSD-3.9.iso # mount /dev/svnd0 /mnt # cd /mnt # pax -rwvpe usr / ... /usr以下をLiveCDの中身で上書き # cd /mnt/var/db # pax -rwvpe pkg /var/db ... /var/db/pkg 以下をLiveCDの中身で上書き これで、LiveCDに収録されている追加アプリも使用可能になった。 あとは、 -カーネルの再生成 -/etcのアップグレード -rebuild device files -不要なshlibの整理、古いshlibに依存した実行バイナリの再コンパイル -その他不要なファイルの削除 などがあるが、従来通りなので省略。 *Tips [#j2cd2eaa] **/etc, /dev対策 [#g5d52734] Upgrade Mini-FAQとか見ると/etcの変更は「手でやれ」って書いてある。~ たしかにその通りなのだが、何も考えずにやると作業大変だわ、訳分からなくなるわで、絶対失敗(とまではいかなくても何かしらの漏れがでたり)すると思う。 その対策としては、portsにあるmergemasterというツールを使うのが 定番なようだが、私は以下のような方法でやっている。 -新しいetcの中身をソースツリーから/altrootの下に展開 --cd /usr/src/etc && DESTDIR=/altroot make distribution-etc-root-var -この/altroot/etcと現在使用している/etcとの中身の差分を取る --diff -ru /etc /altroot/etc > /etc.diff -このetc.diffの容を見ながら、各ファイルについて次の3つのうちのどれかを行う。 --古いファイルをそのまま使う --新しいファイルをそのまま使う --新しいファイルと古いファイルの容を編集してマージする -各ファイルの差分を見ながら、コピーや編集を行うことになるので、screenなどをれておくと便利。 **古いshlib対策 [#h625450f] Upgrade後に、以前使ってた有ライブラリが残っていて、 消していいものかどうか悩むことがある。~ あと、ports/packagesとかについては、最初に部消しとけってことになってるが、 常時稼働してるサーバでは、最初に部消しといて、Upgrade後に マターリ置き換え、ってのもなかなか難しい。 なので、OS本体のrebuild後に、運用しながらports/packagesとかを少しずつ再rebuild していくということになるが、 その間はやっぱり古い有ライブラリが必要だったりする。 +古くて、消してもよさげなライブラリは、とりあえず/usr/local/libに移動し、 reboot。 ls -lt /usr/lib mv /usr/lib/libhoge.so.X.Y ... /usr/local/lib shutdown -r now +ports/packagesとか俺buildの作りなおしや整理 +どこからも使われていない有ライブラリの検出~ 例えばこんなスクリプトを使う #!/bin/sh if [ X$1 = X ] then set / fi find "$@" \ \! -fstype local -prune \ -o \ -type f \ \( -perm -100 -o -perm -010 -o -perm -001 \) \ -print \ | xargs file \ | awk ' BEGIN {FS=":"} /ELF 32-bit LSB executable.*dynamically linked/ {print $1}' \ | xargs ldd \ | awk ' /^\/.*:$/ {fname = $1; sub(/:/, "", fname)} $3 == "rlib" {print fname, $5}' ファイルシステム体の実行ファイルに対してlddした一覧が得られる。~ で、「このファイル一覧中にはないけど、実際のファイルシステム中に 存在する有ライブラリ」っていうのが、どこからも使われてないやつなので、 消してもOK。 **不要なファイルを検出する。 [#k678ef84] アップグレードを重ねると、不要なファイルができてゆく。 前述の有ライブラリの問題もそうだが、他にも例えばPerlのバージョンが あがってたりすると、*.phが古いのが残ったままになってたり。 そういうのを検出するMakefileファイル; VER = 37 TARBALLS = \ /root/dist/base$(VER).tgz \ /root/dist/comp$(VER).tgz \ /root/dist/game$(VER).tgz \ /root/dist/man$(VER).tgz \ /root/dist/misc$(VER).tgz all: removable_candidates removable_candidates: tarfiles realfiles comm -23 realfiles tarfiles > removable_candidates tarfiles: $(TARBALLS) for tgz in $(TARBALLS) ;\ do \ echo Extracting $$tgz ... >&2 ;\ tar tvzf $$tgz ;\ done \ | awk '/^-/ { fname = $$9; sub(/^\.\//, "/", fname); print fname }' \ | sort > tarfiles realfiles: find / -type f -print | grep -v -f excepts | sort > realfiles clean: rm -f removable_candidates realfiles tarfiles *~ *.bak *.BAK Makefileなので、もちろん行頭の空白は''スペースではなくTAB''なのでコピペして使用の際は注意。 あと、excepts ファイルというのをMakefileと同じディレクトリ上に作っておく。これは検索の対象からはずすディレクトリやファイルを記述する。以下のように; ^/\.cshrc ^/\.profile ^/boot ^/bsd ^/bsd\.rd ^/etc/ ^/home/ ^/kern/ ^/obsd ^/proc/ ^/root/ ^/usr/local/ ^/usr/obj/ ^/usr/ports/ ^/usr/src/ ^/var/backups/ ^/var/cron/ ^/var/db/ ^/var/empty/etc/localtime ^/var/log/ ^/var/mail/ ^/var/named/ ^/var/run/ ^/var/www/conf/ ^/var/www/htdocs/ ^/var/www/logs/ MakefileのTARBALLSで指定した位置に、インストールに使用したインストールパッケージを用意し、make allで実行。結果は''removable_candidates''(削除可能な候補)というファイルに出力される。 やってることは単純で、''インストールパッケージに含まれていないが実際に存在する通常ファイルで、exceptファイルに記述されたものを除いたもの''の一覧を表示しているだけ。 なので、もちろん自分で作成したファイルや、独自にインストールしたソフトなどは(exceptファイルで記述していない限り)要であってもリストアップされるので注意。逆に、不必要であっても、exceptリストに該当するファイルはリストアップされない。消し忘れてるファイルの検出用くらいに考えておいた方がいいかもしれない。 wc -c `cat removable_candidates` とかやって、ファイルサイズの総量が大したことなければ放置しててもいいかも。 ---- [[FrontPage]]