Top / EBUG勉強会 / 20161119_河豚板のマルチプラットフォーム対応

河豚板のマルチプラットフォーム対応

EBUG 第59回会合
2016年 11月19日、ながおか市民センター
川俣吉広、kaw@on.rim.or.jp

OpenBSD Live System「河豚板」は、2005年初頭のCD-OpenBSD 3.6を起源とし、以来 i386アキーテクチャの OpenBSD/i386 をベースとしてリリースを続けてきました。

この度、OpenBSD 6.0をベースとするFuguIta 6.0にて従来のi386アーキテクチャに加え、amd64アーキテクチャに対応した版もリリース致しました。

今回の勉強会では、このFuguIta 6.0のamd64対応、およびそれに関連する周辺作業についてご報告致します。

amd64対応の経緯

  • 以前よりメール/Wiki共ユーザからの要望で最も多かったのが amd64 アーキテクチャ対応
  • 2008年にFuguIta 4.3で実験的に対応
    • 「Member of the 2600 Community」より、OpenBSD/amd64ベースのセキュリティツール製作を計画している旨連絡があり、それに対し試作・提供。
  • 当時は手元にamd64マシンがなかったため、i386上でqemu-x86_64を実行し、その上で構築。
    • FuguIta-4.3-amd64-200805222alpha.iso.gz
    • FuguIta-BuildTools-4.3-amd64.tar.gz
  • 最近のamd64対応要望の例 (FuguIta/BBSより引用)

    User from Oklahoma U.S.A.

    Charlie Ebert (2016-03-17 (Thu) 11:13:45)

    I have been using this for several versions on USBDISK. I just can't wait to see the 5.9 version when it comes out. There is supposed to be a VM in that version!!! YEAH!!!! Anyway, thank you for all your work. I do wonder why you don't also have a 64 bit version of this same FuguIta software?

    Thank you very much
    Charlie

    kaw 2016-03-17 (Thu) 22:25:21

    Thank you for using FuguIta. Also, I'm looking forward to seeing OpenBSD 5.9, and preparing my PC to build FuguIta 5.9. I agree that a 64 bit version of FuguIta is quite attractive. But I don't have enough time to build both 64 and 32 bit FuguItas... A 32 bit version of FuguIta is prior than 64, because one of the main purpose of FuguIta is to use old and legacy machines effectively.

上述のように、マンパワー的に2つのアーキテクチャに対応するのは困難

とりあえず、条件を制限して実装してみた。

  • FuguIta 5.9で試験的にリリース
    • FuguIta-5.9-amd64-201608056shrinked.iso.xz
      → shrinked → OpenBSD 6.0本体+FuguIta関連ツールを収録し、それらのサイズを低減したもの。
  • FuguIta 6.0からi386、amd64版の両方を正式にリリース
    • FuguIta-6.0-i386-201609124
    • FuguIta-6.0-amd64-201609153
  • 2つのアーキテクチャに対応する替わりに、各種ソフトの同梱や日本語関連の対応は行わないこととした。
  • その後、11/14現在まででErrata対応等で計4回改版。

ビルド環境の対応

amd64でのビルド手法はFuguIta-4.3-amd64で確立していたので、今回もほぼそれを踏襲した。

  • 作業環境はi386とamd64をそれぞれ別のパーティションに作成し、デュアルブートできるようにした。
    • OpenBSD 6.0/amd64は新規にインストール
  • ビルドツールは、FuguIta-5.9-i386の作業環境から移植
    • ビルドスクリプト, Makefile, /boottmp/rc(起動スクリプト)やusbfadm(管理ユティリティツール)などからアーキテクチャ依存な部分を修正 → 基本的に、i386←→amd64のどちらでも同じになるように修正
    • バイナリファイルのリビルド(起動中に使用するクランチバイナリなど)
      FuguIta-5.9-i386                            FuguIta-6.0-i386
      ビルド環境                                  ビルド環境
      +---------------------+                     +---------------------+
      |   +-------------+   | マルチ              |   +-------------+   |
      |   | 5.9-i386    |=====プラット=====+=========>| 6.0-i386    |   |
      |   | build tools |   | フォーム     |      |   | build tools |   |
      |   +-------------+   | 対応         |      |   +-------------+   |
      |+-------------------+|              |      |+-------------------+|
      || OpenBSD 5.9/i386  |==CVSアップデート=====>| OpenBSD 6.0/i386  ||
      |+-------------------+| &ビルド      |      |+-------------------+|
      +---------------------+              |      +---------------------+
                                           |
                                           |      FuguIta-6.0-amd64
                                           |      ビルド環境
                                           |      +---------------------+
                                           |      |   +-------------+   |
                                           +=========>| 6.0-amd64   |   |
                                                  |   | build tools |   |
                                                  |   +-------------+   |
                                新規              |+-------------------+|
                                インストール======>| OpenBSD 6.0/amd64 ||
                                                  |+-------------------+|
                                                  +---------------------+
      以上の手順で作業環境を準備し、amd64版の河豚板を生成できるようになった。

複数プラットフォームに対応した改良

前項の手順でamd64版の河豚板を生成しリリースできるようになったが、この段階ではi386とamd64が区別できない状態となっている。 つまり、このままでは異ったアーキテクチャ用のファイルを読み込むおそれがあるため、i386版とamd64版とを混在して使用することができない。
この状況を改善するため、以下のような改良を施した;

  • ファイル名等で、バージョンに引続きアーキテクチャを含めるようにした。
    FuguIta-6.0-20161101.iso.gz

    FuguIta-6.0-i386-20161101.iso.gz /
    FuguIta-6.0-amd64-20161101.iso.gz
  • 前項のようなケースは、生成物のファイル名以外にも、以下のような部分で必要になった。
    • 起動時にマウントされる全ファイルツリーを含んだイメージファイル
      fuguita-6.0.ffsimg → fuguita-6.0-amd64.ffsimg
  • /usr/fuguta/versionに格納されているリリース名
    FuguIta-6.0-201611011 → FuguIta-6.0-amd64-201611011
  • usbfadmでsaveasサブコマンドを使用してファイルを保存する場合の設定名の候補
    [6.0-hogehoge]--> → [6.0-amd64-hogehoge]-->
  • ...etc
  • 実際には、ビルドシステムのMakefile, 河豚板本体内の /boottmp/rc, /boottmp/usbfadm 等に変更を施し、アーキテクチャ名を含んだ名称を河豚板関連のファイルとして認識するようにした。
  • ただし、変更前の「fuguita-6.0.ffsimg」のようなファイル名は認識されなくなるため、システムの起動やファイルの保存・復帰関連の機能では後方互換性が失われた。
  • これにより、異ったアーキテクチャ用の河豚板が混在しても矛盾なく運用できるようになった。例えば HDD にamd64版、USBメモリにi386版が入っている状態でも、どちらのカーネルで起動するかでシステムの挙動は一意に決まる。
  • これの応用として、一つのUSBメモリにi386版とamd64版を両方入れておき、起動時にどちらかを選択して使用することができるようになった。

その他諸々の作業

  • usbfadmの改良 ... 大容量のストレージ対応
    • newdrive実行時、dパーティションのサイズによってnewfsのパラメータを変えるようにした。
      • 2ギガバイト未満
        ports/packagesなどによるファイルの追加は多くないと想定される
        → 保存するファイルの殆どがシンボリックリンクになるので、ファイルの平均サイズは小さくなる。
        →→ ブロック&フラグメントサイズを小さく
        →→ iノード密度を高く
  • 2ギガバイト以上
    → デフォルトのパラメータでnewfs
    → 2ギガバイト未満の場合に採用したパラメータはnewfsにかなり時間がかかるため
  • 余った領域は自動的にFATとして割り当てていた
    → ユーザに尋ねるように改良
  • ソフトウェアに関する実作業以外にも種々の作業が発生 ... 主にドキュメント関連
    • i386, amd64両アーキテクチャサポートのアナウンス → 実施済み
  • Eratta適用時、i386, amd64両アーキテクチャに対し適用・確認・リリース → 実施中
  • 「河豚板ガイド」の改版 → 着手したところ
  • ビルドツールの公開
    • ユーザからの要望により、まずamd64、ついでi386版のビルドツールを公開した。

今後の予定

  • vmm(4)の動作検証
  • amd64版のUEFIブート対応
  • usbfadmの改良
    • non-interactiveに実行できるようにする
  • 起動モード3でのファイル読込機能の改善
  • 英語版河豚板ガイドの作成

Top / EBUG勉強会 / 20161119_河豚板のマルチプラットフォーム対応

Reload  New Edit Freeze Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS
Last-modified: 2016-11-18 (Fri) 03:44:39 (583d)