2006年02月03日(金)


Update to Firefox 1.5.0.1

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"


generated by makediary-2.11