Hotwireのインストール時の覚え書きとebuild
Hotwireは、新しい形のグラフィカルな端末/シェル環境。ユーザはウィンドウ下部にあるテキスト入力ボックスからコマンドを入力するのだが、組み込まれている(ビルトイン/内部)コマンドを実行すると、その結果は(コマンドによるが)グラフィカルでクリックなどの操作もでき、デスクトップ環境とも統合されている。*1外部コマンドを実行した場合には、/bin/sh*2経由の出力を表示する。
本家に書かれている依存パッケージ
Debian/Ubuntu、Fedora(バージョン7と8)については、code.google.com/p/hotwire-shell/wiki/BuildingFromSubversion
に依存関係が書かれている。
Debian/Ubuntuのパッケージ
(2007/12/7)Debianではlenny以降、UbuntuではHardy(8.04)以降に用意されている。Python 2.5は必要?
Python 2.4系 + pysqlite(バージョン2系/sqlite 3向け)で、import文と「sqlite3.connect」の部分をpysqlite2向けに置換する修正を行っても動作はしているようだ。Debian lenny(Python 2.4.4 + pysqlite 2.3.5)で、
$ sudo apt-get install python-vte python-dbus python-gnome2 python-gtksourceview2 python-pysqlite2 intltool unzip $ unzip [hotwire-0.620.zipの場所] $ cd hotwire-0.620/ $ sed -i -e 's/import sqlite3/from pysqlite2 import dbapi2 as sqlite/' -e 's/\(sqlite\)3\(.connect\)/\1\2/' hotwire/state.py $ sudo python setup.py install
として動作していることを確認。本家に「バージョン2.5が必要」と書かれていたため、完全に動作するかどうかは不明*3だが、履歴と設定*4はきちんと処理されているように見える。
Gentoo Linuxのebuild
Gentoo Linuxでは、bugs.gentoo.org/show_bug.cgi?id=183519
にebuildがあったのだが、対応バージョンが古いので、内容を大幅に変更して下に貼り付けた。場所は
(2008/3/25)app-shellsの下がよさそう。
ファイル名: hotwire-0.620.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit distutils gnome2-utils DESCRIPTION="An intelligent hybrid text/graphical shell for developers and system administrators" HOMEPAGE="http://code.google.com/p/hotwire-shell/" SRC_URI="http://hotwire-shell.googlecode.com/files/${P}.zip" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="sourceview pysqlite" RDEPEND="dev-python/pygtk dev-python/dbus-python x11-libs/vte sourceview? ( || ( dev-python/pygtksourceview dev-python/gnome-python-desktop ) ) pysqlite? ( =dev-python/pysqlite-2* ) !pysqlite? ( >=dev-lang/python-2.5 )" DEPEND="dev-util/intltool" pkg_setup() { if use !pysqlite && ! built_with_use dev-lang/python sqlite; then eerror eerror "Hotwire requires Python 2.5 with sqlite3 support or pysqlite2" eerror die "Please re-merge >=dev-lang/python-2.5 with USE=sqlite or enable \"pysqlite\" USE flag" fi if ! built_with_use x11-libs/vte python; then eerror eerror "Hotwire requires VTE with Python support" eerror die "Please re-merge x11-libs/vte with USE=python" fi } src_unpack() { distutils_src_unpack if use pysqlite; then sed -i \ -e 's/import sqlite3/from pysqlite2 import dbapi2 as sqlite/' \ -e 's/\(sqlite\)3\(.connect\)/\1\2/' \ "${S}"/hotwire/state.py || die "sed failed" fi } src_install() { DOCS="COPYING" distutils_src_install } pkg_postinst() { distutils_python_version python_mod_optimize "${ROOT}usr/$(get_libdir)/python${PYVER}/site-packages/hotwire" "${ROOT}usr/$(get_libdir)/python${PYVER}/site-packages/hotwire_ui" gnome2_icon_cache_update } pkg_postrm() { distutils_python_version python_mod_cleanup gnome2_icon_cache_update }
依存パッケージに関してはまだ不十分な部分がある可能性がある。以下は覚え書き。
- インストール自体はsetup.pyを使用する形(distutils)なので、基本的にはdistutilsのeclassで処理するが、intltoolはインストール時に必要
- Python 2.5系 + sqliteモジュール(>=dev-lang/python-2.5でUSE=sqlite指定)もしくはpysqlite 2 + ソース修正が必要
- dbus-pythonが無いと起動できない(必須)
- VTE(GTK+ 2の端末ウィジェットを提供するライブラリ)のPythonサポート(x11-libs/vteでUSE=python指定)は、端末エミュレータ機能で使用される(必須扱い)
- pygtksourceviewとgnome-python-desktopのどちらか一方があると、Python Workpad(Hotwire PyShell)で色付け(シンタックスハイライト)がされる。無くても基本的な動作には影響がないため、オプション扱い
- python_mod_optimize()とpython_mod_cleanup()関数により.pyc/.pyoファイルを管理する
- アイコンキャッシュ更新をする必要がある*5
- DOCS変数の値は、インストールしたいテキスト文書ファイルの内、distutils.eclassのdistutils_src_install()関数内のDDOCS変数に書かれている名前以外のもの。READMEなどはDDOCSに含まれるため、書く必要がない
- distutils_python_version()はpython_version()を呼んでいるだけだが、distutilsのeclassから呼ぶのに使える(どちらもPYVER/PYVER_MAJOR/PYVER_MINORの変数をセットする機能)
関連URL:
*1:lsのリスト表示で、右クリックメニューから、その項目を開くアプリを候補から選択したり、項目をゴミ箱にドラッグ・アンド・ドロップしたりなど
*2:現在は/bin/shを使用して、内部コマンドshを実装しているが、将来的には独自のものに置き換えたいらしい。hotwire/builtins/sh.pyのコメントも参照
*3:「sqlite3」というモジュールはPython 2.5から追加されているために「バージョン2.5以降」と書いてある可能性がある
*4:[ホームディレクトリ]/.hotwire/state/以下にhistory.sqliteとprefs.sqliteが作成される
*5:「AttributeError: 'NoneType' object has no attribute 'get_filename'」対策・http://code.google.com/p/hotwire-shell/issues/detail?id=62&can=1&q=icon も参照