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展示駆動がおすすめです ● ソフトであっても放置してると 動かなくなるのでメンテ重要です