OpenBSD 3.6がリリースされた。

3.5→3.6 移行手順の概要

詳細を書いているときりがないので、ざっくりと。
詳細はリンク先を参照のこと

OpenBSD 3.7がリリースされた

今回はgccがバージョンアップしてたりして面倒臭いので、バイナリアップデートした。

Tips

/etc, /dev対策

Upgrade Mini-FAQとか見ると/etcの変更は「手でやれ」って書いてある。
たしかにその通りなのだが、何も考えずにやると作業大変だわ、訳分からなくなるわで、絶対失敗(とまではいかなくても何かしらの漏れがでたり)すると思う。

その対策としては、portsにあるmergemasterというツールを使うのが 定番なようだが、私は以下のような方法でやっている。

古いshlib対策

Upgrade後に、以前使ってた共有ライブラリが残っていて、 消していいものかどうか悩むことがある。
あと、ports/packagesとかについては、最初に全部消しとけってことになってるが、 常時稼働してるサーバでは、最初に全部消しといて、Upgrade後に マターリ置き換え、ってのもなかなか難しい。 なので、OS本体のrebuild後に、運用しながらports/packagesとかを少しずつ再rebuild していくということになるが、 その間はやっぱり古い共有ライブラリが必要だったりする。

  1. 古くて、消してもよさげなライブラリは、とりあえず/usr/local/libに移動し、 reboot。
    ls -lt /usr/lib
    mv /usr/lib/libhoge.so.X.Y ... /usr/local/lib
    shutdown -r now
  2. ports/packagesとか俺buildの作りなおしや整理
  3. どこからも使われていない共有ライブラリの検出
    例えばこんなスクリプトを使う
    #!/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。

不要なファイルを検出する。

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


excepts

^/\.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/

FrontPage


Front page   New Page list Search Recent changes   Help   RSS of recent changes