概要

Agamaは、YaSTチームにより開発された最新のLinuxインストーラであり、数十年使用されてきた従来のYaSTツールの後継として位置づけられている。

サービスベースのアーキテクチャを採用し、対話的なインストールと無人インストール (自動インストール) の両方に対応する。
Web UIとコマンドラインインターフェース (CLI)、HTTP APIを提供しており、ユーザはWebブラウザ、CLIツール、JSONプロファイルを通じてインストールプロセスを制御できる。

SLE 16とopenSUSE Leap 16では、YaSTはメンテナンスモードに移行され、Agamaが標準インストーラとして採用された。


YaSTからの移行背景

YaSTは長年にわたり使用されてきたが、複雑なアーキテクチャと技術的負債を抱えていた。

YaSTが抱えていた主な課題は以下の通りである。

  • 最新のリッチなUIの構築の難しさ
  • SaltやAnsible等のツールとロジックの共有の困難性
  • libyuiのような特殊なソリューションへの依存による貢献の障壁


Agamaの設計思想は「再利用性、サードパーティツールとの統合、それを基盤とした高度なUIの構築可能性を提供する」ことである。

YaSTの役割は廃止と共に3つのツールに分割された。

  • Agama
    インストーラ (YaSTインストーラの後継)
  • Cockpit
    Webベースのシステム管理 (ファイアウォール、ネットワーク、プリンタ等)
  • Myrlyn
    パッケージ管理GUI (YaSTソフトウェアモジュールの後継)



技術仕様

アーキテクチャ

Agamaはサービス指向アーキテクチャを採用しており、各機能領域が独立したサービスとして実装されている。

設計の基本原則は以下の通りである。

  • サービス指向
    各機能領域が独立したサービスとして動作し、D-Busを通じて通信する。
  • API中心
    全ての機能がHTTP APIを通じて公開される。
  • UI分離
    UIとバックエンドが完全に分離されており、フロントエンドの差し替えが容易である。


バックエンドで使用されている主な技術は以下の通りである。

  • ソフトウェア管理
    libzypp
  • 製品登録
    SUSE::Connect
  • ストレージ
    YaSTストレージスタック
  • ネットワーク
    YaSTネットワーク設定スタック
  • D-Bus
    各機能領域が独立したサービスとしてD-Bus通信を行う
  • HTTP API
    統一されたHTTP APIで全機能を公開


技術スタック

Agamaを構成するプログラミング言語の比率は以下の通りである。

技術スタック一覧
言語 比率 用途
TypeScript 32.2% フロントエンドUI
Ruby 26.1% YaST統合とサービス実装
Rust 24.3% Webサーバー、CLI、D-Bus調整
JavaScript 13.7% UI補助
Shell 2.0% ユーティリティスクリプト
C++ 0.8% システム統合



対応ディストリビューション

Agamaが対応するディストリビューションとアーキテクチャは以下の通りである。

対応ディストリビューション

  • openSUSE Leap 16.0 (SLE 16ベース)
  • openSUSE Tumbleweed
  • openSUSE Micro OS
  • openSUSE Slowroll (実験的)
  • SUSE Linux Enterprise Server (SLES) 16.0以降
  • SUSE Linux Enterprise Desktop (SLED) 16.0以降
  • SUSE Linux Enterprise for SAP applications 16.0以降


対応アーキテクチャ

  • x86-64 (v2以降)
  • IBM Z (s390x)
  • POWER (ppc64le)


Agama 18からi586 (32ビット) のサポートは廃止されている。


主な機能

インタラクティブインストール (Web UI)

Agamaは起動後にWebブラウザからアクセスしてインストールを進めることができる。

アクセス方法は以下の通りである。


通信はSSL/TLSで暗号化されており、左側のナビゲーションサイドバーから各設定領域にアクセスできる。
Agama 19では、概要ページとナビゲーション体験が改善された。

ストレージ設定

ストレージの設定は"簡易設定"と"詳細設定"の2種類から選択できる。

  • 簡易設定
    ルートファイルシステムとスワップのみを指定して、詳細は自動的に決定される。
  • 詳細設定
    YaSTのExpert Partitionerと同等の細かい設定が可能である。


対応デバイスタイプは以下の通りである。

  • 通常ディスク
  • リムーバブルディスク
  • SDカード
  • DASD
  • zFCP
  • iSCSI
  • マルチパス


sort キーワードを使用することで、条件に基づくデバイス選択が可能である。
Agama 19では、既存LVMボリュームグループへのインストールとJSON設定のダウンロード機能が追加された。

ネットワーク設定

有線・無線デバイスの検出と設定に対応している。

設定可能な項目は以下の通りである。

  • DHCP自動取得
  • 静的IP手動設定
  • DNS設定


UIはケーブル接続・断線、WiFiアダプター接続に動的に反応する。
Agama 19では、インターフェース名・MACアドレスでの固定アソシエーションと永続的ネットワーク接続の概念が導入された。
なお、ブリッジやボンディングはUIでは未サポートだが、JSONプロファイルでは設定可能である。

ユーザ管理

インストール時にrootユーザおよび一般ユーザの設定を行うことができる。

設定可能な項目は以下の通りである。

  • 非rootユーザアカウント作成
    フルネーム、ログイン名、パスワード
  • SSH認証
    rootおよび非rootユーザの複数SSH公開鍵の設定


ソフトウェア選択

  • パターンベースによるソフトウェア選択が可能である。
  • SLE製品のインストール時に製品登録を行うことができる。
  • Agama 19では、独自のソフトウェア管理機能が追加された。



Agama CLIの使用

Agama CLIはコマンドラインからインストールを制御するためのツールである。

コマンド一覧

下表に、主要なコマンドを示す。

Agama CLIコマンド一覧
コマンド 説明
agama config show 現在の設定を表示する
agama config load profile.json JSONプロファイルを読み込む
agama config load profile.jsonnet Jsonnetプロファイルを読み込む
agama config validate profile.json プロファイルの設定を検証する
agama config edit 設定をエディタで編集する
agama probe システムプロービングを実行する
agama install インストールを実行する
agama finish --reboot インストール完了後に再起動する
agama monitor インストールをリモート監視する
agama logs ログを表示する
agama events イベントを表示する
agama questions インストール中の質問に対応する


認証コマンド

リモートアクセス時に使用する認証コマンドは以下の通りである。

# ログイン
agama auth login

# 認証状態の確認
agama auth show

# ログアウト
agama auth logout


グローバルオプション

グローバルオプション一覧
オプション 説明
--host リモートホストを指定する
--insecure SSL証明書の検証をスキップする
--local ローカルオペレーションとして実行する



自動インストール

Agamaは、JSONプロファイルを使用した無人インストール (自動インストール) に対応している。

プロファイル形式

プロファイルに記述できる主なセクションは以下の通りである。

  • product
    インストールする製品名と登録コード
  • root
    rootユーザのパスワード
  • user
    一般ユーザの設定
  • localization
    言語、タイムゾーン、キーボードレイアウト
  • software
    インストールするパターンとパッケージ
  • storage
    ストレージ設定とパーティション構成
  • network
    ネットワーク接続の設定
  • bootloader
    ブートローダの設定
  • scripts
    インストール前後に実行するスクリプト


AutoYaSTとの互換性は一般的には維持されているが、100%の後方互換性は保証されていない。

最小限のプロファイル例

以下に最小限のJSONプロファイルの例を示す。

 {
    "product": { "name": "Leap" },
    "root": { "password": "pass123" },
    "localization": { "language": "en_US" }
 }


詳細プロファイル例

以下にストレージ、ネットワーク、ユーザ設定を含む詳細なプロファイルの例を示す。

 {
    "product": {
       "name": "SLE",
       "registrationCode": "xxxxx"
    },
    "localization": {
       "language": "ja_JP",
       "timezone": "Asia/Tokyo",
       "keyboard": "jp"
    },
    "root": { "password": "root_password" },
    "user": {
       "fullName": "User Name",
       "userName": "username",
       "password": "user_password",
       "autologin": false
    },
    "network": {
       "connections": [{
          "interface": "eth0",
          "method": "static",
          "ip": "192.168.1.100",
          "netmask": "255.255.255.0",
          "gateway": "192.168.1.1",
          "nameServers": ["8.8.8.8", "8.8.4.4"]
       }]
    },
    "storage": {
       "devices": [{
          "name": "/dev/sda",
          "partitions": [
             { "size": "512 MiB", "mount": "/boot/efi", "filesystem": "vfat" },
             { "size": "20 GiB", "mount": "/", "filesystem": "btrfs" },
             { "size": "2 GiB", "mount": "swap", "filesystem": "swap" }
          ]
       }]
    },
    "software": {
       "patterns": ["base", "enhanced_base"],
       "packages": ["vim", "git", "curl"]
    }
 }


Jsonnetによる動的プロファイル

AgamaはJsonnetに対応しており、変数、関数、ハードウェア情報の動的注入が可能である。
JSON Schemaによるプロファイル検証もサポートしている。

以下にJsonnetを使用した動的プロファイルの例を示す。
この例では、最も大容量のディスクを自動検出してインストール先として使用する。

 local hw = import "hw.libsonnet";
 local largest_disk = hw.get_largest_disk();
 local disk_size_gb = hw.get_disk_size_gb(largest_disk);
 
 {
    product: { name: "Leap" },
    storage: {
       devices: [{
          name: largest_disk,
          partitions: [
             { size: "512 MiB", mount: "/boot/efi", filesystem: "vfat" },
             { size: if disk_size_gb > 100 then "30 GiB" else "15 GiB", mount: "/", filesystem: "btrfs" },
             { size: "2 GiB", mount: "swap", filesystem: "swap" }
          ]
       }]
    }
 }


自動インストールの実行手順

CLIを使用した自動インストールの基本的な手順は以下の通りである。

# プロファイルの検証
agama config validate profile.json

# プロファイルの読み込み
agama config load profile.json

# インストールの実行
agama install

# インストール完了後に再起動
agama finish --reboot



リモートインストール

Agamaはリモートからインストールを操作・監視する機能を提供している。

リモートアクセスによるインストール

リモートブラウザからAgamaのWeb UIにアクセスし、インストールを操作できる。

# リモートからインストールの監視
agama monitor --host 192.168.1.xxx


IPMI報告

Agama 16以降では、IPMI報告機能に対応しており、以下のステータスをBMC (Baseboard Management Controller) に報告できる。

  • STARTED: インストール開始
  • FINISHED: インストール完了
  • FAILED: インストール失敗



Live ISOの使用

Live ISOの起動

Agamaは公式のLive ISOイメージを提供しており、USBメモリまたはDVDに書き込んでブートすることができる。


起動後は自動的にグラフィカルインターフェースで起動する。

起動オプション

Live ISO起動オプション
オプション 説明
live.net_config_tui=1 nmtuiを起動してネットワーク設定を行う


起動要件

  • アーキテクチャ: x86-64-v2以降
  • 最小RAM: 1GB以上 (推奨)



注意事項

  • AutoYaST互換性
    AutoYaSTプロファイルとの互換性は一般的には維持されているが、100%の後方互換性は保証されていない。
    既存のAutoYaSTプロファイルは移行前にテストすることを推奨する。

  • 32ビットサポートの廃止
    Agama 18からi586 (32ビット) アーキテクチャのサポートは廃止されている。

  • ネットワーク設定の制限
    ブリッジやボンディングはUIでは設定できない。JSONプロファイルを使用して設定する必要がある。

  • SSL証明書
    Agamaはデフォルトで自己署名証明書を使用するため、リモートアクセス時にブラウザの警告が表示される場合がある。
    --insecure オプションを使用することにより、CLI経由での接続時に証明書の検証をスキップできる。



参考リンク