Windows向けバイナリ差分取得/パッチ当てツールWinIPSをWineでビルドして使用するための自動インストールスクリプト
バイナリデータの差分を取ったり当てたりできる*1Windows向けのWinIPSというツール(M.K.S氏作)があり、Wine上でそのまま問題なく動作はするが、ソースが公開されている上に小規模なツールなので、Wineの開発パッケージを用いてビルドしてみたところ、「Wine上でMIDIマッパー設定が行えるGUIツールについて(後半)」のMIDIせれくたーに近い要領で一部修正を行うことにより、表示も含めて正しく動作した。
ここではWinIPSのソースを取得し、修正後ビルドを行って専用のWine環境(既定では[ホームディレクトリ]/.wine-winips/とする)へインストールし、freedesktop.orgのメニューから起動できるようにするところまでを自動化したスクリプトを貼り付ける。
動作にはWineの開発パッケージ*2とunzipに加え、wgetもしくはcurlが必要。
[任意]ファイル名: wine-winips-install.sh ライセンス: LGPL-2 (or lator)
#! /bin/sh # download/patch/build/install script for WinIPS 0.64 # version 20100221 # (C) 2010 kakurasan # Licensed under LGPLv2+ URL=smblabo.web.fc2.com/files/src/wi064src.zip TEMPDIR=$(mktemp --tmpdir -d winips.XXXXXXXX) if [ ${?} -ne 0 ]; then echo "cannot create tempdir" exit 1 fi cd ${TEMPDIR} export WINEPREFIX="${WINEPREFIX:-${HOME}/.wine-winips}" APPDIR="${WINEPREFIX}"/dosdevices/c:/"Program Files"/winips APPDIR_DOS="$(winepath -w "${APPDIR}" | sed 's:\\:\\\\:g')" # fetch if ! wget ${URL}; then if ! curl ${URL}; then exit 1 fi fi echo "dd1547ec2057b945f584764cf917597f wi064src.zip" | md5sum -c || exit 1 # extract unzip $(basename ${URL}) || exit 1 # fix japanese text cat <<EOF | base64 -d | zcat | patch -p1 H4sIAB2PgEsCA0vJTEtT0C0tUijPzMssKNY10DMz0csvykzXL0otzi8tSk7VK0pGlkQW5+XS1dXF q5OXS1tbG7d2BwcFXSMjHXMFbSBppuDgwMulAETKmWkKiimpaZl5qSkajm4R8UGuwf6hQc6u8S4+ PpoKNTUKyJIhjkHu8V4BfpoQnUAphfhwTz9jI6DzfBz93EMd3V0VQIx4L8cARz/XYFcdheBQJ7CI i6ubY6hPCEhnQVFiem6iQnJ+Smp8QWJ6qoalsRHYyNS8FKB79PVhhipA3G1oYgpyuKGJCZACuxwE XP1coKwA/4DQAAWlrWfu71l3V0MtQFMJKuHk6u7pB3SbAhT4uvqFeoa4+ioo9b9tOtn3YqJ/08mp MX3LNNRCNJV0FODA08U33j8gxNPfL97RJ9wxMtjfL8Q/ABjC+A0iwSTsPjh788x9DTUPdPcDAJtS TPQ6AgAA EOF # build info winemaker -D_WIN32 -I/usr/include/wine/windows winips.dsp || exit 1 # build make CFLAGS="-m32" || exit 1 # set PATH / create wine prefix cat <<EOF > path.reg || exit 1 REGEDIT4 [HKEY_CURRENT_USER\Environment] "PATH"="${APPDIR_DOS}" EOF regedit path.reg || exit 1 # install mkdir -p "${APPDIR}" || exit 1 strip winips.exe.so || exit 1 cp winips.exe.so "${APPDIR}" || exit 1 cp -a *.txt appicon.ico "${APPDIR}" || exit 1 # .desktop mkdir -p ~/.local/share/applications/wine/Programs/ || exit 1 cat <<EOF > ~/.local/share/applications/wine/Programs/winips.desktop || exit 1 [Desktop Entry] Name=WinIPS Comment=Binary diff/patch utility Exec=env WINEPREFIX="${WINEPREFIX}" wine winips.exe.so Type=Application StartupWMClass=Wine Path=${APPDIR} Icon=${APPDIR}/appicon.ico EOF update-desktop-database ~/.local/share/applications || exit 1 # cleanup cd .. rm ${TEMPDIR} -fr
(2010/2/21)スクリプトのエンコーディングを指定せずに処理ができるように修正・PATH指定の部分なども調整/修正
使い方についてはユーザインターフェースが非常にシンプルなので迷うことはないが
- パッチ作成:「操作」を「IPSファイル作成」にして元のファイルと変更後のファイルを指定後「作成」を押す
- パッチ適用:「操作」を「IPSパッチ」にしてIPSファイルとパッチを当てるファイルを指定後「適用」を押す
となる。
アンインストールする場合は
- Wine環境の[ホームディレクトリ]/.wine-winips/以下を消す
- [ホームディレクトリ]/.local/share/applications/wine/Programs/winips.desktopを消す
- コマンド「update-desktop-database ~/.local/share/applications」を実行
の流れで作業を行う。
使用したバージョン:
- Wine 1.1.37
- WinIPS 0.64