こんなスクリプトでどうだっ。 [Vine Linux]
つーことで、とり急ぎプログレス表示用のシェルスクリプトを書いてみた。
使い方は、rpmbuild -bb hoge.rpm | tee build.log | progress.sh みたいな感じなんだけど、まだその手前まで。
tmp.sh が適当な文字列を標準出力に出すだけのスクリプトだけど、これが吐き出す文字数と行数を見ながら、こんな感じのプログレス表示をしてくれる。
使い方は、rpmbuild -bb hoge.rpm | tee build.log | progress.sh みたいな感じなんだけど、まだその手前まで。
#!/bin/sh COUNT=0 LINES=0 BASE_SIZE=3000 BAR_W=70 bar(){ while read line; do let $((COUNT+=${#line})) let $((LINES+=1)) if [ $(($LINES % 10)) = 0 ]; then PERCENT=$((100*COUNT/BASE_SIZE)) BAR_LEFT=$((BAR_W*COUNT/BASE_SIZE)) printf "%3d%%[" $PERCENT for i in $(seq 1 $BAR_LEFT); do printf "=" done printf ">" for i in $(seq 1 $((BAR_W-BAR_LEFT))); do printf " " done printf "]\r" fi done printf "\n" } ./tmp.sh |bar
tmp.sh が適当な文字列を標準出力に出すだけのスクリプトだけど、これが吐き出す文字数と行数を見ながら、こんな感じのプログレス表示をしてくれる。
./progress.sh 60%[===================================> ]
イイ感じっ!ですね。
self-buildの改良は、じっくりと時間を取って腰を落ち着けて作業しないと、失敗したら依存関係再構築で泣き目を食らいますので (^^;;
いくつか機能を増強したいので、近いうちに実装しませう!
by munepi (2010-01-26 09:39)
昨日の夜に Trac の svn に commit したバージョンで、とりあえず CUI でのプログレス表示は機能するようになったので、後は zenity で GUI に対応させるところをやっつけようと思っています。
上記ができたら Seed 向けのパッケージを更新して、テストしてもらおうかと画策してますが、munepi さんの方の変更点も随時 merge してテストしてもらいましょう。
なんとか 5.1 リリースと同時期に Plus/5 に put できれば良いかなと。
by kazu (2010-01-27 12:51)
さきほど、一度ダウンロードされたファイル⦅ダウンロードに成功したソースやrpmなどのファイルたち⦆に対しては、しかるべき場所にキャッシュされていることが確認できれば、再ダウンロードしなくても済むように改良してみました。echo のメッセージをもう少し適切にだす工夫もしてよいかもしれませんが、どうでしょうか?
あと、最低限やりたいなーと思うものが、
* 他の環境でビルドしたself-build 系パッケージの rpm を、別の環境でインストールできる仕組みを作る。
ですね。
しかし、これは実際にはそこまでむずかしくはなくて、
あらかじめ、しかるべきキャッシュディレクトリにビルド済みrpmをいれておいて、spec側にチェック&工夫を施せばできそうですね。
ひとまず、ハラダさんのビルド状況プログレスバーの確認を急ぎたいと思います。今週末は、ちと私用で時間がさけませんorz
by munepi (2010-01-30 17:13)
> しかるべき場所にキャッシュされていることが確認
> できれば、再ダウンロードしなくても済むように改良
> してみました。
個人的にはありだとと思うんですが、(ごくまれに)問題のあるファイルがキャッシュに残ってしまっている場合等を考慮すると、今度は強制的にダウンロードさせる or キャッシュを無視する、というオプションが必要そうですね。
> 他の環境でビルドしたself-build 系パッケージの rpm を、
> 別の環境でインストールできる仕組みを作る。
まあ hoge.rpm hoge-devel.rpm を普通に rpm -U で入れておいて、self-build-hoge は --nodeps で入れてしまえば良い、
という話もありますが、普通の人には分かりにくいかも知れませんよね。確かに。
とりあえず現状で一旦パッケージを更新して Seed に put しようと思います。
引き続き細かい点を改善していきましょう。
by kazu (2010-01-31 13:58)
> 今度は強制的にダウンロードさせる or キャッシュを無視する、
> というオプションが必要そうですね。
今朝、self-build.conf に追加しときました。どうでしょうか?
# とはいっても、ただ単に if をひっかけただけですが。
昔、こういうのを遊びで作っていました。
■[Vine][Linux] self-build に特化した apt-get 風な self-build コマンドを作ってみた
http://d.hatena.ne.jp/munepi/20090308/1236524388
ここまでやる必要はないと思うのですが、
/etc/self-build.conf でビルド済みrpmを入れるオプション = "yes" だったら,
/var/apt/cache/archives 以下に、
ビルド済みrpmがあるかどうか確認する。
もしビルド済みrpmが存在すれば、
/var/cache/self-build へコピーし、pre-allocate-rpm.sh で突っ込む。
ってな、ことを spec ファイル内に仕込めば良さそうだと考えていますが、どうでしょうか?
by munepi (2010-02-02 17:44)
> /var/cache/apt/archives 以下に、
> ビルド済みrpmがあるかどうか確認する。
> もしビルド済みrpmが存在すれば、
> /var/cache/self-build へコピーし、
> pre-allocate-rpm.sh で突っ込む。
できなくは無いと思いますが、どれくらい需要があるのかなー、という感じですね。そういうマニアックな使い方をする人が。(笑)
でも設定で切り替えられるのであれば、とりあえず追加しておいても良いと思いますよ。
by kazu (2010-02-02 18:00)
> マニアックな使い方
マニアックっすか(w
では、こういうのはどうですか?
self-build-hoge の %post(trans) で失敗したら、それ以降の self-build-foo1, self-build-foo2 の %post(trasn) は実行しないで、再インストールするように促すメッセージを出す。
by munepi (2010-02-06 22:28)
キャッシュする件、対応ありがとうございます。
んが、とりあえず CACHE_DOWNLOADED_FILES=no にしてパッケージ更新しようと思います。
現状だとキャッシュしたファイルが延々と残り続けてしまうので、これを掃除する仕組みを用意できたらデフォルト yes でも良いとは思うのですが…。
あと、
> self-build-hoge の %post(trans) で失敗したら、
> それ以降の self-build-foo1, self-build-foo2 の
> %post(trasn) は実行しないで、再インストール
> するように促すメッセージを出す。
はありですね。
んが 5.1 向けはそろそろ厳しそうなので、時間が無ければとりあえず対応できなくても良いと思います。
by kazu (2010-02-08 22:40)
キャッシュしたソースファイルたちを削除する仕組みは、定期的にお掃除となれば、cron しかないでしょう。もしくは、self-build-rpm.sh 内に、find でチェックして日付が 180 日以上(self-build.conf で設定可能とする!?)であれば、削除する前処理か後処理を入れるというのも1つのてかもしれません。
大まかなビルド時間を示すプログレスバーについて、手元で試しております。_BASE_SIZE ですが、5000バイト単位でどうでしょうか?
http://trac.vinelinux.org/wiki/self-build-creation
に「[資料]ビルドログのファイルサイズ」を追加してみました。
by munepi (2010-02-17 17:12)
> 大まかなビルド時間を示すプログレスバーについて、
> 手元で試しております。_BASE_SIZE ですが、5000バイト
> 単位でどうでしょうか?
個人的には下3桁切り捨ての1000バイト単位でも良いかな?とも思いますが、その辺りは self-build パッケージに一番 contribute さている munepi さんの好みで良いと思いますよ。^^
あと意図的に小さいログサイズを渡すと、それが原因で rpmbuild に失敗する事が分かったので、0.9.7 で修正してみました。
by kazu (2010-02-19 00:13)