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"