Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mikutter メンテから見る pkgsrc システム紹介 / mikutter Nagoy...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Izumi Tsutsui
May 20, 2018
Programming
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mikutter メンテから見る pkgsrc システム紹介 / mikutter Nagoya 2018
#toshiakaigo2018 こと mikutter Nagoya 2018.5 での発表資料です
Izumi Tsutsui
May 20, 2018
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
CPUクロック20MHz RAM 16MBの LUNAで 30秒アニメGIF再生デモ / OSC2026Kyoto
tsutsui
0
65
OSC東京でいただいた UIAPduinoマイコンボードで PSG演奏と液晶ドッド絵デモ / osc2026Kagawa
tsutsui
0
320
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを ブラッシュアップしました / osc2026Tokyo-spring
tsutsui
1
99
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを OSC駆動の7日間で作った話 / OSC2026Osaka
tsutsui
1
200
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
380
今年もNetBSD環境を使って PC-6001のPSG演奏デモを作った話 / KOF2025
tsutsui
0
390
NetBSD/luna68kの歴史解説と、LUNAでアニメGIF再生デモと ついでにPC-6001デモも作った話 / OSC2025Kyoto
tsutsui
0
180
NetBSDの解説と NetBSD/luna68kの歴史と ついでにPC-6001展示 / OSC2025Tokyo-spring
tsutsui
0
260
GitHub Actionsを使ってNetBSDマイナー機種用のビルドテストCIを書いてみた話 / OSC2025Osaka
tsutsui
0
220
Other Decks in Programming
See All in Programming
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
140
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
510
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
150
Android CLI
fornewid
0
230
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
120
What's New in Android 2026
veronikapj
0
270
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.7k
Go 1.27 における memory allocation の高速化
andpad
0
290
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
470
Site-Speed That Sticks
csswizardry
13
1.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
How to Talk to Developers About Accessibility
jct
2
520
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
300
Visualization
eitanlees
152
17k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Optimizing for Happiness
mojombo
378
71k
KATA
mclloyd
PRO
35
15k
Transcript
mikutter メンテから見る pkgsrc システム紹介 mikutter Nagoya 2018.5 #toshiakaigo2018 Izumi Tsutsui
[email protected]
Mastodon: @
[email protected]
Twitter: @tsutsuii
普段は書かないので去年のmikutter会議の使いまわしですが とりあえず 自己紹介
@tsutsuii ✔ NetBSD 開発者 (but not プログラマ) ➢
[email protected]
➢いわゆる「謎マシン」担当
NetBSD/news68k SONY NEWS NetBSD/hp300 HP 9000/300 NetBSD/luna68k OMRON LUNA 等々
mikutter と @tsutsuii ✔ mikutter歴: 7年くらい ✔ pkgsrc の mikutter
のメンテナも やってます
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.
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パッケージ
pkgsrc 概要② •基本は「ソースを取得してビルド」 ➔イメージで言うと Gentooに近い? •バイナリパッケージのしくみもある •が、マンパワー・マシンパワー不足で バイナリパッケージの供給が遅かったり 依存関係解決がいまいちだったり •さらに、最新は
NetBSD 7.1.2 なのに 7.0 7.1用のバイナリしか作ってない、とか ユーザーの利便性より開発者の思想優先という感じ
pkgsrc/net/mikutter •2011年4月5日 mikutter 0.0.2.12 が pkgsrc ツリーにインポートされる •その時のコミットログ
pkgsrc/net/mikutter •のちにこれを見たとしぁさんのコメント •現在の git repository の README等には 同様の記載は残っていない模様…… •今は普通(?)の記載に戻っています
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
pkgsrcファイル •DESCR: パッケージ概要説明 さっきの moeeeeeeeeeee は これの中身 •PLIST: インストールファイルのリスト •distinfo:
upstreamファイルのハッシュ •files: pkgsrcが独自に追加するファイル mikutter の場合は起動用のシェルスクリプト •patches: pkgsrc独自パッチ 詳細は後述
pkgsrc ビルド概要① •依存関係のチェック 必要なパッケージがあれば先にビルドしてインストール •Upstreamからソースの .tar.gz 等を取得 •ビルド作業ディレクトリで展開 •pkgsrc固有のパッチを当てる •ビルドに使うツールの
wrapperを用意する コンパイラやオプションの差し替えその他
pkgsrc ビルド概要② •ビルドする mikutterの場合 rubyスクリプトなので実質何もしない •作業フォルダに仮インストールする mikutter の場合 ${DESTDIR}/share/mikutter 以下に入ります
•インストールファイルと PLIST を照合 •バイナリパッケージを作成 •作成したパッケージで実際のインストール
ruby gem の扱い① •各 gem を独立したパッケージとして登録 依存関係の多い gem だと再帰的になって結構大変 •同一
gemは1バージョンのみの登録が基本 パッケージは名称で管理していてバージョンは管理が別なので •gem 同士の依存関係も pkgsrc として管理 gem 自身にも依存関係記述のしくみがあるが 二重管理になっている
ruby gem の扱い② •異なるパッケージが、同一の gem の 異なるバージョンを要求している場合 ➢API/ABI非互換が明らか、かつ、 共存必要な場合は別の名前で別パッケージ化 ➢gem側の依存関係記述が不明確な場合は
pkgsrcの枠組みで依存関係を強制的に上書き gem側も依存関係のバージョン記載が 「最新バージョンを書いてる」「単に放置プレー状態」 といろいろなのでいろいろと難しい
ruby gem 依存の落とし穴 •先程書いたように、パッケージシステム的 依存関係は gemとは独立して管理 •しかし実行時は Gemfile 等に書かれた 依存関係がチェックされる
➔両者が不一致だと実行時エラーでハマる
ruby gem 依存の落とし穴 •ubuntu 17.10 の apt の mikutter で
gobject-introspection を手動で入れる 必要があったのも同様の問題 debian では直ってたけど ubuntu はずっと放置プレー •私はとりあえず Gemfile その他を見て 手動でメンテしてます わりとめんどい •詳しくは mikutter Redmine #1145 参照
totoridipjp gem問題 •mikutter 3.3 で pluggaloid gem 導入 •それと同時に totoridipjp
gem の発生 ハイテンションになっていたとしぁさんを思い出す •photo_support plugin が標準で totoridipjp gem を要求 •totoridipjp gem が入っていないと mikutter も起動しないという課題が発生 •plugin が要求する gem なので vendor以下 にも添付されていないという問題
totori.dip.jp とは
debian totoridipjp 対応
debian totoridipjp 対応
( ゚д゚)
debian totoridipjp 頓挫
debian totoridipjp 現状
張本人による述懐
pkgsrc での totoridipjp •debianで入るなら…と思ってたけど挫折
ちなみに AUR では
さらに Fedora では
/(^o^)\
pkgsrc独自パッチ •基本は upstream にフィードバックすべき •ただし基準はわりとアバウトな感じ ✔セキュリティ修正を緊急で当てる場合 ✔重大バグで次リリースを待てない場合 ✔マイナーOS対応を拒否られた場合 ?機能バグでも次のリリースが待てない ?オレが欲しい機能を追加したい
net/mikutter/patches •以下のようなのも入れてたり ✔masterへのマージが忘れられてるもの Twitpicの https 対応とか ✔チケット上で保留になっているが 手元ではそれなりに動いているもの delayer-deferred 2.x
対応とか 自分では直った気分になってて、 パッチが残っているのに気づいて 忘れられているのを思い出してたり……
pkgsrcコミットログ問題 •「upstreamのchangelogをログに書け」 という謎のルールがある •「URLリンクでは時が経つと消えるから」 という理論らしい •しかし、 upstream のドキュメントが 英語でない場合のルールは無いっぽい? •“No
English changelog” とだけ書いて 変更点を書かなくても怒られたことはない
pkgsrc mikutter ログ •伝統的(?)に、としぁさんの書いている リリースブログの変更点が、なんとなく 英訳されてログに書かれている ✗これにかかる時間のせいでリリース競争に負けがち
➢必要な各種 gemのパッケージ化と それらの依存関係の管理がメイン ➢オレオレ修正パッチを入れられる のはある意味役得というところ? ➢としぁ語リリースノート英訳は それなりに気合が必要ですが l10nの勉強になります まとめ