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

OSの自動インストール設定の対話型作成と統一記法 / DPS-182

OSの自動インストール設定の対話型作成と統一記法 / DPS-182

第182回DPS研究発表会(情報処理学会)
https://ipsj.ixsq.nii.ac.jp/records/203937

Avatar for Tomoyuki KOYAMA

Tomoyuki KOYAMA

March 05, 2020
Tweet

More Decks by Tomoyuki KOYAMA

Other Decks in Research

Transcript

  1. 関連研究(1) • Large scale Linux configuration with LCFG [Anderson, P.

    / 2000] – Solaris Jumpstartをインストーラの呼び出しに使用 – 設定記法:オブジェクト指向形式 • Lucie:大規模クラスタに適した高速セットアップ・管理ツー ル [高宮安仁 / 2003] – ネットワークブートしたLinux OS上でLucieを起動 – LucieがセットアップとOSインストールを実行 – 設定記法:関数型形式 設定ファイルの記述形式が独自 課題:新たな学習が必要,分かりやすさ 4 LCFG: Local ConFiGuration system
  2. 関連研究(2) • Grid System Installation, Management and Monitoring Application [Magherusan-Stanciu,

    C. / 2011] – PuppetでDHCPサーバの設定を自動生成 – Kickstartでインストールを自動化 • 超大規模 HPC システムのインストール高速化の提案 [小 久保良輔 / 2018] – 設定ファイルをプログラムにより並列で生成 – Kickstartでインストールを自動化 KickstartはRedHat系OSのみ対応 課題:RedHat系OS以外に対応できず 5
  3. 既存記法 提案の概要 課題「独自記法,ツールの限られたOS対応」を解決する設 定UIと統一記法を提案する. • 設定UI – オペレータがインストール自動化用の設定を作成する ための対話型インターフェース •

    統一記法 – OS自動インストール用の設定を木構造で表現 – 設定UIが自動的に生成し,既存記法への変換が可能 設定UI 統一記法 7 オペレ ータ 入力 生成 既存記法 生成 入力 従来 提案 オペレ ータ
  4. 設定UIの提案 • 従来 – 設定ファイルをテキストエディタ編集 – GUIベースのインターフェースでの設定作成 • 提案 –

    対話型のCUI設定インターフェース • 他のツールとの連携性の高さ – CUIへ入力時の補完 >_ 設定投入 language=ja 設定UI オペレータ 8 language=?
  5. 設定記法の提案 • 木構造データによる記法 • 設定項目をグループ化により表現 • 設定:根(root)から設定パラメータごとの節(network, os, storage)に分類 •

    節:根と同様に葉(language, keyboard layout, timezon)に 分岐 9 OSの言語設定: root => os => language root network os storage keyboard layout language timezone
  6. 実装の概要 10 設定UI,統一記法,変換サーバを新たに実装 設定UI オペレータ 入力 生成 変換 サーバ 送信

    生成 取得 Ubuntu インストーラ CentOS インストーラ 統一記法 データベース 既存記法 preseed 既存記法 kickstart 電源ON
  7. 設定UIの実装 設定の入力 設定UI(CnfBox CLI) リクエストの構築 リクエストの送信 入力値の解析・検証 11 HTTP 変換

    サーバへ GET /v1/xxx Host example.com {“x”: “y”} x→y {“x”: “y”} x=y 統一記法 オペレータ オペレータが入力した設定を解析し,統一記法の形式でリ クエストとして送信する.
  8. 統一記法の実装 • 木構造をJSON形式で表現 • JSON形式:プログラミング言語で標準サポート • 記述例:OSのタイムゾーンをあらわす記述 { " os

    ": { " timezone ": "Asia/Tokyo" } } 記述例 12 { " os ": { " timezone ": "Asia/Taipei" } } 記述例 root os keyboard layout timezone language
  9. 実装の概要 13 設定UI,統一記法,変換サーバを新たに実装 設定UI オペレータ 入力 生成 変換 サーバ 送信

    生成 取得 Ubuntu インストーラ CentOS インストーラ 統一記法 データベース 既存記法 preseed 既存記法 kickstart 電源ON
  10. 変換サーバの実装 14 HTTP Ubuntu インストーラ 変換サーバ(CnfBox SRV) 変換機能 登録API (RESTful

    API) 設定記法の変換 データベースへ 設定を保存 配信機能 データベース から設定を取得 配信API (RESTful API) • 統一記法から個別の設定記法に変換し保存 • インストーラへ設定記法ごとに配信 統一記法 設定UIから データベース SELECT * FROM ... INSERT INTO ... CentOS インストーラ pres eed kick start
  11. 実装:変換サーバの配信API • 変換サーバのインターフェースにRESTful APIを使用 • 設定ごとにidを自動的に発行し,URLに割り当て • URLの例(id=16) – Preseed記法:

    https://example.com/conf/16/preseed – kickstart記法: https://example.com/conf/16/kickstart • URLの変更により異なる記法の設定ファイルを取得可能 15 d-i keyboard-configuration/layoutcode string jp d-i keyboard-configuration/modelcode jp106 d-i clock-setup/utc boolean true d-i time/zone string Asia/Tokyo d-i localechooser/supported-locales en_US.UTF-8 d-i console-setup/layoutcode string us d-i console-setup/charmap select UTF-8 (略) keyboard 'jp' rootpw --iscrypted '$G9maGxpaHdmd' lang 'ja_JP' timezone Asia/Tokyo --isUtc text (略) preseed記法での取得例 kickstart記法での取得例
  12. 検証 • 目的:提案手法で複数の自動OSインストールが行えるか • 方法 – CentOS 7, Ubuntu 18.04のOSインストールメディアを用意

    – 仮想マシンにOSインストールメディアを割り当て起動 – OSインストーラの起動パラメータで変換サーバを指定 し,起動 • 環境 – 研究室環境 • 仮想マシン:VMware ESXi 上に1台作成 • 作業用マシン:設定UIを動作 – PaaS • 変換サーバ:Google App Engineで作成 • データベースサーバ:Google Cloud SQLで作成 16
  13. 検証手順 仮想マシン ルータ 変換サーバ CnfBox SRV 17 作業用マシン PaaS 研究室環境

    設定UI CnfBox CLI 1 設定入力 2 3 ISO OSインストール メディア(Ubuntu 18.04) 4 電源ON 5 起動パラメ ータ変更 6 設定UIで作成した設定を変換サーバから仮想マシンへ配信 7 preseed 再起動 8 データベース
  14. 検証結果 • Ubuntu, CentOSの両方でインストーラが正常終了 – インストールの途中で停止せず終了 – 事前に設定した認証情報でOSのログインに成功 – 変換サーバのアクセスログでも確認

    提案手法で複数の自動OSインストールが行えた 163.215.6.1 - - [13/Jan/2020:13:17:44 +0900] "GET /conf/16/preseed HTTP/1.1" 200 499 - "debian - installer " "cnfbox-dev.appspot.com "ms =2277 cpu_ms =1978 cpm_usd =5.5767 e-8 loading_request =1 163.215.6.1 - - [10/Jan/2020:17:42:27 +0900] "GET /conf/16/kickstart HTTP/1.1" 200 604 - "urlgrabber/3.10.2" "cnfbox-dev.appspot.com" ms=79 cpu_ms=407 cpm_usd=6.7502 e-8loading_request =0 19 インストール終了→再起動→ログイン
  15. 評価:設定記法 • 提案手法と既存手法の設定記法の形式を比較 • JSON形式の採用 – 一般的な記法→新たな学習が不要 – 既存ツールや自作ツールとの連携が容易 define

    host { host_name myhostname address 192.168.10.1 mac_address 00:50:56:40:40:b6 use hosttemplate } Lucie dhclient.hostname myhostname dhclient.mac 00:08:74:1A:52:7D LCFG { "network ": { "hostname ": "myhostname", "host_ip_address ": "192.168.10.1", "host_ip_address_type ": "static" } } CnfBox 20
  16. 評価:設定UI • 補完によりユーザ体験が向上 • 検証において既存の設定記法をもとに提案を比較 (CentOS, Ubuntuで同一の設定を記述する場合) – 設定ファイル数: 50%削減(=

    1 - 1/2 ) – 記述する形式数: 50%削減(= 1 - 1/2 ) – 記述するパラメータ数: 約77%削減(= 1 - 3/13 ) 提案記法 CnfBox 既存記法 kickstart + preseed 設定ファイル数 1 2 記述する形式数 1 2 記述するパラメータ数 3 13 21
  17. 議論 • 新たな記法への対応 – 現状:手動による既存記法と統一記法のマッピング – 解決策:プログラムによる自動マッピング • 変換サーバのアクセス制御 –

    現状:IPレンジによる制御 – 解決策:URLにトークンの付与 • 機密情報の保存 – 現状:平文でデータベースへ保存 – 解決策:機密データストアの使用 22
  18. 終わりに • 木構造(JSON形式)により設定を構造化して表現 – 独自の設定の記述形式 • 統一記法から個々の記法へ変換 – 適用できる範囲が限定的 •

    設定UIによる記述量の削減 – 設定ファイル数,記述する形式数: 50%削減 – 記述するパラメータ数: 約77%削減 • OSごとに新たに設定記法を覚える手間が削減 • OS自動インストールに費やす時間/手間の削減 23