Filed under:
>>
シェルスクリプトのお勉強シリーズ第二弾。
ファイアウォール内で、Virex の eUpdate 機能(ウィルス定義ファイルの自動ダウンロード機能)が動作しないため、シェルスクリプトと cron を使って自動化することを目論んだ。
※2004/8/30 変更点
初期設定だけを書き換えればいいようにした。
datfname.txt のアクセス権を 666 にしておくようにした。
※2004/8/31 変更点
cron などで root で実行すると、root のホームフォルダ以下で作業してしまうのを修正(汗
1. 概要
http://configuration.apple.com/configurations/internetservices/virex/1/virexdatinfo.txt を読み込んで、新しい定義ファイルが用意されているならばダウンロード、インストールを行う。
2. 動作環境
Virex 7.5 (7.2とかでも動くと思うが未確認)
3. シェルスクリプト
スクリプトの内容は以下の通り。
#!/bin/sh
# ファイアウォール環境下で Virex のウィルス定義ファイルを自動でダウンロード/インストールするスクリプト
# バージョン 1.0.1
# ----------------------- 初期設定 ------------------
# ファイルのダウンロードディレクトリ。スペース無しのフルパスで記述。
# /Users/hoge/Documents/Virex/ など。
DIR='/Users/akihide/Documents/Virex/'
#アップデータをインストールするHDDの名前
VOLNAME="HDDの名前"
#プロキシサーバのIP
PROXY="IPアドレス"
#プロキシサーバのポート
PORT="ポート番号"
#.Mac メンバ名(@.mac.com に左側)
MACMEM="メンバー名"
#.Mac パスワード
MACPASS="パスワード"
# --------------------- 初期設定 おしまい -----------
cd ${DIR}
if [ -e datfname.txt ] ; then
OFNAME=`cat datfname.txt`
else OFNAME="nofile"
fi
curl -x $PROXY:$PORT http://configuration.apple.com/configurations/internetservices/virex/1/virexdatinfo.txt > datinfo.txt
sed 's/^idisk.*Updates\///' datinfo.txt > datfname.txt
chmod 666 datfname.txt
NFNAME=`cat datfname.txt`
DNAME=`sed -e 's/V[0-9].*\.gz//' -e "s/<member>/$MACMEM/" -e 's/ /%20/' datinfo.txt`
rm datinfo.txt
if [ $OFNAME = $NFNAME ]; then
echo "No new updater"
exit
fi
if [ -e $NFNAME ]; then
echo "New updater has already downloaded"
else
echo "Downloading updater..."
curl -x $PROXY:$PORT -u $MACMEM:$MACPASS http://${DNAME}${NFNAME} > $NFNAME
fi
echo "Decompressing updater..."
tar -xzf $NFNAME
rm $NFNAME
VNAME=`sed 's/\.gz//' datfname.txt`
echo "Installing updater..."
installer -pkg $VNAME.pkg -target "/Volumes/$VOLNAME"
echo "Install Finished"
rm -rf $VNAME.pkg
4. 使い方
空の作業用フォルダを作成しておく。デフォルトでは ~/Documents/Virex/ になっている。別のフォルダを使いたい場合はスクリプトを書き換えること。引数、オプションなどは無いので、ただ実行するだけ(要管理者権限)。
cron でまわすと便利。私は cron の設定方法がわからないので、Cronnix という GUI アプリを使用している(要管理者権限)。
installer コマンドで自動インストールしたくない場合は46行目の installer 以下を、
open $VNAME.pkg
に書き換えれば、GUI のインストーラが立ち上がる。
5. 注意事項
- 現在インストールされている定義ファイルを確認するわけではない。前回スクリプトを実行したときの定義ファイル名を記録しておき、現在の定義ファイルがそれと異なる場合、定義ファイルをダウンロードするものである。
- 定義ファイルのインストールには root 権限(乃至は管理者のパスワード)が必要。スクリプトを root で実行のこと(cron を使う場合も)。
- datfname.txt の所有者が root。
- cron で回していると新しいファイルがインストールされても気づかない。上に書いたように open で GUI インストーラを立ち上げるとわかりやすいかも。(mail を送るコマンドを追加するといいのかなぁ... : mail hoge < datfname.txt とか?)
- installer コマンドの場合、インストール終了後も再起動を促さない。上に書いたように open で G(略