2008年2月8日金曜日

rpm-build + post-commit

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rpm-buildであってrpmbuildじゃない。Yumで探すときは気をつけてね。

さて、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あれこれちょっと納得。

うが~~なソリューションたち


おお~~。
gaucheではbinaryを作ることでsetuidすることができる(正確にはバイナリのふりとあるが・・・)。
rubyのexerbpythonのpy2exeがあるが、Linux用のバイナリではない。

4 件のコメント:

nori さんのコメント...

NautilusSvnなるものを見つけたが、コードを見たら蕁麻疹が出そうになった。

お試しコードならともかく
def update_file_info(self, file):
とかなっているとか、一行80文字超えているコードは自分のシステムに入れる気しないなぁ。indentがtabだし。

PEP8 Style Guide for Python Code

自分の書くコードは、意図的に2spaceなんだけどね。(libraryと混ざるのがいやだから。)

nori さんのコメント...

pysvn

/usr/bin/ldが-lneonがないとか騒ぐが、とりあえず消してbuildで手動コピー・・・。
てか、ここまでやったならpython setup.py bdist_rpmができるようにしておいてくれよ。

mandrivaむけのrpmは存在するが、python2.5なのでたぶんだめ。

まあ、この際だからsource rpmを作るか。version upに対応しやすいだろうし。

nori さんのコメント...

kit/linux/make_rpm.py
があった・・・。

nori さんのコメント...

現状60行くらい。

pysvnでソースをcheckoutして、popen3でpython setup.py bdist_rpmする。

popen3で得られたstderrのオケツのexit 0をチェックするようにしてXMLRPCサーバ化すれば実装終わり。

popen3でキックしたときにcwdにdistが作られることを見落としていた。cdしてからpopen3する。forkしたときにcwdが引き継がれるため。