portscleanの代替distviper

sysutils/bsdadminscriptsには便利ツールがたくさん入っている。

たとえばdistviper。
portsの運用を続けると、/usr/ports/distfiles/配下には古いファイルがたまっていくが、これを自動的に検知して削除してくれる。
同じ用途に使えるコマンドとしては、portupgrade付属のportscleanが有名だが、これらのコマンドはrubyが必要で、これだけのためにインストールするのも重い。


/usr/ports/distfiles/配下のすべてのファイルに対して検知を行うthoroughモードと、インストールされているportsだけに限り検知を行い、それ以外を削除するfastモードがある。

thoroughモードは時間がかかるので、portsビルド専用(つまりビルドだけしてインストールしない)マシンでもないかぎりfastモードで十分。

 -dで消されるファイルの確認、-iで消す前に聞くようになる、-qでメッセージ抑制、-vでverboseといったオプションがある。

実行例

$ distviper -d fast
delete zsh-4.3.9.tar.bz2
(中略)
$ sudo distviper fast
delete zsh-4.3.9.tar.bz2
delete zsh-4.3.9-doc.tar.bz2
delete xorg/driver/xf86-video-ati-6.11.0.tar.bz2
delete xorg/driver/xf86-video-mach64-6.8.0.tar.bz2
delete xorg/driver/xf86-video-nv-2.1.12.tar.bz2
delete xorg/driver/xf86-video-r128-6.8.0.tar.bz2
delete xorg/driver/xf86-video-radeonhd-1.2.4.tar.bz2
delete xorg/driver/xf86-video-openchrome-0.2.903.tar.bz2
delete gnome2/gdm-2.24.1.tar.bz2
delete gnome/esound-0.2.41.tar.bz2
delete a2ps-4.13b.tar.gz
delete libssh2-1.0.tar.gz
delete xc/vnc-4_1_3-unixsrc.tar.gz
delete xc/X430src-1.tgz
delete audiofile-0.2.6.tar.gz
delete samba-3.0.34.tar.gz
delete thunderbird-2.0.0.19-source.tar.bz2
$

ということで、/usr/local/etc/periodic/weeklyというディレクトリを(無ければ)作って、998.deldist.shとか適当な名前で下記のスクリプトを置いて、週1で自動的に実行されるようにしておいた。

/etc/local/etc/periodic/weekly/998.deldist.sh

#!/bin/sh

DELCMD='/usr/local/sbin/distviper'
DELOPT='fast'

rc=0
if [ -x $DELCMD ]; then
        echo 'Searching and deleting outdated distfiles...'
        $DELCMD $DELOPT || rc=$?
        echo 'Done.'
else
        echo "$DELCMD is not installed and I gave up."
        rc=2
fi

exit "$rc"