Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
20年前のマシンを NetBSDでメンテするということ オープンソース カンファレンス2015関西@京都 なぜ謎マシンなのか ふたたび Izumi Tsutsui
[email protected]
Slide 2
Slide 2 text
LUNA@OSC京都 ご当地展示 since 2011
Slide 3
Slide 3 text
今年で 5年目
Slide 4
Slide 4 text
※OSC2014京都 mikutterセミナースライドより https://t.co/3jHbtyzIAe
Slide 5
Slide 5 text
おっさん まじやばい
Slide 6
Slide 6 text
LUNAとは よしだともこ先生のブロクより LUNAというのは、1980年代から1990年代 の初めごろにかけて、京都に本社を持つオ ムロン株式会社が発売していた、UNIXワー クステーションの名前です (その当時、私はこの会社のUNIXワークス テーション開発部門で働いていました) http://notredameningen.kyo2.jp/e422862.html
Slide 7
Slide 7 text
初代LUNA: 1989年発売 LUNA-II: 1991年発売
Slide 8
Slide 8 text
来場者の方の感想 学生の方: 「同い年です」 「まだ生まれてません」 年配(?)の方: 「LUNA使ってました」 「どうやって液晶を つないでいるのか?」
Slide 9
Slide 9 text
VGA改造してます
Slide 10
Slide 10 text
NetBSDとは えびはらさん「NetBSDのご紹介」より NetBSDは、4.3/4.4BSD&386BSDベースの OSです。プロジェクトは1993年3月21日 から開始していて、現在も活発に開発が進 んでいます。60種類以上のハードウェア を、単一ソースツリーでサポートしていま す。 https://github.com/ebijun/NetBSD/blob/master/Guide/guide.rst
Slide 11
Slide 11 text
60種類以上? 2015年8月現在 acorn32 algor alpha amd64 amiga amigappc arc atari bebox cats cesfic cobalt dreamcast emips epoc32 evbarm evbmips evbppc evbsh3 ews4800mips hp300 hpcarm hpcmips hpcsh i386 ibmnws hppa iyonix landisk luna68k mac68k macppc mipsco mmeye mvme68k mvmeppc netwinder news68k newsmips next68k ofppc pmax prep rs6000 sandpoint sbmips sgimips shark sparc sparc64 sun2 sun3 vax x68k zaurus http://www.NetBSD.org/ports/
Slide 12
Slide 12 text
最近は流行に乗って ラズベリーパイ等の ARM系サポートが 活発です (NetBSD/evbarm)
Slide 13
Slide 13 text
20年前のマシンとは HP 9000/300: 1985年〜 SONY NEWS: 1987年〜 OMRON LUNA: 1989年〜
Slide 14
Slide 14 text
・hp300 ・news68k ・luna68k いずれも4.4BSDでも サポート対象でした 4.4BSD (1992年) ※セミナー発表後訂正 完全に勘違いしてて発表時に気づいたのですが、 4.4BSDに入ってるのは MIPSの news3400 で、 それを元にした NetBSD/newsmips を参考に NetBSD/news68k の移植したという流れでした…
Slide 15
Slide 15 text
今は私が面倒見てます( '−`) 1999年〜 2004年〜 2012年〜 http://www.NetBSD.org/people/port-maintainers.html
Slide 16
Slide 16 text
なぜ謎マシンで(略) 本末転倒 「そこに山があるから?」 http://www.ceres.dti.ne.jp/tsutsui/netbsd/port-news68k.html#19990410
Slide 17
Slide 17 text
自分で移植をトライして、 それで動くようになったら なんかすごくない? ……というくらいのきっかけ ちなみに移植始めるまで NEWS触ったことありませんでした (ゴメンナサイ)
Slide 18
Slide 18 text
NetBSDの移植性 ・各機種で共通な部分のソース ・各機種で固有の部分のソース ・それぞれをつなぐインターフェース これらが整理されていることが NetBSDの特徴であり移植性の源です
Slide 19
Slide 19 text
謎マシン移植とは OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通 デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種固有部 ←OSの全体の5%くらい?
Slide 20
Slide 20 text
謎マシン移植とは OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通 デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種固有部 ←OSの全体の5%くらい? この部分を書くのが 「移植」という作業
Slide 21
Slide 21 text
謎マシン移植とは https://twitter.com/tsutsuii/status/575350057462956032
Slide 22
Slide 22 text
https://twitter.com/tsutsuii/status/575350376796405761
Slide 23
Slide 23 text
https://twitter.com/yojiro/status/575350578982735872
Slide 24
Slide 24 text
◯| ̄|_
Slide 25
Slide 25 text
移植の次は 移植して最初に動いた時は 画面・ディスク・ネットワーク くらいしか動いてない まだ動いていないものを 動くようにする
Slide 26
Slide 26 text
作る
Slide 27
Slide 27 text
書く https://twitter.com/tsutsuii/status/10177412312
Slide 28
Slide 28 text
展示する
Slide 29
Slide 29 text
もらう https://twitter.com/MiodVallat/status/446550357272174593
Slide 30
Slide 30 text
書く https://twitter.com/tsutsuii/status/500724224693006336 https://twitter.com/tsutsuii/status/500728603546370051
Slide 31
Slide 31 text
展示する https://twitter.com/tsutsuii/status/503008453669822466
Slide 32
Slide 32 text
それでもそのうち ネタが切れてくるんですよね…… ぼちぼちやりましょう
Slide 33
Slide 33 text
新しいデバイスサポートを 書いたりしなくても、 メンテが必要なことは 実はそれなりにあります
Slide 34
Slide 34 text
OS構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通 デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種固有部 ←OSの全体の5%くらい?
Slide 35
Slide 35 text
OS構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通 デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種固有部 ←OSの全体の5%くらい? OS全体共通部分が変わった場合、 機種別の接続I/Fも書き直す必要がある
Slide 36
Slide 36 text
NetBSD 5.0 が出る前の SMP性能向上の大変更では 古いm68kマシンが 結構大変でした……
Slide 37
Slide 37 text
http://mail-index.NetBSD.org/port-luna68k/2007/03/03/msg000015.html
Slide 38
Slide 38 text
NetBSD/luna68k は 実機を持っていないのに いろいろメンテしてて、 OSC2011京都に向けて 実機を入手してテストしたら ほぼそのまま動いたのが うれしかったんですよ!!
Slide 39
Slide 39 text
OS構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通 デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種固有部 ←OSの全体の5%くらい? 共通のドライバが書き換わっただけで、 ある日突然動かなくなった事例も
Slide 40
Slide 40 text
Eject で panic 事件 https://twitter.com/7n2jju/status/501658321330270208
Slide 41
Slide 41 text
前は動いてたはず… https://twitter.com/tsutsuii/status/501713998057046017
Slide 42
Slide 42 text
本当にパニクる (´・ω・`) https://gist.github.com/tsutsui/5e0df8c47bb1b85be99b
Slide 43
Slide 43 text
謎のドライバ記述 ここで構造体ポインタ fd が NULLになってるぽいんだけど… http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238
Slide 44
Slide 44 text
謎のドライバ記述 この初期化は何? (´・ω・`) http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238
Slide 45
Slide 45 text
謎のドライバ記述 ここの fd のアクセスでは 落ちないの? (´・ω・`) http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238
Slide 46
Slide 46 text
memset(lp, 0, sizeof(struct disklabel)); memset(lp, 0, sizeof(struct cpu_disklabel)); memset(lp, 0, sizeof(struct disklabel)); memset(clp, 0, sizeof(struct cpu_disklabel)); これで直ったんだけど…
Slide 47
Slide 47 text
直ったのはいいけど、 最初にコミットされた 18年前のソースから 変わってないんだけど… しかもちょっと前まで動いてたし
Slide 48
Slide 48 text
とりあえず修正コミット http://mail-index.NetBSD.org/source-changes/2014/08/19/msg057893.html
Slide 49
Slide 49 text
某blogに取り上げられる http://cpplover.blogspot.jp/2014/08/sparcnetbsdeject.html
Slide 50
Slide 50 text
なぜかバズる あっきぃさん ごめんなさい
Slide 51
Slide 51 text
バグ発現の原因 2番目の memset() は最初から overrun しててはみ出していた (が、偶然後ろに何も無かった?) http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238
Slide 52
Slide 52 text
http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238 バグ発現の原因 NetBSD 6 → 7 の間で、 構造体 fd_softc に含まれる 機種共通部構造体サイズが変化 (約240バイト→約270バイト)
Slide 53
Slide 53 text
http://nxr.NetBSD.org/xref/src/sys/arch/sparc/dev/fd.c?r=1.154#2238 バグ発現の原因 256バイトを超えたことにより malloc() の割り当てが変わり、 fd が disklabel 構造体の後ろに 配置された →結果上書き発生
Slide 54
Slide 54 text
これに限らず、 何もしてないのに ある日突然発動するバグ 結構あったりします 特にgccのバージョン上がった時とか
Slide 55
Slide 55 text
まとめ ● 自分で書いて動くと楽しいです ● ネタや気力が尽きてきたら OSC展示駆動がおすすめです ● ソフトであっても放置してると 動かなくなるのでメンテ重要です