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

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

Hotwireのインストール時の覚え書きとebuild

Hotwireは、新しい形のグラフィカルな端末/シェル環境。ユーザはウィンドウ下部にあるテキスト入力ボックスからコマンドを入力するのだが、組み込まれている(ビルトイン/内部)コマンドを実行すると、その結果は(コマンドによるが)グラフィカルでクリックなどの操作もでき、デスクトップ環境とも統合されている。*1外部コマンドを実行した場合には、/bin/sh*2経由の出力を表示する。

  1. 本家に書かれている依存パッケージ
  2. Debian/Ubuntuのパッケージ
  3. Python 2.5は必要?
  4. Gentoo Linuxのebuild

本家に書かれている依存パッケージ

Debian/UbuntuFedora(バージョン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 Linuxebuild

Gentoo Linuxでは、
bugs.gentoo.org/show_bug.cgi?id=183519
ebuildがあったのだが、対応バージョンが古いので、内容を大幅に変更して下に貼り付けた。場所はgnome-extraの下あたりに。
(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.eclassdistutils_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.sqliteprefs.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 も参照