etckeeperをopensuseの公式リポジトリに入れたいぞ! ver.2

34
1 etckeeper openSUSE の公式リポ ジトリに入れたいぞ ! Ver.2 中野充敏 (@ItSANgo)

Upload: mitsutoshi-nakano

Post on 20-Jul-2015

414 views

Category:

Software


0 download

TRANSCRIPT

Page 1: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

1

etckeeper を openSUSE の公式リポジトリに入れたいぞ ! Ver.2

中野充敏 (@ItSANgo)

Page 2: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

2

改版履歴

● 2014-Aug.-17 Ver.1 公開● 2015-Jan.-10 Ver.2 発表

● Ver.2 での追加・変更箇所は赤色で表示されているよ。

Page 3: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

Who am I

● 中野充敏 @ItSANgo● http://d.hanena.ne.jp/Itisango/

● http://www.facebook.com/profile.php?id=100005833863069

● https://plus.google.com/116024680042537520422/posts

● http://mixi.jp/show_profile.pl?id=789759

● ただ今求職中● TOEIC 355 点 ( 有意性切れてます )

● 英語は話せない ( はず )

Page 4: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

4

予習

● 「 etckeeper を openSUSE の公式リポジトリに入れたいぞ ! 」

● http://www.slideshare.net/MitsutoshiNakano/etckeeper-38070309

● 予習してきました ?

● 予習してないと何のことかわからないよ !

Page 5: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

5

何を話すか

● etckeeper について● 2014 年 8 月から今日 (2015 年 01 月 10 日 ) ま

でに起こったことをかいつまんで● というか、資料流用しているよ、いい加減な奴

w● 予習してこなかった人は黒い部分を読むといいよ。

Page 6: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

6

etckeeper って何● Joey Hess が書いたユーティリティ

● URL が変わりました。

● http://joeyh.name/code/etckeeper/

● → http://etckeeper.branchable.com/

● /etc の下を (git など )VCS で管理

● /etc をいじったら、手動で起動

● cron で自動起動

● YUM/APT/ZYpp/DNF と連携、自動起動

● おかしくなったら旧バージョンと見比べてトラブルシュート

● @_hito_ さんもおすすめ

● 『 Ubuntu Server 実践バイブル 現場で即運用に役立つサービス設定のノウハウ』● http://www.amazon.co.jp/dp/4048866877

● Debian/Ubuntu/Fedora で公式リポジトリに入っている

Page 7: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

7

でも

● openSUSE の公式リポジトリにはない● 非公式 (utilities) リポジトリにはある。● いちいち非公式リポジトリから取ってくるのも

面倒 ?

● なら、公式リポジトリに入れてもらえるようお願いすればいいんじゃね ?

Page 8: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

8

お願いするにはどうすればいいの

● Debian の RFP(Request For Package) みたいなのあるのかな ?

● とりあえず日本語 ML で訊いてみた● http://lists.opensuse.org/opensuse-ja/2014-06/msg00031.html

● 回答 : http://lists.opensuse.org/opensuse-ja/2014-06/msg00032.html

Page 9: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

9

openFATE という方法と opensuse-factory ML があるらしい

● openFATE (https://features.opensuse.org/)● package リクエストの投票システムのようなもの● あまり機能していないらしい

● openSUSE Factory

(http://ja.opensuse.org/Factory_Distribution)● 要するに開発版

● opensuse-factory ML● openSUSE Factory について議論する ML

Page 10: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

10

opensuse-factory ML に投げてみた● http://lists.opensuse.org/opensuse-factory/2014-06/msg00068.html

Page 11: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

11

速攻で返事が返ってくる● http://lists.opensuse.org/opensuse-factory/2014-06/msg00069.html

Greg Freemyer

Page 12: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

12

超訳 ( 注 : TOEIC 355 点 )

● 君の文章は、誰か人に頼んでいる文体だけど、 openSUSE はコミュニティなんだよ。

● 自分でやれ !

言い出しっぺの法則 !!!

Page 13: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

13

何から始めればいいか ?

● とりあえずそれも、教えて君になって訊いてみる。

● http://lists.opensuse.org/opensuse-factory/2014-06/msg00071.html

– openSUSE Build Service のアカウントを取る。( 取得済み )

– パッケージに対して role( 役割 : メンテナ・バグオーナ )を申請する。

● 今回は bug owner を申請した。● パッケージに bug があったら連絡が来る ( 損な役回り ?)

– パッケージを Factory へ submitrequest する。

Page 14: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

14

イメージ

● 第 1 回 Open Build Service 道場 (P.17 参照 )● http://www.slideshare.net/ftake/1-open-build-service

Page 15: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

15

速攻で decline されました orz

● 機械的に decline の判断が下りました。● どうも spec ファイルが悪いらしい。● utilities の etckeeper の version も 1.7 と古い。● ( 当時 ) 最新は etckeeper-1.12

● (2015-Jan.-09 現在 etckeeper-1.17)

● なら、最新版に更新するか…

Page 16: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

16

そして初めてソースを見ました● Etckeeper-1.12 はシェルスクリプト ( 他 ) の塊

● 一つのスクリプトは 100 行程度、小さい。● etckeeper メインスクリプトがサブのスクリプトを呼び出

す。– 全部で 133 ファイル ( ディレクトリ含む )

● サブスクリプトがメインスクリプトを再帰的に呼び出してたり…。

● そこそこ複雑。● 意外な発見あり

● 対応していないと思っていた機能があったり

Page 17: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

17

対応していないと思っていた機能が

● Debian(Ubuntu)/Fedora では APT/YUM を実行した後、 etckeeper が自動起動する。

● openSUSE では ZYpp を起動しても etckeeperはスルー● 仕様 ( 未対応 ) かと思っていたけど

Page 18: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

18

あった● ls したら

● zypper-etckeeper.py

– あるやん ! (2012 年から )

– 今まで動いてなかっただけやん !

● bug でした。● スクリプトに実行権限がついていませんでした。● 実行権限をつけると動く。

– けど、まだなんかおかしい。● upstream に pullrequest

● 速攻で update されました w

Page 19: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

19

ここでいきなり etckeeper の使い方● Usage: etckeeper [subcommand] [args...]

● eg. etckeeper commit

● /etc/etckeeper/[subcommand].d/ ディレクトリ配下のスクリプトを順番に実行する。

Page 20: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

20

じゃあ、こんなことをしてみたら● etckeeper ../init restart

● デーモンを再起動しようとする w

● 変じゃね ?

● とりあえず、 [subcommand] に「 ../ 」が入っていないかチェックする処理を入れました。

● pullrequest しました。● https://github.com/joeyh/etckeeper/pull/14

Page 21: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

21

するとある方からご意見が

● 超訳 ( 注 : TOEIC355 点 )

● etckeeper のバグではなく、使い方の問題だろう。● 「 ../ 」を禁止すべきではない。● 裏ワザだって技だ ! それが UNIX だ !

alerque

まさかの宗教戦争勃発か ?!

Page 22: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

22

いきなりの緊張緩和 w

● あっさり修正されました。● pullrequest したコードよりもより厳しいチェッ

クが入りました。● egrep '[^-a-z_]'

Page 23: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

23

その後様々な修正が pullrequest されるのであった

● その一部● https://github.com/joeyh/etckeeper/pull/12 (decline)

● https://github.com/joeyh/etckeeper/pull/14 (merged)

● https://github.com/joeyh/etckeeper/pull/15 (merged) (rpmlint)

● https://github.com/joeyh/etckeeper/pull/16 (merged) (rpmlint)

● https://github.com/joeyh/etckeeper/pull/17 (decline)

● https://github.com/joeyh/etckeeper/pull/18 (decline)

● 小さな変更は merge されるけど、大きな変更は pending になってしまう。

● merge するとも decline とも伝えてくれない。

– 一応 decline されました。 (2014-Jan.-09 現在 )

● mail には答えてもらえない。

Page 24: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

24

ZYpp プラグインが遅い (pull/17)● 先述の実行権限をつけることで plugin は動き出した。

● でも遅い。

● zypper が 30 秒でタイムアウトを起こす。● 調べてみた

● etckeeper は APT/YUM/ZYpp の動作前後でパッケージのリストを取得する。 (rpm -qa を前後 2 回 )

– 差分を取って追加・削除されたパッケージを VCS の log に残す。– これが遅い、 30 秒以上かかる。

● パッケージリストを log に残さない設定ができるように patch を書いた(pull/17)

● upstream には取り込まれず (decline)

● ひょっとすると openSUSE の rpm の bug かも ( ちょっと調べました )

Page 25: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

25

openSUSE の RPM が遅い● 09 月 10 日に Joey から回答がありました。

● https://github.com/joeyh/etckeeper/pull/17#issuecomment-55059127

● 超訳 ( 注 :TOEIC355 点 )

– お前の言っていることの意味が解らん。– 環境が悪いだけじゃないの ?

● Aleque さんからもコメントが…● https://github.com/joeyh/etckeeper/pull/17#issuecomment-55078734

● 超訳 : ( 小笠原さん )

– http://lists.opensuse.org/opensuse-ja/2014-09/msg00013.html

– タイムアウトするってどういう意味(で、どういうシナリオでそれが起きるの)?

– それで etckeeper がなんで困るの?

Page 26: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

26

なんで困るのか ?

● ZYpp がプラグイン zypper-etckeeper.py を呼び出す。

● zypper-etckeeper.py が etckeeper を呼び出し、 VCS(git) を起動する。

● 但し ZYpp プラグインのタイムリミットは 30秒 ( デフォルト )

● 30 秒を過ぎるとプラグインごと SIGKILL される。● git commit の最中に SIGKILL されたら…● 想像するのもヤダ w

Page 27: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

27

皆さんに time rpm -qa | wc してもらいました。

● 皆さんの環境でも再現するか否かを確認する意味も込めて● http://lists.opensuse.org/opensuse-ja/2014-09/msg00012.html

● http://lists.opensuse.org/opensuse-factory/2014-09/msg00223.html

● 一瞬で返ってくるマシンもあれば 1 分以上かかる環境もあり● http://lists.opensuse.org/opensuse-factory/2014-09/msg00230.html

● 長いスレッドになりました。

● DB 周りに問題があるらしく、 Bug 票も起こされました。● https://bugzilla.opensuse.org/show_bug.cgi?id=897353

– WONTFIX になってる orz

● openSUSE だけではなく RPM 系ディストリが共通に持っている問題の可能性あり (pull/17)

Page 28: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

28

ZYpp だけでなく YUM にも対応したい (pull/18)

● openSUSE は ZYpp だけではなく YUM にも一応対応している。

● Fedora も YUM だけではなく DNF もあるし。

● でも etckeeper は 2 つの packagemanager の混在を想定していない。

● 修正を書いた (pull/18)

● でも変更忘れのファイルがあるとして upstream には取り込まれず。

● .spec ファイルの変更を忘れていると言われたんだけど…● TODO には載った。

● http://etckeeper.branchable.com/todo/multiple_highlevel_package_managers/

● 変更作業はそのうちやります。 ( 但し後述 )

Page 29: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

29

どうにか完成● 2014 年 08 月 16 日 ( つまり Ver.1 発表前日 )

utilities に submitrequest

● 2014 年 08 月 17 日 (Ver.1 発表日 )

● utilities は accept

– 変更は utilities プロジェクトに取り込まれました。● 2014 年 08 月 17 日

● Factory へ submitrequest

– https://build.opensuse.org/request/show/245241● accept されました。 (08 月 25 日 )

– 2 回ほど decline されましたが、細かな修正で対応● openSUSE 13.2 には etckeeper-1.13 が入っています。

Page 30: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

30

どんどん進化する etckeeper

● DNF にも対応したよ。● Upstream の URL が変わったよ。

● http://etckeeper.branchable.com/

● GitHub への pullrequest に代わってこっちを使ってね !(Joey) ( 超訳 TOEIC355 点 )

● でも使い方が解らん ( 私も alerque も )– https://github.com/joeyh/etckeeper/pull/26#issuecomment-68162884

– 返事がない…。

Page 31: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

31

http://etckeeper.branchable.com/ について

● branchable.com は Ikiwiki で実装されているらしい。● https://ikiwiki.info/

● Ikiwiki は Wiki を git で管理するシステムらしい。● Wiki そのものが git リポジトリになっているイメージ● git clone git://etckeeper.branchable.com/ で etckeeper が落ちて

くる。● Wiki の内容自体が doc/ ディレクトリに格納される。● TODO にコメントすると、 commit される。

● Wiki にコメントされるたびにハッシュ値が変わるってどうよ ?

Page 32: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

32

ところで Joey Hess ってどんな人 ?

● http://joeyh.name/code/

● なんと debhelper も Ikiwiki もこの人の作● 多分お忙しいんですよね

● dis ってごめんなさい

Page 33: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

33

所感● 言い出しっぺの法則こわい w

● 英語が解らなくても何とかなる。● 思ったよりいけてない !

● 意外と泥臭い FLOSS の世界● 逆に考えるんだ !

● 活躍の場はかえって大きいと言えるんじゃね ?

● お気に入りのソフトを見つけてソースを追っかけてみるといいよ。 !

● openSUSE Build Service なら簡単に package 化することができるよ ( 宣伝 )

Page 34: etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2

34

最後に

● ソースは友達 !● どうしようもなくなったらML 等で助けを求めよう !● もちろん詳細に説明する必要はあるけどね