OpenBSD 3.6がリリースされた。

3.5→3.6 移行手順の概要

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

/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。

FrontPage


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