さて、post-commitでrpmbuild and createrepoを考えているのですが権限が問題。apacheでbuildしたくないし、createrepoはapacheじゃなくてyumでやりたい。rpmbuildは絶対にapcheやroot権限で動かしたくない。本来ならサービス機にはインストールすらしたくない。
suid Python scrip とかできかれている。レスがないところを見ると、だれも問題にしていないらしい。ちなみにperlにはsuidperlなるものがあって足を打ち抜くことが簡単らしい。そもそもにscript
で権限を変えて実行することに無理がある気がする。スクリプトは所詮、インタプリタプログラムのデータに過ぎない。sudoだとインタプリタ自体が指定の権限で実行されているわけだ。スクリプトの#!/usr/bin/env xxxもloaderがそれを見てインタプリタに渡しなおしているだけだ。loaderはバイナリだったらメモリにロードするが。
と・・・こんなことを書いているときに解決策を思いついた。xmlrpcを使ってyum権限で走っているcreaterepo serverとbuild serverを用意して、そいつにたいしてrequestを投げる構造にしておけばええんでないかい?ちょっと大げさな気がしないでもないが。そしてxmlrpcが、私にとって「何もかも釘に見えるハンマー」と化しつつある。しかも開発機にserverを立てればアレだ、rpmbuildをサービス機に入れなくてすむ。
unix - permissionあれこれちょっと納得。
うが~~なソリューションたち
- Subversionのpost-commitフックでsvn updateできないときはよりrootで実行されてるだぁ??はーー。
- FedoraForum.org > The Community Lounge > Programming > Python with setuid try set the setuid bit on /usr/bin/python 吹きそうになった。
- 2.3.5以前のPythonはやばいらしい。しかし2.4っていろいろな意味でWebAppを書くための環境が整ったなあといえる。CentOS5からは2.4だし、HTTPdも2系列のapacheだ。そしてepelとかを組み合わせればTurboGearsをyumから入れることができる。easy_installすら実行の必要がない。そしてmod_wsgiもyumで入れることができる。すばらしい。
- Python: Arbitrary code execution through SimpleXMLRPCServer2.4なら問題なし。
おお~~。
gaucheではbinaryを作ることでsetuidすることができる(正確にはバイナリのふりとあるが・・・)。
rubyのexerbやpythonのpy2exeがあるが、Linux用のバイナリではない。
4 件のコメント:
NautilusSvnなるものを見つけたが、コードを見たら蕁麻疹が出そうになった。
お試しコードならともかく
def update_file_info(self, file):
とかなっているとか、一行80文字超えているコードは自分のシステムに入れる気しないなぁ。indentがtabだし。
PEP8 Style Guide for Python Code
自分の書くコードは、意図的に2spaceなんだけどね。(libraryと混ざるのがいやだから。)
pysvn
/usr/bin/ldが-lneonがないとか騒ぐが、とりあえず消してbuildで手動コピー・・・。
てか、ここまでやったならpython setup.py bdist_rpmができるようにしておいてくれよ。
mandrivaむけのrpmは存在するが、python2.5なのでたぶんだめ。
まあ、この際だからsource rpmを作るか。version upに対応しやすいだろうし。
kit/linux/make_rpm.py
があった・・・。
現状60行くらい。
pysvnでソースをcheckoutして、popen3でpython setup.py bdist_rpmする。
popen3で得られたstderrのオケツのexit 0をチェックするようにしてXMLRPCサーバ化すれば実装終わり。
popen3でキックしたときにcwdにdistが作られることを見落としていた。cdしてからpopen3する。forkしたときにcwdが引き継がれるため。
コメントを投稿