HomeBlog Page

FireWall 環境で Virex のVirus 定義ファイルを自動でダウンロードするシェルスクリプト

シェルスクリプトのお勉強シリーズ第二弾。
ファイアウォール内で、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(略