さくらのレンタルサーバー(スタンダード)でTrac-1.0.ja1+Subversionを使うメモ
もうtrac1.0日本語版がある!
http://www.i-act.co.jp/project/products/products.html
ということで、さっそく使おうとしたら、ひどい目*1に遭ったのでメモ。
文中の$HOMEは、実際の絶対パスに置き換える。
なにはともあれ、作業開始。
主にここを参考にした。
http://attosoft.info/trac/wiki/TracJaInstall
GenshiというTracの依存パッケージが絡むときにUnicodeDecodeErrorが出るかも、ということでデフォルトエンコーディングをutf-8にしておく。
echo $PYTHONPATH echo "import sys; sys.setdefaultencoding('utf-8')" > $HOME/usr/local/lib/python2.7/site-packages/sitecustomize.py
sitecustomize.pyは、.pthファイルみたく、pythonのサーチパスに置いておくと自動で読み込まれて、指定したスクリプトの実行前に走るファイル、らしい。
日本語のために国際化するので、Babelを先にインストール。
BabelがないとTracをインストールするときに国際化ファイルが作れない。
easy_install --prefix=$HOME/usr/local babel easy_install --prefix=$HOME/usr/local http://www.i-act.co.jp/project/products/downloads/Trac-1.0.ja1.zip #依存関係を見てGenshiもインストールされる。
trac envを作る。ここではpublicという名前にした。
cd $HOME/trac trac-admin public initenv Project Name[My Project]> Database connection string [sqlite:db/trac.db]> (何も書かないで改行)
cgiファイル生成・配置
trac-admin public deploy public cp $HOME/trac/public/cgi-bin/trac.cgi $HOME/www/trac/public.cgi(ドキュメントルート以下ならどこでも)
$HOME/www/trac/public.cgiの最初の論理行として、これを書いておく。
import sys sys.path.append("$HOME/usr/local/lib/python2.7/site-packages") sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Trac-1.0.ja1-py2.7.egg") sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Babel-0.9.6-py2.7.egg") sys.path.append("$HOME/usr/local/lib/python2.7/site-packages/Genshi-0.6-py2.7.egg")
public.cgiの権限設定
chmod u+x $HOME/www/trac/public.cgi
trac-admin $HOME/trac/public repository addrepository resync
ここでエラー。はてな?
TracError: Unsupported version control system "svn": Can't find an appropriate component, maybe the corresponding plugin was not enabled?
調べたところ、$HOME/trac/public/conf/trac.iniにこれを追記する。
[components] tracopt.versioncontrol.svn.svn_fs.subversionconnector = enabled
trac-adminシェルをいったん閉じて、再度resyncすると、また別のエラー。はてな?
TracError: Unsupported version control system "svn": No module named svn
調べたところ、svn-pythonというSubversionのPythonバインディングが必要で、それはSubversionのソースファイルに含まれていて、インストールにはswigとやらが必要なんだそうな。
swigとsvn-pythonをインストール。
http://www28.atwiki.jp/worktip/pages/14.html
wget http://prdownloads.sourceforge.net/swig/swig-2.0.8.tar.gz tar zxvf swig-2.0.8.tar.gz cd swig-2.0.8 ./configure --prefix=~/usr/local make make install tar zxvf subversion-1.6.16.tar.gz cd subversion-1.6.16 which swig ./configure --prefix=~/usr/local \ --enable-swig-bindings=python \ --with-swig=~usr/local/bin/swig make swig-py make install-swig-py #installとswigの間にハイフンが要ることに注意 echo $PYTHONPATH ln -s $HOME/usr/local/lib/svn-python/svn $HOME/usr/local/lib/python2.7/site-packages/svn ln -s $HOME/usr/local/lib/svn-python/libsvn $HOME/usr/local/lib/python2.7/site-packages/libsvn python -c "import svn"
これで万事OKのはず。またresyncする。
trac-admin $HOME/trac/public repository resyncResyncing repository history for ... 1 revision cached. Done.
いいぞ!その調子だ!
それで、svn commitと同時にtracのリポジトリブラウザが更新されるように前に書いたpost-commitファイルを作っておく。
SVNリポジトリ配下のhooks/post-commit.tmplをhooks/post-commitにコピーして編集する。
#!/bin/sh PYTHONPATH=※; export PYTHONPATH ※:これがないとhookスクリプトがtrac-adminを叩くときにImportErrorがくるけど、もう面倒なので※のところに、シェルでtrac-adminが動く状態でのpython -c "import sys; print ':'.join(sys.path)"の出力を貼っておく。 REPOS="$1" REV="$2" $HOME/usr/local/bin/trac-admin $HOME/trac/public changeset added "$REPOS" "$REV"
実行権限をつけておく。
chmod a+x post-commit
さて、hookスクリプトのチェックをしましょうかね、とsvn commitしたところでエラー。もうやだ。
svn: Commit failed (details follow): svn: Couldn't perform atomic initialization svn: Couldn't perform atomic initialization svn: SQLite compiled for 3.7.9, but running with 3.7.6.2
調べたところ、リポジトリを古いバージョンのものとして作っておくといいそうな。
http://www.snowbotic.com/archives/61
svnadmin create --pre-1.6-compatible
解決。hookスクリプトも走る。あー。
見るだけでログインしないし、trac.iniの[components]にこれを追記。
trac.web.auth.loginmodule = disabled
シンタックスハイライトを使う。
Pygmentsがおすすめなんだそうで。
easy_install --prefix=$HOME/usr/local pygments
おまけ:Pygmentsに好きなスタイルを追加する。
ここではhonzaさんのvim2pygmentsを使って、気に入っているVimのカラースキームを追加してみた。
vim2pygments.tar.gzのダウンロードページはここ。
cp $HOME/usr/local/share/vim/vim73/colors/desert.vim ./ tar zxvf honza-vim2pygments-19a9339.tar.gz python honza-vim2pygments-19a9339/vimpygments.py desert.vim > vim_desert.py cp vim_desert.py $HOME/usr/local/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/
エディターで$HOME/usr/local/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/__init__.pyを開く。
#: Maps style names to 'submodule::classname'. STYLE_MAP = { ... "Vim_Desert": "vim_desert::DesertStyle", # この行を追加する。vim_desert.pyにDesertStyleというクラスがあるってこと。 }
WindowsバッチファイルでSleep
そんなものはなくて、こうするしかないらしい。
ping localhost -n 10 > nul
Tera TermでワンクリックSSHログイン
なにこれ便利。
http://ttssh2.sourceforge.jp/manual/ja/macro/
http://ttssh2.sourceforge.jp/manual/ja/macro/command/connect.html
autologin.ttl
; hostnameに自動でログインする Tera Term マクロ ; ttpmacro.exeに関連づけて使う connect "hostname /ssh /2 /auth=publickey /user=username /passwd=password /keyfile=path\to\privatekey"
パスフレーズなしの鍵は/passwdを取ればおk。
Windows7のタスクバーに置くには、拡張子をいったん.exeにしてタスクバーにドラッグ&ドロップ、そのあと拡張子を.ttlに戻して、タスクバーに置いたアイコンを右クリック>ファイル名を右クリック>ショートカット>リンク先の拡張子を.exeから.ttlに変更する。
さくらのレンタルサーバー(スタンダード)に置いたSVNリポジトリを使う前にやること
サーバーにsubversionをインストールして、svnadmin create nanika
ここまではいい。
それをSSHでチェックアウトするとき、$HOME/binにsvnserveがないと具合が悪い。
だからこうしておく。
cd mkdir ~/bin cd ~/bin ln -s path/to/svnserve
こういうわけらしい↓
svnserve: command not found への対処@さくらインターネット
さくらインターネットに設置した subversion で ssh ログイン時に発生するエラー
TortoiseSVNでチェックアウトしようとすると、こういうエラーが出てくるものの、よくわからず、超ハマった。
To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
Ubuntuのシェルでsvn checkoutを叩くと、これが返ってきて、納得。そんなことかいな。
bash: svnserve: command not found
svn+sshでのチェックアウトでは、ログインシェルを開かないので.profileで設定したコマンドサーチパスが効かない。
ログインシェルを開かないで利用できるコマンドサーチパスには、とにかく$HOME/binが含まれている。
$HOME/binにsvnserveがあるといい。ないとだめ。それだけ。はあ…。
消えちゃ困るので引用しておく。
/usr/bin などの「普通のパス」に svnserve がインストールされている場合は何もしなくても SSH トンネリング経由でクライアント側からそれを実行できるが、そうでない場合はそのままでは実行できない。そして、サーバ側のログインシェルのパスの設定をいじってもそのような「普通でないパス」を検索できるようにはできない。というのも、SSH トンネリングではログインシェルを起動せずにコマンドの実行を行う必要があるからだ。 SSH は独自にコマンド検索パスを持っている。 調べたところ、これは ssh サーバ sshd の設定によって、 ssh 経由でリモートからコマンドを発行したとき、コマンドサーチパスである PATH をはじめとしたユーザ環境に制限がかけられているから、とのことらしい。なるほど、だから "command not found" なのだね。じぶんは、コマンドサーチパスのある場所にはインストールしていないのだから、このような結果となった。 すると、レンタルサーバゆえにサーバの設定は変えられないので、その制限された中で出来る事といえば、コマンドサーチパスのある場所に、 svn 関連コマンドを置く事、それしか、なさそうだ。--その唯一と思えたアプローチは、さいわいうまくいった。 リモートホスト、つまり ssh 接続先であるリポジトリを置いたレンタルサーバでは、次のように、コマンドサーチパスの設定の中に、じぶんのパーミッションが許されている場所があった。 $ ssh -l username hostname 'echo $PATH' /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/home/username/bin 最後の "/home/username/bin" がそれで、とりもなおさずホームディレクトリの bin ディレクトリ。したがって、ここに、必要な svn 関連のコマンドを置いてしまえばよい、ことになる。 これで万事よし、というよりは、 sakura のレンタルサーバをリポジトリに利用するには、このようにするほか、手段がないのかもしれない。
Windows7で、フォルダーの種類ごとに表示方法を設定する
2つのフォルダーがあるとする。
- サムネイルを見たいファイルがあるフォルダー「写真」
- そうでないフォルダー「その他」
「写真」フォルダーを開く。
- プロパティ>カスタマイズ>フォルダーの種類>このフォルダーを次の目的に最適化>「ピクチャ」に設定>OK
- 右クリック>表示>特大アイコン
- 整理*1>フォルダーと検索のオプション>表示>フォルダーに適用>はい>OK
「その他」フォルダーを開く。
- プロパティ>カスタマイズ>フォルダーの種類>このフォルダーを次の目的に最適化>「一般項目」に設定>OK
- 右クリック>表示>一覧
- 整理>フォルダーと検索のオプション>表示>フォルダーに適用>はい>OK
これで、フォルダーの種類を「ピクチャ」に設定したフォルダーは「特大アイコン」で表示され、フォルダーの種類を「一般項目」に設定したフォルダーは「一覧」で表示される。
フォルダーの種類を設定するとき「このテンプレートをすべてのサブフォルダーに適用する」を選択すると、そのフォルダー以下がすべてそのフォルダーと同じ種類になる。うまく分類するといい。
*1:ウィンドウの左上あたりにある
Pythonで、さくらのレンタルサーバー(スタンダード)のCGIを使う
さくらのレンタルサーバーではCGIを使うにあたってこういう決まりになってる。
どうもPythonスクリプトに.cgiという拡張子をつけて、$HOME/www/配下に置いたらいい様子。
ここではFlaskを使って、Hello Worldを表示してみる。
hello.cgi
#!/usr/local/bin/python #coding: utf-8 from wsgiref.handlers import CGIHandler from application import app CGIHandler().run(app)
application.py
#coding: utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!"
レンタルなので、flaskをimportする前にサーチパスを書かないといけない。
import sys sys.path.append("path/to/flask")