Slide 1

Slide 1 text

GitHub Actionsを使って NetBSDマイナー機種用の ビルドテストCIを書いてみた話 オープンソースカンファレンス大阪 2025 GitHub Actionsで謎マシン Izumi Tsutsui [email protected] Twitter: @tsutsuii Mastodon: @[email protected]

Slide 2

Slide 2 text

今回のスライドの前半は 昨年11月のOSC愛媛の NetBSDの紹介スライドを 流用しています

Slide 3

Slide 3 text

OSCのページの 今日のOSC大阪の セミナーセッション情報 を見ると、今回も……

Slide 4

Slide 4 text

https://event.ospn.jp/osc2025-osaka/session/1935508

Slide 5

Slide 5 text

https://event.ospn.jp/osc2025-osaka/session/1935508

Slide 6

Slide 6 text

●聴講者が全員PC-6001を知ってる ●セミナー後にPC-6001ソフト開発 の思い出を語る方 ●展示ブースで Z80マシン語の話 が始まる ……みたいな感じでした 一方、昨年 11/9 の大阪南港ATC 関西オープンフォーラムでは

Slide 7

Slide 7 text

大阪・京都では 想定の斜め上の 質問をされる 濃い方が多いので どこまで入門編に すべきか……

Slide 8

Slide 8 text

と思いつつ、 せっかく真面目に 「NetBSDのご紹介」 に沿ったスライドを 書いたので 今回も再放送で

Slide 9

Slide 9 text

BSDとは? ●Berkeley Software Distribution ●カリフォルニア大学バークレー校 で開発されたUNIX系OS ●’70年代 UNIX研究として開発開始 ●’80年代 ネットワーク機能、 仮想記憶など現代のOSの 基礎を築く ●UNIXの進化と普及に貢献

Slide 10

Slide 10 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases

Slide 11

Slide 11 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 1BSD 1978年3月 PDP-11

Slide 12

Slide 12 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 2BSD 1979年5月 viエディタ

Slide 13

Slide 13 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 3BSD 1980年3月 VAX 仮想記憶

Slide 14

Slide 14 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.0BSD 1980年10月 signal機構

Slide 15

Slide 15 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.1BSD 1981年7月 性能強化

Slide 16

Slide 16 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.2BSD 1983年8月 TCP/IP

Slide 17

Slide 17 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD 1986年4月 VAX以外の 複数機種対応

Slide 18

Slide 18 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD Net/2 1991年6月 80386対応

Slide 19

Slide 19 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 386BSD 0.0 1992年2月 IBM-PC用

Slide 20

Slide 20 text

●Intel 80386プロセッサ向け ●初のオープンソースUNIX系OS? ●4.3BSD Net/2ベース ●企業や大学が主だった UNIX系OSが一般(?)の ユーザでも利用可能に ●実は趣味プロジェクト だった、という話 386BSD

Slide 21

Slide 21 text

●いずれも386BSDをベースとした パッチ集として開始  FreeBSD ➔ 性能重視、x86 PCをターゲット  NetBSD ➔ 設計重視、全CPUをターゲット NetBSD, FreeBSD

Slide 22

Slide 22 text

●“Of course, it runs NetBSD” ➔特定の機種に依存しない設計 ●“Reasonable Goal” ➔性能より「理にかなった」設計 ●仮想記憶やデバイスドライバ等の 一貫性を持つインタフェース設計 NetBSDの特長 

Slide 23

Slide 23 text

●いろんなCPUやデバイスで動く ➔組み込み系での採用例が多い NetBSDの特長  https://x.com/yuyarin/status/1154647238280302593

Slide 24

Slide 24 text

NetBSD 10.1でのサポート機種 トップページはいったんこれだけ 変なマシンばっかり載せてると 「NetBSDって古いマシンでしか動かないんですよね?」 とか言われるのが嫌、という一部の中の人の主張が…… https://www.netbsd.org/

Slide 25

Slide 25 text

NetBSD 10.1でのサポート機種 トップページはいったんこれだけ 変なマシンばっかり載せてると 「NetBSDって古いマシンでしか動かないんですよね?」 とか言われるのが嫌、という一部の中の人の主張が…… https://www.netbsd.org/ 本題(?)は ここを クリック

Slide 26

Slide 26 text

NetBSD 10.1でのサポート機種 “Tier I”機種 まあ、これも一部古いですが…… https://wiki.netbsd.org/ports/

Slide 27

Slide 27 text

NetBSD 10.1でのサポート機種 “Tier II”機種 一応これだけのリリースバイナリがあります https://wiki.netbsd.org/ports/

Slide 28

Slide 28 text

NetBSD port maintainer  私 ([email protected]) の担当分

Slide 29

Slide 29 text

NetBSDの特長  FreeBSD Press No.12「NetBSDとMI構造」 ●「どんなマシンでも動かせるような実装  になっている」 ということが本質 ●その思想により、各開発者が干渉せず、  全体として改善していくことができ、  それがマイナーなマシンを含む多くの  アーキテクチャをサポートし続けること  を可能にしている ●「いろんなマシンで動く」というのは  「どのマシンに対しても適用できるよう  実装する」ということの結果に過ぎない

Slide 30

Slide 30 text

●抽象化されたインタフェース実装 NetBSDの特長  https://social.mikutter.hachune.net/@osa_k/112066453265169340

Slide 31

Slide 31 text

「プログラミング わからん」 と言ってても 半年で移植できる とか

Slide 32

Slide 32 text

一人で4機種を 担当してて 実ユーザーが 世界で3人だけでも なんとかなる とか

Slide 33

Slide 33 text

では、 各NetBSDリリースで 各マイナー機種 (≒太古の遅いマシン)の バイナリのビルドは どうしているのか?

Slide 34

Slide 34 text

今から25年前の NetBSD 1.5 の頃は 各機種でビルド MC68030 25MHz 16MB の SONY NWS-1750で 一週間弱かかってました

Slide 35

Slide 35 text

NetBSDのもう一つの特徴 クロスビルド環境 ●「セルフコンパイル」「セルフビルド」 バイナリを作るホスト=バイナリを実行するホスト ●「クロスコンパイル」「クロスビルド バイナリを作るホスト≠バイナリを実行するホスト ●当初は「速いマシンでビルドする」目的 ●次第に「起動フロッピー」等を含む  「すべてのバイナリをクロスビルド」  という仕組みが構築される

Slide 36

Slide 36 text

原理上は Linuxでも Windows WSLでも MacOSでも NetBSDリリースの バイナリを作成可能 ただ、NetBSD以外でテストする人が少ないので たまにコケたりはします

Slide 37

Slide 37 text

ここまでが ざっくりとした NetBSDのご紹介

Slide 38

Slide 38 text

ここからは NetBSDのLive Imageと それを使った GitHub Action CI の話 ……なのですが、 プログラミングネタは どうにもスライドにしづらくて 適当に流していきます

Slide 39

Slide 39 text

NetBSDておくれLive Image http://www.ceres.dti.ne.jp/tsutsui/netbsd/liveimage/

Slide 40

Slide 40 text

Live Image とは  Live CD の USBメモリ/エミュレータ版 USBメモリなどに書き込んでブート または エミュレータ用ディスクとしてブート すれば 「それなりの環境」 でNetBSDが起動するディスクイメージ

Slide 41

Slide 41 text

使い方

Slide 42

Slide 42 text

ておくれ NetBSD [検索]

Slide 43

Slide 43 text

イメージ ダウンロード

Slide 44

Slide 44 text

書き込みツール Rawrite32

Slide 45

Slide 45 text

Rawrite32 インストール

Slide 46

Slide 46 text

Rawrite32 実行

Slide 47

Slide 47 text

USBメモリ書き込み

Slide 48

Slide 48 text

USBメモリ起動

Slide 49

Slide 49 text

Welcome to teokure!

Slide 50

Slide 50 text

Firefoxも日本語で使えます

Slide 51

Slide 51 text

mikutterも動きます

Slide 52

Slide 52 text

mozcで日本語も打てます

Slide 53

Slide 53 text

簡単!! ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

Slide 54

Slide 54 text

そんなの動いて当たり前ですか? ……NetBSDだと、 素のインストール状態から ここまで動くようにするのは 結構大変なのです J( 'ー`)し

Slide 55

Slide 55 text

(以上 OSC2014北海道スライド流用) Live Image作成自体も 大部分を自動化してあるので、 2011年から現在まで pkgsrcの四半期リリースごとに Live Imageを作っています

Slide 56

Slide 56 text

Live Image自動作成 と エミュレータで起動 ができれば GitHub Actionsで CIテスト実行もできる? ……と無理やり ネタを繋げていきます

Slide 57

Slide 57 text

GitHub Actions

Slide 58

Slide 58 text

GitHub Actions

Slide 59

Slide 59 text

GitHub Actions

Slide 60

Slide 60 text

GitHub Actions環境 やはりメジャーな環境が…… ●Ubuntu (Linux)、 Mac OS、Windows  の環境に対応 ●OSSには「ビルドのしくみ」はたいてい  あるので「ビルドが通るかどうか」の  テストはすぐに動かせる ●テストコードを書けば(書けば)  テストも自動実行可能  (AIがテストを自動で書いてくれる未来が来ると   いいですね……)

Slide 61

Slide 61 text

GitHub Actions for NetBSD? 「テスト自動化は当然でしょ?」という風潮 ●NetBSDはマイナー(?)なので、  各種アプリのビルドが通らないことが  よくある ●バグレポを出すと「GitHub Actionsで  ビルドテストできないの?」と聞かれる ●ということで調べてみた

Slide 62

Slide 62 text

vmactions / netbsd-vm すでにある https://github.com/vmactions/netbsd-vm

Slide 63

Slide 63 text

vmactions / netbsd-vm 試してみるとわりとあっさり動く

Slide 64

Slide 64 text

vmactions / netbsd-vm 実際の活用事例も https://zenn.dev/okuoku/scraps/79ddaac06fe700

Slide 65

Slide 65 text

netbsd-vm を使ってみて クロスビルドの恩恵がもっと欲しい ●現状で amd64 と aarch64 のみ ●X関連バイナリが入っていない  (CI時に追加する必要がある) ●VMイメージがプリビルドされているので  カスタマイズがしづらい ●NetBSD/vax メーリングリストで  「VAXでGitHub Actionsテストしたい」  という話がありやってみることに

Slide 66

Slide 66 text

NetBSD Actions 作成方針 基本はLive Image作成と同じ ●NetBSDソース一式を取得 ●NetBSDクロスビルドツール一式をビルド ●起動可能Live Imageをビルド ●VAXエミュレータsimhもCI時にビルド ●simhをバックグラウンド起動 ●simh上のNetBSD/vaxがマルチユーザで  起動したら sshログインでテスト実行

Slide 67

Slide 67 text

node.jsもymlも なんもわからん! ……という自分でも ChatGPTに聞きながら 試行錯誤していると とりあえずなんとかなる といういい時代

Slide 68

Slide 68 text

自動テスト固有の課題 認証をどうするか ●楽に自動化したいのでインタラクティブ  操作(プロンプト入力)は無くしたい ●パスワード無しログインは怒られそう ●Live ImageをCI時に作るので、  CI時に ssh-keygenして、ゲストVM  イメージにauthorized_keysを置いて、  生成した秘密鍵でsshログインする、  とした

Slide 69

Slide 69 text

NetBSD各機種対応 That's NetBSD!? ●simh + NetBSD/vax で動いた ●QEMU + NetBSD/i386 でも同じく動作 ●QEMU + NetBSD/alhpa を動かすには  QEMUにパッチが必要  ⇒CI中にQEMUソースをgit cloneして   パッチ当ててビルド、でも普通に動く ●QEMU起動方法を調べて sparc, sparc64,  earmv7hf, aarch64, macppc, hppa  と「起動すれば動く」のNetBSD無双

Slide 70

Slide 70 text

netbsd-cross-live-ci 現状はこんな感じです ●こういう作文もとりあえずAIに頼めるよい(?)時代 https://github.com/tsutsui/netbsd-cross-live-ci

Slide 71

Slide 71 text

NetBSDはいろんなマシン でビルド可能 + Live Imageもビルド可能 + GitHub Actionsの あり余る無料CPUパワー ↓ 謎マシンテストも可能

Slide 72

Slide 72 text

netbsd-cross-live-ci CI記述例 ●ビルドできれば満足の emacs-18.59友の会 https://github.com/tsutsui/emacs-18.59-netbsd/actions

Slide 73

Slide 73 text

ただし6時間制限があります 発端の「NetBSD/vaxでperl5」は時間切れ

Slide 74

Slide 74 text

エミュレータの課題 マイナー機種バグか エミュレータバグか ただ、実機の10倍以上速いので頑張る価値はある

Slide 75

Slide 75 text

●「どんなマシンでも動く設計」 ●「どんなマシンでもビルドできる」 ●NetBSDクロスビルド環境は便利 ●CPUパワーは正義  →全部その場で作って解決 ●そのCPUパワーを無償で  提供してくれるGitHub→  に感謝! まとめ