PC : Windows XP で、1.5 から 1.5.0.1 へ update するメモ。大量編。
まず取ってきて、ファイルサーバに置きます。
% fetch http://ftp.mozilla-japan.org/pub/mozilla.org/firefox/releases/1.5.0.1/update/win32/ja/firefox-1.5-1.5.0.1.partial.mar % mv firefox-1.5-1.5.0.1.partial.mar update.mar % scp update.mar fileserver:/firefox
んで、bat ファイルを作ります。これもファイルサーバに置いておきます。
firefox-1.5-1.5.0.1-update.bat
set %TMPDIR%=\windows\temp set %WRKDIR%=firefox-update set %FIREFOXDIR%=\progra~1\mozill~1 set %UPDATER%=updater.exe set %MEMO%=notepad cd %TMPDIR% mkdir %WRKDIR% cd %WRKDIR% copy %FIREFOXDIR%\%UPDATER% . xcopy \\fileserver\firefox\update.mar . cd %FIREFOXDIR% %TMPDIR%\%WRKDIR%\%UPDATER% %TMPDIR%\%WRKDIR% 0 firefox about:
んで、ファイルサーバ上の firefox-1.5-1.5.0.1-update.bat をダブルクリックすれば 更新します。
気づいた点。
ファイル名は指定しないので、update.mar に見えないといけません。
ファイルサーバへの認証は、予め済ませておく必要があります。bat を走らせたら自動的に 認証画面が出ないかと思いましたが、そもそも bat がファイルサーバ上にあるので、まぁ、 いいかとなっています。
xcopy は、共有ファイルから or へもコピーできます。ただし、認証を予め済ませておく 必要があります。
プロンプトがすぐに返ってくるので、終了したかどうかがわかりづらいです。
成功しても失敗しても何も言わず、update.log に書き込むだけなので、update.log を 見ないと成否がわかりません。でも、スクロールするのが面倒なので、firefox を起動 させ、about: を表示させ、version だけ見ます。
参考にしたページでは、相対 PATH で記述されていましたが、絶対 PATH でもできました。
Cf. http://diary.noasobi.net/2005/10/diary_051004a.html http://forum.mozilla.gr.jp/?mode=al2&namber=28863&rev=&
PC : FreeBSD の command だけでなく、ports にまで依存してます。 perl と nkf ですか。といいますか、長いです....。
#!/bin/sh
#
# $Id: sftm,v 1.4 2006/02/03 13:37:18 ma Exp $
#
# Split a large file into small files and send them each after each sleep.
# Required for perl to generate random number.
#
RANDOM_LETTERS=`cat /dev/urandom | strings | nkf -MB | fold -5 | head -1`
WRK_DIR="${HOME}/tmp-sftm-${$}`date '+%s'`${RANDOM_LETTERS}"
CUR_DIR=`pwd`
HOSTNAME=`hostname -s`
SUFFIX="b64"
SPLIT_SIZE="1550000" # Would be under approximately 2MB after b64encode'ed.
RECIPIENT=`whoami`
RANDOM_BASE=54
while [ "x${1}" != "x" ] ;
do
case "$1" in
-b)
shift
SPLIT_SIZE="$1"
;;
-f)
shift
FILE_NAME="$1"
;;
-r)
shift
RANDOM_BASE="$1"
;;
*)
FILE_NAME="$1"
;;
esac
shift
done
# Make cd working directory.
mkdir -p "$WRK_DIR"
cd "$WRK_DIR"
cp "${CUR_DIR}/${FILE_NAME}" .
FILE_SIZE=`stat "$FILE_NAME" | awk '{ print $8 }'`
#
# Check x?? already exist and exit.
#
if [ -f x?? ] ; then
echo "x?? exist."
exit
fi
#
# Check file size larger than ${SPLIT_SIZE}
#
if [ `expr "$FILE_SIZE" "<" "$SPLIT_SIZE"` ] ; then
echo 1>&2
echo -n "${FILE_SIZE} < ${SPLIT_SIZE} :"
echo " File size is smaller than the size to be splitted."
echo "I'm going on in anyway."
fi
#
# Split into small files.
#
split -b "$SPLIT_SIZE" "$FILE_NAME"
#
# Encode for e-mail.
#
for f in x??
do
FILENAME_BEFORE="${f}"
FILENAME_AFTER="${f}.${SUFFIX}"
echo "$FILENAME_BEFORE -> $FILENAME_AFTER"
b64encode -o "$FILENAME_AFTER" "$FILENAME_BEFORE" "$FILENAME_BEFORE" && \
rm -f "$FILENAME_BEFORE"
done
LAST_FILE_NAME="$FILENAME_AFTER"
#
# Send.
#
for f in `echo x??.${SUFFIX}`
do
SLEEP_TIME=`perl -e 'printf "%d\n", (rand(15)+54)*60 + (rand(30)-3);'`
echo "$f $SLEEP_TIME"
sleep "$SLEEP_TIME"
cat "$f" | mail -s "$HOSTNAME : $FILE_NAME $f / $LAST_FILE_NAME" "$RECIPIENT"
done
#
# Delete all in anyway. Wow.
#
rm -rf "$WRK_DIR"