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

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

GTK+ 2のAuroraエンジンのインストール/アンインストールスクリプトを作成

(2014/10/3)Auroraエンジンとテーマはディストリのパッケージとしてインストールできる場合がある。また、ここで扱っているテーマのバージョン(1.4)は古い。

Auroraエンジンのページからダウンロードできるファイルを展開すると

  • aurora-[バージョン].tar.gz:エンジンのソースツリー
  • gtkrc_themes.tar.bz2:テーマファイル群

という2つのファイルがあり、他のGTK+ 2用エンジンのパッケージとは少し入れ方が異なるため、インストール/アンインストール作業を自動化するシェルスクリプトを作成してみた。
後で探してみたところ、RPM/Debパッケージが
www.gnome-look.org/content/show.php/gtk2-engines-aurora+%5BRPMs%2BDebs%5D?content=64607
にあったりするので、単にzenityのサンプル*1的なものになってしまったかもしれない。
実行には

が必要。

操作はこの選択だけ

[任意]ファイル名: gtk2-aurora-1.4-install.sh

#! /bin/bash

AURORA_VERSION=1.4
GTK_REQUIRED_VERSION=2.10.0
CFLAGS="-O2 -pipe"
PREFIX=/usr
THEMES="Aurora-Midnight Aurora-looks Aurora"

WGET=/usr/bin/wget
PKG_CONFIG=/usr/bin/pkg-config
SRC_URI="http://gnome-look.org/CONTENT/content-files/56438-Aurora-${AURORA_VERSION}.tar.bz2"
WORKDIR=/tmp/aurora-workdir

cleanup()
{
  rm ${WORKDIR} -fr
}
die()
{
  zenity --error --title "エラーにより終了します" --text $1
  cleanup
  exit 1
}
completed()
{
  zenity --info --text "$1が完了しました"
  cleanup
  exit
}
install_check()
{
  if [ ! -e ${PKG_CONFIG} ]; then
    die "pkg-configコマンドが見つかりません"
  elif [ ! -e ${WGET} ]; then
    die "wgetコマンドが見つかりません"
  elif ! ${PKG_CONFIG} --exists "gtk+-2.0 >= ${GTK_REQUIRED_VERSION}"; then
    die "バージョン${GTK_REQUIRED_VERSION}以上のGTK+とその開発パッケージが必要です\nインストールされているバージョン:$(pkg-config --modversion gtk+-2.0)"
  fi
  echo "message: インストール前のチェック完了" >&3
}
uninstall_check()
{
  local enginefiles=$(find /usr/lib/gtk-2.0/ -name "libaurora.*")
  if [ -z "${enginefiles}" ]; then
    die "エンジンがインストールされていません"
  elif [ ! -d /usr/share/themes/Aurora/ ]; then
    die "テーマファイルがインストールされていません"
  fi
}
install()
{
  mkdir ${WORKDIR} || die "<i>作業ディレクトリ(${WORKDIR})</i>が<b>作成できません</b>でした"
  cd ${WORKDIR}
  # ダウンロード
  echo "tooltip: ダウンロード" >&3
  ${WGET} -P ${WORKDIR} ${SRC_URI} || die "<i>${SRC_URI}</i>の<b>ダウンロードに失敗</b>しました"
  echo "message: ダウンロード完了" >&3
  # 展開
  echo "tooltip: 展開" >&3
  tar jxf $(basename ${SRC_URI}) || die "<i>$(basename ${SRC_URI})</i>の<b>展開に失敗</b>しました"
  tar zxf aurora-${AURORA_VERSION}.tar.gz || die "<i>aurora-${AURORA_VERSION}.tar.gz</i>の<b>展開に失敗</b>しました"
  echo "message: ファイル展開完了" >&3
  # ビルド
  cd aurora-${AURORA_VERSION}
  export CFLAGS
  echo "tooltip: エンジンのビルド時の設定(configure)" >&3
  ./configure --enable-animation --prefix=${PREFIX} || die "<i>configureスクリプト</i>の<b>実行中にエラーが発生</b>しました"
  echo "message: エンジンのビルド時の設定完了" >&3
  echo "tooltip: エンジンのビルド(make)" >&3
  make || die "<b>ビルドに失敗</b>しました"
  echo "message: エンジンのビルド完了" >&3
  # インストール
  echo "tooltip: インストール" >&3
  make install-strip || die "<i>エンジン</i>の<b>インストールに失敗</b>しました"
  tar jxf ../gtkrc_themes.tar.bz2 -C /usr/share/themes/ || die "<i>テーマファイル</i>の<b>インストールに失敗</b>しました"
  echo "message: インストール完了" >&3
}
uninstall()
{
  local dir
  for dir in ${THEMES}; do
    rm /usr/share/themes/${dir}/gtk-2.0/gtkrc -f || die "<i>/usr/share/themes/${dir}/gtk-2.0/gtkrc</i>の<b>削除に失敗</b>しました"
    rmdir /usr/share/themes/${dir}/gtk-2.0/ || die "<i>/usr/share/themes/${dir}/gtk-2.0/</i>の<b>削除に失敗</b>しました"
    rmdir /usr/share/themes/${dir}/ || die "<i>/usr/share/themes/${dir}/</i>の<b>削除に失敗</b>しました"
  done
  rm /usr/lib/gtk-2.0/*/engines/libaurora.* -f || die "<i>/usr/lib/gtk-2.0/*/engines/libaurora.*</i>の<b>削除に失敗</b>しました"
  echo "message: アンインストール完了" >&3
}

if [ ${UID} -ne 0 ]; then
  die "管理者権限で実行する必要があります"
fi

# 進行状況を示すためにシステムトレイを使用
exec 3> >(zenity --notification --text "開始" --listen)

ACTION=$(zenity --list --text "操作を選択してください" --title "Aurora GTK+ 2 エンジン" --radiolist --hide-column 2 --column 選択 --column dummy --column 操作 true install "インストール" false uninstall "アンインストール")
if [ $? -ne 0 ]; then exit 1; fi
if [ ${ACTION} == "install" ]; then
  install_check
  install
  completed "インストール"
else
  uninstall_check
  uninstall
  completed "アンインストール"
fi

*1:ダイアログ/システムトレイ(ツールチップとバルーン)で使用