Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSC2014do NetBSD Teokure liveimage

OSC2014do NetBSD Teokure liveimage

OSC2014北海道のNetBSDセミナーで発表した
「NetBSDておくれLive Imageの紹介と解説」
のスライドです。

Izumi Tsutsui

June 15, 2014
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. NetBSDておくれLive Imageの
    紹介と解説
    オープンソースカンファレンス2014北海道
    謎マシンネタじゃなくてすいません
    Izumi Tsutsui
    [email protected]

    View Slide

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

    View Slide

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

    View Slide

  4. 使い方

    View Slide

  5. ておくれ NetBSD [検索]

    View Slide

  6. イメージ ダウンロード

    View Slide

  7. 書き込みツール Rawrite32

    View Slide

  8. Rawrite32 インストール

    View Slide

  9. Rawrite32 実行

    View Slide

  10. USBメモリ書き込み

    View Slide

  11. USBメモリ起動

    View Slide

  12. Welcome to teokure!

    View Slide

  13. Firefoxも日本語で使えます

    View Slide

  14. mikutterも動きます

    View Slide

  15. mozcで日本語も打てます

    View Slide

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

    View Slide

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

    View Slide

  18. Live Image 使用例 (1)
     NetBSDのハードウェアサポート確認用
    ・手持ちのPCでNetBSDが起動するか
    ・お友達のPCでNetBSDが(略
    ・中古店の展示PCでNetBSDが(略

    View Slide

  19. Live Image 使用例 (2)
     お手持ちのNetBSDマシンのレスキュー用
    https://twitter.com/isaki68k/statuses/176479549599662080

    View Slide

  20. Live Image 使用例 (3)
     mlterm の NetBSD での動作確認用
    mlterm 3.3.6 の README より

    View Slide

  21. Live Image 応用例
     実機インストールでの環境構築への応用
    Live Image の作成を自動化する
    ⇒アプリインストールと設定も自動化
    ⇒実機での環境設定も自動化?

    View Slide

  22. インストール実演デモ
     ネットブックにインストールしてみます
    MSI U135DX
    ・2010年発売
    ・Win7 Starter
    ・Atom N455 1.66GHz
    ・メモリ DDR3 1GB
    ・SSD 256GB(換装済)
    ・10インチ 1024x600

    View Slide

  23. インストール実演デモ
    うまく進行していれば
    mikutterからツイートするところまで
    動いているはずです……J( 'ー`)し

    View Slide

  24. Live Image の作り方
    ①クリーンインストール相当の
    ファイルシステム作成
    ②起動可能なハードディスク形式作成
    ③バイナリパッケージのインストールと
    各種設定およびアカウント作成
    過去のOSC2012北海道での発表資料もご覧ください
    http://www.ceres.dti.ne.jp/tsutsui/osc12do/NetBSD-cross-liveimage.html

    View Slide

  25. Live Image の作り方解説
    ①クリーンインストール相当の
    ファイルシステム作成
    ②起動可能なハードディスク形式作成
    ③バイナリパッケージのインストールと
    各種設定およびアカウント作成

    View Slide

  26. ファイルシステム作成
     makefs(8)コマンド を使用
    ・CD用の mkisofs(8) と同様のツール
    ⇒指定したディレクトリの中身をイメージ化
    ・クロスビルドツールとして開発
    ・iso9660, ffs, msdosfsにも対応
    (msdosfs対応は -current のみ)

    View Slide

  27. makefsでのイメージ作成
     展開して実行するだけ
    ・base.tgz 他のバイナリセットを展開
    % tar zxf base.tgz ...
    ・パラメータ指定して makefs(8) 実行
    % makefs -M 4g -B le image.root targetroot
    とか

    View Slide

  28. イメージ作成時の問題点(1)
     ファイルのパーミッションは?
    ・mkisofsは実ファイルの uid/gid 使用
    ⇒rootで実行しないといけない
    ・makefs(8) では各ファイルの属性を
    specファイルをオプションで指定可
    ・NetBSDのビルドシステムでは
    ビルド時に属性を記録したspecも作成
    ⇒ /etc/mtree/set.* にあります

    View Slide

  29. イメージ作成時の問題点(2)
     /dev 以下のデバイスノードは?
    ・mkisofs では実際のノード作成が必要
    ⇒これも rootで実行しないといけない
    ・makefs(8) ではデバイスノードも
    specファイルをで指定可
    ・NetBSDの MAKEDEV(8)は makefs(8)用の
    specファイル出力オプションあり
    % sh MAKEDEV -s >> spec とかするだけ

    View Slide

  30. Live Image の作り方解説
    ①クリーンインストール相当の
    ファイルシステム作成
    ②起動可能なハードディスク形式作成
    ③バイナリパッケージのインストールと
    各種設定およびアカウント作成

    View Slide

  31. ハードディスクの構成
    MBR
    空き
    NetBSD
    root
    パーティション
    (FFS)
    swap
    パーティション
    disklabel
    ブートローダ
    fdiskパーティションテーブル
    (歴史的シリンダ境界)
    NetBSDパーティション
     いわゆる ID 169 (0xf9)

    View Slide

  32. fdiskパーティションテーブル
    MBR
    空き ・fdisk(8) コマンド
    ⇒build toolにあり
    % fdisk -f -u \
    -b 487/255/63 -0 -a \
    -s 169/2048/7821312 \
    -i -c usr/mdec/mbr \
    -F image.mbr
    後ろのいらない部分はdd(8)で削除

    View Slide

  33. ffsパーティション
    ・makefs(8)
    先ほどの説明通り
    ・disklabel(8)
    ・installboot(8)
    それぞれイメージ先頭に書き込み
    ⇒いずれもbuild toolにあり
    NetBSD
    root
    パーティション
    (FFS)
    disklabel
    ブートローダ

    View Slide

  34. swapパーティション
    ・dd(8) するだけ
    % dd if=/dev/zero \
    of=image.swap \
    count=1048576
    swap
    パーティション

    View Slide

  35. イメージ合成
    ・何も考えずに
    cat(8) で合体
    % cat \
    image.mbr \
    image.root \
    image.swap \
    >> liveimage.fs
    MBR
    空き
    NetBSD
    root
    パーティション
    (FFS)
    swap
    パーティション
    disklabel
    ブートローダ

    View Slide

  36. すでにあるコマンドで
    シェルスクリプト書いて
    ごそごそしてるだけ
    ヽ('ω')ノ三ヽ('ω')ノ
    FreeBSD は ちゃんとコマンド作ったみたいです

    View Slide

  37. Live Image の作り方解説
    ①クリーンインストール相当の
    ファイルシステム作成
    ②起動可能なハードディスク形式作成
    ③バイナリパッケージのインストールと
    各種設定およびアカウント作成

    View Slide

  38. インストール後の設定
     なぜOSインストールとは別に設定するのか
    ・makefs にはパーミッション情報が必要
    ・Live Image固有な方法だと応用できない
    ・通常インストールで使うコマンドだけで
    インストールしたい
    ⇒エミュレータ(QEMU)上で各種設定

    View Slide

  39. 設定する内容
    ①バイナリパッケージインストール
    pkg_add で必要なパッケージを列挙
    ②/etc 以下の各種設定ファイルの修正
    /etc/rc.conf , /etc/ttys 等々
    ③各種アプリのデフォルト設定
    Firefoxの日本語設定 等
    ④ユーザーアカウント作成
    useradd(8) コマンドを使用
    ~/.xsession 等の設定ファイルはテンプレを用意

    View Slide

  40. QEMU実行
     QEMU実行画面

    View Slide

  41. イメージ設定の自動化
    ①QEMU上でコマンドをポチポチ打つ
    超めんどくさい。打ち間違えるとやり直し。
    ②設定用シェルスクリプトを書く
    これでイメージをひとつ作るだけなら簡単に。
    でも amd64/i386, エミュ/USB等 複数作るのは大変。
    ③スクリプト自動起動イメージを作る
    HDD2に インストールターゲットのイメージ
    HDD3に パッケージと設定ファイル入りのイメージ
    HDD1で mount + chroot して設定スクリプト起動

    View Slide

  42. 全自動設定スクリプトon QEMU
     i386 USB用イメージ pkg_add実行中画面
    ⇒全自動イメージ作成スクリプトを叩いて
    1時間放置すれば5種類のイメージが完成

    View Slide

  43. 日本語環境設定
     Wnnの時代から20年以上が経ちましたが
    ・最初の Live Image は scim + anthy
    ・2012年3月から ibus + anthy
    scimがあまりに調子悪いので(´・ω・`)
    ・2013年から pkgsrc に入った mozc に
    ⇒pkgsrc-2013Q4から ibus が 1.5 に

    View Slide

  44. ibus 1.5 問題
     1月のNetBSD 6.1.2リリースを機に調査
    ぐぐってみると、
    ubuntu 13.10 では
    ibus 1.5 に変わったことで
    いろいろとあったらしい?

    View Slide

  45. blog その1
    http://cpplover.blogspot.jp/2013/10/ibus-15.html

    View Slide

  46. なにかしら設計仕様上の問題がある?

    View Slide

  47. blog その2
    http://blog.goo.ne.jp/ikunya/e/995b1558ed787b64f770a5ef3498d0c2

    View Slide

  48. デスクトップ環境依存の問題がある?
    使い勝手の問題?
    ibusをやめて
    fcitx にすべきなの?

    View Slide

  49. blog その3
    http://mshio.b.sourceforge.jp/2013/10/20/about_ibus_1-5/

    View Slide

  50. ちゃんと使えてる人もいる?
    設定方法がややこしいだけ?

    View Slide

  51. とりあえず
    NetBSD 6.1.2版の
    Live Imageを作ってみて
    試してみる

    View Slide

  52. ibus 1.5 初回トライ結果
    ・ぐぐったページを見ながらやったけれど
    何を押しても日本語モードにならない?
    ・mozc の設定もうまくできていない?
    ・なんか ibus-ui-gtk3.core とかできてる

    View Slide

  53. 設定が悪いのか
    バイナリがおかしいのか
    よーわからなくて挫折 ('A`)

    View Slide

  54. ibus 1.5 再チャレンジ
     4月: NetBSD 6.1.4 + pkgsrc-2014Q1
    ibus の新しいバージョンも出ていたので
    OSunC2014香川の発表
    が終わった後に再び調査

    View Slide

  55. Google結果 その1
    http://ja.opensuse.org/IBus

    View Slide

  56. ibusは常に起動しっぱなしで
    mozcのキー設定により
    日本語/直接入力を切り替えれば
    いいらしい?

    View Slide

  57. Google結果 その2
    http://nyaruru.hatenablog.com/entry/2014/01/02/120515

    View Slide

  58. ibusは常に起動しっぱなしなので
    起動直後に直接入力にするために
    mozc にパッチが必要らしい?
    ※最新のmozc 1.15.1785.102 ではパッチ不要です

    View Slide

  59. さらに ibus デバッグ
    (gdb) bt
    #0 0xbaf3b9b3 in g_logv () from /usr/pkg/lib/libglib-2.0.so.0
    #1 0xbaf3ba6e in g_log () from /usr/pkg/lib/libglib-2.0.so.0
    #2 0xbb69c95f in _gdk_x11_display_error_event ()
    from /usr/pkg/lib/libgdk-3.so.0
    #3 0xbb6a5553 in gdk_x_error () from /usr/pkg/lib/libgdk-3.so.0#4 0xbb27ebca in _XError ()
    from /usr/X11R7/lib/libX11.so.7
    #5 0xbb255150 in ?? () from /usr/X11R7/lib/libX11.so.7
    #6 0xbb255192 in ?? () from /usr/X11R7/lib/libX11.so.7
    #7 0xbb255bd4 in _XReply () from /usr/X11R7/lib/libX11.so.7
    #8 0xbb20973b in ?? () from /usr/X11R7/lib/libXi.so.7
    #9 0xbb20998b in XIGrabKeycode () from /usr/X11R7/lib/libXi.so.7
    #10 0x0805489a in keybinding_manager_grab_keycode (modifiers=64, keyval=32,
    display=, self=0xbacfa6c8) at keybindingmanager.c:922
    #11 keybinding_manager_bind (self=0xbacfa6c8, keysym=32,
    modifiers=GDK_MOD4_MASK,
    handler=0x80570f3 <___lambda30__keybinding_manager_keybinding_handler_func>,
    handler_target=0xbaca80b8) at keybindingmanager.c:217
    #12 0x08056d69 in panel_keybinding_manager_bind (
    accelerator=0xba4c0470 "space", keybinding_manager=0xbacfa6c8,
    self=0xbaca80b8) at panel.c:943
    #13 panel_bind_switch_shortcut (self=0xbaca80b8) at panel.c:1007
    #14 0x08059527 in panel_load_settings (self=0xbaca80b8) at panel.c:1781

    View Slide

  60. 原因はよくわからないけれど
    「次の入力メソッド」
    の設定を空にすると落ちない?

    View Slide

  61. ておくれ日本語入力
     動いた わーい?
    というわけで、ようやく実用になる環境に

    View Slide

  62. まとめ

    View Slide

  63. Live Image作成効果
    ・Live Imageを定期的に作る
    ⇒世間のアプリ動向を知るようになる
    ・楽にビルドできる方法を考える
    ⇒設定やスクリプトが進化していく
    ・実際に使ってもらえたりする
    ⇒なんかうれしい!!
    ✌('ω' )
    ✌ 三✌('ω')✌三( 'ω')
    ✌ ✌

    View Slide

  64. 結論・謝辞
    ・プレゼンできる環境まで即作成可能
    ・常に新しい環境を知ることも大事
    ・各種パッケージメンテナの方に感謝!
    ・おばたさん: ibus関連, ruby gem関連,
    mikutter 等々
    ・小野寺さん:firefox一式, mozc,
    libreoffice4 等々

    View Slide