プラットフォーム
プラットフォームとは、ゲストが要求するものです(hostel acquire <platform>)。2種類あります。
| 種類 | 名前 | それを提供するマシン |
|---|---|---|
| OSプラットフォーム | linux、macos、windows | そのOSを搭載するすべてのマシン(自動的に割り当てられます)。platforms に記載する必要はありません。 |
| デバイスプラットフォーム | ios、android、または独自のもの | platforms に記載されているマシン。 |
Node、Java、pnpmなどのツールはプラットフォームではありません。リポジトリの mise ファイルで宣言するか(hostel-use)、マシンの tools キー(hostel-rooms)で指定します。
hostel platforms # 全員向け: 空きスロット、キュー、待機、デバイス
hostel config platforms # 管理者向け: 名前、種類、マシン、ソース
デフォルトプラットフォーム
バイナリには ios、android、macos、windows が組み込まれています。linux はスクリプトのないOSプラットフォームです。
| プラットフォーム | デバイス | マシンのOS | マシンに必要なもの |
|---|---|---|---|
ios | iphone-17-pro、ipad-pro-13(最大2台) | macOS | XcodeとiOSシミュレータランタイム。人がインストールする必要があります。ラベル xcode-26.5 が必要です。オプションのマシン env: HOSTEL_IOS_RUNTIME(例:26.5)、DEVELOPER_DIR。 |
android | pixel-9、pixel-tablet(最大2台) | Linux または macOS | Java 17以降: マシンに tools = { java = "21" } を設定します。Linux: /dev/kvm がルームユーザーに使用可能であること(マシンに kvm などのラベルを付けます)。エミュレータのパッケージか、パスワードなしの sudo が必要です。プロビジョンは約5GBをダウンロードします(タイムアウト30分)。オプションの env: HOSTEL_ANDROID_API(36)、HOSTEL_ANDROID_TAG(google_apis)、HOSTEL_ANDROID_PORT(5554)。 |
macos | なし | macOS | ヘッドレスビルド: 不要。デスクトップアプリ: ラベル desktop、ルームユーザーの自動ログイン、ロック解除された画面、/usr/libexec/sshd-keygen-wrapper の画面収録許可、自動化モード(パスワードなし、sudo automationmodetool enable-automationmode-without-authentication)。 |
windows | なし | Windows | OpenSSH Server。デスクトップアプリ: ラベル desktop、サインイン済みでロック解除されたデスクトップセッション内の "Hostel desktop" タスク。 |
linux | なし | Linux | SSHサーバー。 |
プラットフォームがコマンドに提供するもの:
ios: リースごとに新しくクリーンなシミュレータ。SIMULATOR_UDID(最初のデバイス)とSIMULATOR_UDIDS。android: クリーンなスナップショットからの読み取り専用エミュレータ。ANDROID_SERIAL、ANDROID_SERIALS、ANDROID_HOME。desktopを必要とするリースは排他的です。マシン全体を占有します。
各ルームはさらに agent-device(タップ、タイプ、画面読み取り)を取得します。Windowsでは winapp も取得します。mise.agent_device = false(hostel config settings set)でオフにできます。
MacとWindowsの完全な準備(ユーザー、リモートログイン、自動ログイン、デスクトップタスク)は docs/static-room-setup.md にあります。
デバイスとラベル
--device <d>でプラットフォームのデバイスを選択します(繰り返し指定可能、最大max_devices)。指定しない場合、リポジトリのdevicesまたはプラットフォームの最初のデバイスが適用されます。- ラベルはマシン上の自由な単語です(
labels = [...])。マシンは、必要なラベル(プラットフォームのrequires、リポジトリのhostel.tomlのrequires、および各--require)をすべて持っている場合にのみ候補となります。 - ラベルはマシンが持つものにちなんで名付けます:
xcode-26.5、desktop、kvm。 - 未知のプラットフォーム、デバイス、またはどのマシンも持っていないラベルは、すぐに終了コード69で失敗します。
独自のプラットフォーム
hostel config platforms new tvos ./tvos --os macos # テンプレートフォルダを作成(--os linux|macos|windows)
# ./tvos/platform.toml とスクリプトを編集
hostel config platforms push ./tvos # チェックして保存。名前はフォルダ名になります。
hostel config rooms set mac-mini platforms=ios,tvos # マシンで提供させる
デフォルトプラットフォームの変更:
hostel config platforms pull ios ./ios # 現在のファイルを新しいフォルダに取得
hostel config platforms push ./ios # バージョンを保存(ソース: changed)
hostel config platforms reset ios # このリリースのバージョンに戻す
hostel config platforms remove tvos # マシンがリストしている場合は拒否されます
push --name <n> で別の名前で保存します。プッシュは即座に適用されます。プラットフォームが変更された空きルームは、再度プロビジョンされます。プッシュでは platform.toml、README.md、スクリプトのみが送信されます。
platform.toml
description = "tvOS Simulator"
devices = ["apple-tv-4k"] # 最初のものがデフォルト(デバイスプラットフォームのみ)
max_devices = 1 # デフォルト 1
requires = ["xcode-26.5"] # 各マシンが持つ必要のあるラベル
exclusive = false # true: リースがルーム全体を占有
script_timeouts = { provision = "20m" } # デフォルト: provision 20m、それ以外 3m
OSプラットフォームフォルダ(linux、macos、windows)には、description、requires、exclusive、script_timeouts を設定できますが、devices は設定できません。
スクリプト
ファイル名: OSが macos または linux の場合は <step>.<os>.sh、OSが windows の場合は <step>.<os>.ps1 です。ルームのOSがファイルを選択します。スクリプト名のスペルミスはエラーになります。
| ステップ | タイミング | 実行ディレクトリ |
|---|---|---|
provision | 各ルームに対して1回(スクリプトが変更された場合は再度):プラットフォームに必要なものをインストールして確認 | hostel/ |
prepare | 各リース(準備完了前):デバイスを起動し、それらの情報を device.env に書き込む | slots/<slot>/ |
screenshot | hostel screenshot:$1 は出力PNGパス、$2 はデバイス | slots/<slot>/ |
reset | クリーンアップ時:prepare で起動したものを停止して削除 | slots/<slot>/ |
health | クリーンアップ後、修復時、ウォームルームがリースを受け入れる前:ルームがプラットフォームを提供できない場合は非ゼロで終了 | hostel/ |
ルール:
- すべてのステップはオプションですが、デバイスプラットフォームでそれをリストするマシンの各OSに対しては、
prepareは必須です。 - 各ステップは安全に再実行できる必要があります。
- 非ゼロの終了コードは失敗です。プロビジョンまたは準備の失敗はルームを「Broken」状態にし、リースをキューに戻します。出力の最後の4KBはイベントログに記録されます(
hostel status <room>)。 - ヘルパーは
/bin/sh <script>を実行し(実行ビットは不要)、タイムアウト時にプロセスグループを停止します。 - マシンレベルの
toolsはprovisionの前にインストールされるため、スクリプトで使用できます。
スクリプトの環境変数: HOSTEL_PLATFORM、HOSTEL_PLATFORM_DEVICES(プラットフォームの全デバイス)、HOSTEL_SLOT、HOSTEL_SLOT_DIR、HOSTEL_WORK_DIR、HOSTEL_CACHE_DIR(リース間で保持)、HOSTEL_LEASE_ID、および prepare、screenshot、reset では: HOSTEL_DEVICES(リースのデバイス、カンマ区切り)、HOSTEL_EXCLUSIVE(ルーム全体のリースの場合は 1)。また MISE_* 変数、プロバイダー、マシン、スロットの env、および device.env(screenshot と reset 用)。マシンの env を使用して、スクリプトをマシン間で変えることができます。
device.env の行(NAME=value)は、すべてのリースコマンドの環境に取り込まれます。プラットフォームが書き込む名前を文書化してください。
確認
hostel config platforms
hostel status mac-mini # イベントにプロビジョン出力とエラーが表示されます