$30 off During Our Annual Pro Sale. View Details »

mikutter メンテから見る pkgsrc システム紹介 / mikutter Nagoya 2018

mikutter メンテから見る pkgsrc システム紹介 / mikutter Nagoya 2018

#toshiakaigo2018 こと mikutter Nagoya 2018.5 での発表資料です

Izumi Tsutsui

May 20, 2018
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. mikutter メンテから見る
    pkgsrc システム紹介
    mikutter Nagoya 2018.5
    #toshiakaigo2018
    Izumi Tsutsui
    [email protected]
    Mastodon: @[email protected]
    Twitter: @tsutsuii

    View Slide

  2. 普段は書かないので去年のmikutter会議の使いまわしですが
    とりあえず
    自己紹介

    View Slide

  3. @tsutsuii
    ✔ NetBSD 開発者 (but not プログラマ)
    [email protected]
    ➢いわゆる「謎マシン」担当
     NetBSD/news68k SONY NEWS
     NetBSD/hp300 HP 9000/300
     NetBSD/luna68k OMRON LUNA
    等々

    View Slide

  4. mikutter と @tsutsuii
    ✔ mikutter歴: 7年くらい
    ✔ pkgsrc の mikutter のメンテナも
    やってます

    View Slide

  5. pkgsrc とは
     www.pkgsrc.org より
    pkgsrc is a framework for building third-
    party software on NetBSD and other
    UNIX-like systems, currently over 17000
    packages.
    It is used to enable freely available
    software to be configured and built
    easily on supported platform.

    View Slide

  6. pkgsrc 概要①
    ●1997年 FreeBSD portから fork
    ●NetBSD標準のパッケージシステム
    ●NetBSD以外のシステムもサポート
    ✔Linux, FreeBSD, OpenBSD, IRIX, AIX,
    DragonflyBSD, OSF/1, HP-UX, QNX, Haiku,
    MirBSD, Minix3, Cygwin …
    ただし最初に動いたあとは放置というパターンもありがち
    ●pkgsrc-2018Q1 では 18000パッケージ

    View Slide

  7. pkgsrc 概要②
    ●基本は「ソースを取得してビルド」
    ➔イメージで言うと Gentooに近い?
    ●バイナリパッケージのしくみもある
    ●が、マンパワー・マシンパワー不足で
    バイナリパッケージの供給が遅かったり
    依存関係解決がいまいちだったり
    ●さらに、最新は NetBSD 7.1.2 なのに
    7.0 7.1用のバイナリしか作ってない、とか
    ユーザーの利便性より開発者の思想優先という感じ

    View Slide

  8. pkgsrc/net/mikutter
    ●2011年4月5日 mikutter 0.0.2.12 が
    pkgsrc ツリーにインポートされる
    ●その時のコミットログ

    View Slide

  9. pkgsrc/net/mikutter
    ●のちにこれを見たとしぁさんのコメント
    ●現在の git repository の README等には
    同様の記載は残っていない模様……
    ●今は普通(?)の記載に戻っています

    View Slide

  10. pkgsrcファイル
     pkgsrc/net/mikutter の中身
    $ pwd
    /home/tsutsui/pkgsrc/net/mikutter
    $ ls -l
    total 124
    drwxr-xr-x 2 tsutsui users 512 Apr 3 05:11 CVS
    -rw-r--r-- 1 tsutsui users 106 May 15 2013 DESCR
    -rw-r--r-- 1 tsutsui users 2632 Mar 9 23:37 Makefile
    -rw-r--r-- 1 tsutsui users 48326 Feb 8 23:55 PLIST
    -rw-r--r-- 1 tsutsui users 763 Mar 9 23:37 distinfo
    drwxr-xr-x 3 tsutsui users 512 Apr 3 05:11 files
    drwxr-xr-x 3 tsutsui users 512 Apr 3 05:11 patches
    $ ls -l patches
    total 20
    drwxr-xr-x 2 tsutsui users 512 Apr 3 05:11 CVS
    -rw-r--r-- 1 tsutsui users 501 Aug 14 2013 patch-core_plugin_libnotify_rnotify.rb
    -rw-r--r-- 1 tsutsui users 393 Jan 10 2016 patch-core_plugin_photo__support_Gemfile
    -rw-r--r-- 1 tsutsui users 1271 Mar 9 23:37 patch-core_plugin_photo__support_photo__support.rb
    -rw-r--r-- 1 tsutsui users 425 Jan 14 14:15 patch-mikutter.rb

    View Slide

  11. pkgsrcファイル
    ●DESCR: パッケージ概要説明
    さっきの moeeeeeeeeeee は これの中身
    ●PLIST: インストールファイルのリスト
    ●distinfo: upstreamファイルのハッシュ
    ●files: pkgsrcが独自に追加するファイル
    mikutter の場合は起動用のシェルスクリプト
    ●patches: pkgsrc独自パッチ
    詳細は後述

    View Slide

  12. pkgsrc ビルド概要①
    ●依存関係のチェック
    必要なパッケージがあれば先にビルドしてインストール
    ●Upstreamからソースの .tar.gz 等を取得
    ●ビルド作業ディレクトリで展開
    ●pkgsrc固有のパッチを当てる
    ●ビルドに使うツールの wrapperを用意する
    コンパイラやオプションの差し替えその他

    View Slide

  13. pkgsrc ビルド概要②
    ●ビルドする
    mikutterの場合 rubyスクリプトなので実質何もしない
    ●作業フォルダに仮インストールする
    mikutter の場合 ${DESTDIR}/share/mikutter 以下に入ります
    ●インストールファイルと PLIST を照合
    ●バイナリパッケージを作成
    ●作成したパッケージで実際のインストール

    View Slide

  14. ruby gem の扱い①
    ●各 gem を独立したパッケージとして登録
    依存関係の多い gem だと再帰的になって結構大変
    ●同一 gemは1バージョンのみの登録が基本
    パッケージは名称で管理していてバージョンは管理が別なので
    ●gem 同士の依存関係も pkgsrc として管理
    gem 自身にも依存関係記述のしくみがあるが
    二重管理になっている

    View Slide

  15. ruby gem の扱い②
    ●異なるパッケージが、同一の gem の
    異なるバージョンを要求している場合
    ➢API/ABI非互換が明らか、かつ、
    共存必要な場合は別の名前で別パッケージ化
    ➢gem側の依存関係記述が不明確な場合は
    pkgsrcの枠組みで依存関係を強制的に上書き
    gem側も依存関係のバージョン記載が
    「最新バージョンを書いてる」「単に放置プレー状態」
    といろいろなのでいろいろと難しい

    View Slide

  16. ruby gem 依存の落とし穴
    ●先程書いたように、パッケージシステム的
    依存関係は gemとは独立して管理
    ●しかし実行時は Gemfile 等に書かれた
    依存関係がチェックされる
    ➔両者が不一致だと実行時エラーでハマる

    View Slide

  17. ruby gem 依存の落とし穴
    ●ubuntu 17.10 の apt の mikutter で
    gobject-introspection を手動で入れる
    必要があったのも同様の問題
    debian では直ってたけど ubuntu はずっと放置プレー
    ●私はとりあえず Gemfile その他を見て
    手動でメンテしてます わりとめんどい
    ●詳しくは mikutter Redmine #1145 参照

    View Slide

  18. totoridipjp gem問題
    ●mikutter 3.3 で pluggaloid gem 導入
    ●それと同時に totoridipjp gem の発生
    ハイテンションになっていたとしぁさんを思い出す
    ●photo_support plugin が標準で
    totoridipjp gem を要求
    ●totoridipjp gem が入っていないと
    mikutter も起動しないという課題が発生
    ●plugin が要求する gem なので vendor以下
    にも添付されていないという問題

    View Slide

  19. totori.dip.jp とは

    View Slide

  20. debian totoridipjp 対応

    View Slide

  21. debian totoridipjp 対応

    View Slide

  22. ( ゚д゚)

    View Slide

  23. debian totoridipjp 頓挫

    View Slide

  24. debian totoridipjp 現状

    View Slide

  25. 張本人による述懐

    View Slide

  26. pkgsrc での totoridipjp
    ●debianで入るなら…と思ってたけど挫折

    View Slide

  27. ちなみに AUR では

    View Slide

  28. さらに Fedora では

    View Slide

  29. /(^o^)\

    View Slide

  30. pkgsrc独自パッチ
    ●基本は upstream にフィードバックすべき
    ●ただし基準はわりとアバウトな感じ
    ✔セキュリティ修正を緊急で当てる場合
    ✔重大バグで次リリースを待てない場合
    ✔マイナーOS対応を拒否られた場合
    ?機能バグでも次のリリースが待てない
    ?オレが欲しい機能を追加したい

    View Slide

  31. net/mikutter/patches
    ●以下のようなのも入れてたり
    ✔masterへのマージが忘れられてるもの
    Twitpicの https 対応とか
    ✔チケット上で保留になっているが
    手元ではそれなりに動いているもの
    delayer-deferred 2.x 対応とか
    自分では直った気分になってて、
    パッチが残っているのに気づいて
    忘れられているのを思い出してたり……

    View Slide

  32. pkgsrcコミットログ問題
    ●「upstreamのchangelogをログに書け」
    という謎のルールがある
    ●「URLリンクでは時が経つと消えるから」
    という理論らしい
    ●しかし、 upstream のドキュメントが
    英語でない場合のルールは無いっぽい?
    ●“No English changelog” とだけ書いて
    変更点を書かなくても怒られたことはない

    View Slide

  33. pkgsrc mikutter ログ
    ●伝統的(?)に、としぁさんの書いている
    リリースブログの変更点が、なんとなく
    英訳されてログに書かれている
    ✗これにかかる時間のせいでリリース競争に負けがち

    View Slide

  34. ➢必要な各種 gemのパッケージ化と
    それらの依存関係の管理がメイン
    ➢オレオレ修正パッチを入れられる
    のはある意味役得というところ?
    ➢としぁ語リリースノート英訳は
    それなりに気合が必要ですが
    l10nの勉強になります
    まとめ

    View Slide