試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Firefox向けの言語パックからIceweasel向けの言語パックを自動で出力するスクリプト

Firefoxの日本語言語パックからiceweasel向けの日本語言語パックを作成してインストールする」で行った作業を自動化するスクリプトを作成した。
このスクリプトが行うのは以下の処理。

  1. Firefox向けの言語パックをダウンロード
  2. 中身を展開し、内容をIceweasel向けに修正
  3. 言語パックとして再び固める
  4. GTK+ 2のGUIダイアログで保存
  5. 更に、gksudoがあればIceweaselディレクトリへ直接インストール

実行には以下のパッケージ(コマンド)が必要。

  • zenity(GNOMEデスクトップ環境に含まれる)
  • unzip
  • zip

[任意]ファイル名: iceweasel-langpack.sh

#! /bin/sh

# Firefoxの言語パックをIceweasel向けに修正

FIREFOX_VERSION=3.0b5
LANG=ja
SRC_URI="download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/${FIREFOX_VERSION}/linux-i686/xpi/${LANG}.xpi"
WORKDIR=/tmp/iceweasel-langpack
WGETOPT="--tries=3 --timeout=10"
FILE_BEGINTAG="<span size='larger' weight='bold'>"
FILE_ENDTAG="</span>"
PATH=/bin:/usr/bin

# ツールのチェック
if [ ! -x /usr/bin/zenity ]; then
  echo "zenityがインストールされていません"
  exit 1
fi
if [ ! -x /usr/bin/unzip ]; then
  zenity --error --text "unzipがインストールされていません"
  exit 1
fi
if [ ! -x /usr/bin/zip ]; then
  zenity --error --text "zipがインストールされていません"
  exit 1
fi

# XPIファイルの入手と展開
rm ${WORKDIR} -fr
mkdir ${WORKDIR}; cd ${WORKDIR}
if ! wget -P $(pwd) ${SRC_URI}; then  # pwdでダウンロード先表示を絶対パスにする
  zenity --error --title "ダウンロード失敗" --text "ダウンロードに失敗しました"
  rmdir ${WORKDIR}
  exit 1
fi
mkdir xpi; cd xpi/
unzip ../${LANG}.xpi
mkdir jar; cd jar/
unzip ../chrome/${LANG}.jar

# XPIファイル内の記述を編集
sed -i -e 's:Mozilla Firefox:Iceweasel:' -e 's:Firefox:Iceweasel:' locale/branding/brand.*
sed -i -e 's: Firefox and the:">:' -e 's:                                 Firefox logos are trademarks of the Mozilla Foundation.  All rights::' -e 's:                                 reserved.">::' locale/browser/aboutDialog.dtd
rm ../chrome/${LANG}.jar -f
find -print0 | xargs -0 zip -9 ../chrome/${LANG}.jar -@
cd ../
rm jar/ -fr
find -print0 | xargs -0 zip -9 ../${LANG}.xpi -@

# 保存
OUTFILE=$(zenity --file-selection --title "言語パックの保存" --save --confirm-overwrite --filename=${HOME}/${LANG}.xpi)
if [ $? -ne 0 ]; then
  zenity --info --title "キャンセル" --text "保存がキャンセルされました。
${FILE_BEGINTAG}${WORKDIR}/${LANG}.xpi${FILE_ENDTAG}をコピー後、
一時ディレクトリ${FILE_BEGINTAG}${WORKDIR}${FILE_ENDTAG}を削除してください。"
  exit 1
fi
cp ../${LANG}.xpi ${OUTFILE} || zenity --error --text "${OUTFILE}の保存に失敗しました"

# gksudoを使用して直接Iceweaselのディレクトリに組み込む
if [ -x /usr/bin/gksudo ]; then
  if zenity --question --title "Iceweaselへの組み込み" --text "言語パックを直接Iceweaselに組み込みますか?
(gksudoを使用)"; then
    for ((;;)); do
      MOZFH=$(zenity --file-selection --title "Iceweaselのディレクトリ" --save --directory --filename=${MOZILLA_FIVE_HOME:-/})
      [ $? -ne 0 ] && break  # キャンセル
      [ -d ${MOZFH}/extensions -a -x ${MOZFH}/run-mozilla.sh ] && break  # 正常
      if ! zenity --question --title "間違ったディレクトリ" --text "このディレクトリは
Iceweaselのディレクトリではありません。
${FILE_BEGINTAG}run-mozilla.sh${FILE_ENDTAG}${FILE_BEGINTAG}extensions${FILE_ENDTAG}サブディレクトリを
含むディレクトリを指定してください。

ディレクトリ選択をもう一度行いますか?"; then
        MOZFH=
        break  # キャンセル
      fi
    done
    if [ ! -z ${MOZFH} ]; then
      EMID=$(sed -n -e '/<\?em:id>\?/!d; s/.*\([\"{].*[}\"]\).*/\1/; s/\"//g; p; q' install.rdf)
      gksudo mkdir ${MOZFH}/extensions/${EMID} &&
      gksudo -- cp -r chrome/ chrome.manifest install.rdf ${MOZFH}/extensions/${EMID}/ &&
      zenity --info --title "インストール完了" --text "Iceweaselのディレクトリへの
言語パックのインストールが完了しました。
アンインストールしたい場合は、ディレクトリ
${FILE_BEGINTAG}${MOZFH}/extensions/${EMID}${FILE_ENDTAG}
を削除してください。"
    fi
  fi
fi

rm ${WORKDIR} -fr
zenity --info --title "完了" --text "処理が完了しました"

exit 0

(2014/10/3)サーバのURLを修正

使用したバージョン: