Plattformen
Eine Plattform ist das, was ein Gast anfordert (hostel acquire <platform>). Es gibt zwei Arten:
| Art | Namen | Welche Maschinen bedienen sie |
|---|---|---|
| OS-Plattform | linux, macos, windows | Jede Maschine mit diesem Betriebssystem, automatisch. Niemals in platforms aufführen. |
| Geräteplattform | ios, android oder eigene | Maschinen, die sie in platforms aufführen. |
Werkzeuge wie Node, Java oder pnpm sind keine Plattformen: Die mise-Dateien des Repositories deklarieren sie (hostel-use) oder der tools-Schlüssel der Maschine (hostel-rooms).
hostel platforms # für alle: freie Slots, Warteschlange, Wartezeit, Geräte
hostel config platforms # für Admins: NAME, ART, MASCHINEN, QUELLE
Die Standard-Plattformen
Das Binärprogramm enthält ios, android, macos und windows integriert. linux ist eine OS-Plattform ohne Skripte.
| Plattform | Geräte | Maschinen-Betriebssystem | Was die Maschine benötigt |
|---|---|---|---|
ios | iphone-17-pro, ipad-pro-13 (max. 2) | macOS | Xcode und eine iOS-Simulator-Laufzeitumgebung, installiert von einer Person. Die Plattform erfordert das Label xcode-26.5. Optionale Maschinen-env: HOSTEL_IOS_RUNTIME (z. B. 26.5), DEVELOPER_DIR. |
android | pixel-9, pixel-tablet (max. 2) | Linux oder macOS | Java 17 oder höher: Setzen Sie tools = { java = "21" } auf der Maschine. Linux: /dev/kvm muss vom Raum-Benutzer nutzbar sein (geben Sie der Maschine ein Label wie kvm), und die Emulator-Pakete oder sudo ohne Passwort. Die Bereitstellung lädt ca. 5 GB herunter (Timeout 30 Min.). Optionale env: HOSTEL_ANDROID_API (36), HOSTEL_ANDROID_TAG (google_apis), HOSTEL_ANDROID_PORT (5554). |
macos | keine | macOS | Headless-Builds: nichts. Desktop-Apps: das Label desktop, ein automatischer Login des Raum-Benutzers, ein entsperrter Bildschirm, Bildschirmaufzeichnung für /usr/libexec/sshd-keygen-wrapper und Automatisierungsmodus ohne Passwort (sudo automationmodetool enable-automationmode-without-authentication). |
windows | keine | Windows | OpenSSH-Server. Desktop-Apps: das Label desktop und die Aufgabe „Hostel Desktop“ in einer angemeldeten, entsperrten Desktop-Sitzung. |
linux | keine | Linux | Ein SSH-Server. |
Was die Plattformen an Befehle weitergeben:
ios: neue, saubere Simulatoren für jede Leihe;SIMULATOR_UDID(erstes Gerät) undSIMULATOR_UDIDS.android: schreibgeschützte Emulatoren aus einem sauberen Snapshot;ANDROID_SERIAL,ANDROID_SERIALS,ANDROID_HOME.- Eine Leihe, die
desktoperfordert, ist exklusiv: Sie belegt die gesamte Maschine.
Jeder Raum erhält auch agent-device (tippen, tippen, Bildschirm lesen) und unter Windows winapp. mise.agent_device = false (hostel config settings set) deaktiviert dies.
Die vollständige Mac- und Windows-Vorbereitung (Benutzer, Remote-Login, Auto-Login, die Desktop-Aufgabe) finden Sie in docs/static-room-setup.md.
Geräte und Labels
--device <d>wählt Geräte der Plattform aus (wiederholbar, bis zumax_devices). Ohne Angabe werden die Geräte des Repositories oder das erste Gerät der Plattform verwendet.- Labels sind freie Wörter auf Maschinen (
labels = [...]). Eine Maschine ist nur dann ein Kandidat, wenn sie alle erforderlichen Labels besitzt: dierequiresder Plattform, dierequiresdes Repositories inhostel.tomlund jedes--require. - Benennen Sie Labels nach dem, was die Maschine hat:
xcode-26.5,desktop,kvm. - Eine unbekannte Plattform oder ein unbekanntes Gerät oder ein Label, das keine Maschine besitzt, schlägt sofort mit Exit-Code 69 fehl.
Eigene Plattform
hostel config platforms new tvos ./tvos --os macos # ein Vorlagenordner (--os linux|macos|windows)
# bearbeiten Sie ./tvos/platform.toml und die Skripte
hostel config platforms push ./tvos # überprüfen und speichern; der Name ist der Ordnername
hostel config rooms set mac-mini platforms=ios,tvos # lassen Sie eine Maschine diese Plattform bedienen
Eine Standard-Plattform ändern:
hostel config platforms pull ios ./ios # die aktuellen Dateien in einen neuen Ordner
hostel config platforms push ./ios # speichern Sie Ihre Version (Quelle: geändert)
hostel config platforms reset ios # zurück zur Version dieser Veröffentlichung
hostel config platforms remove tvos # verweigert, solange eine Maschine sie aufführt
push --name <n> speichert den Ordner unter einem anderen Namen. Ein Push wird sofort wirksam. Ein freier Raum, dessen Plattform geändert wurde, wird erneut bereitgestellt. Ein Push sendet nur platform.toml, README.md und Skripte.
platform.toml
description = "tvOS Simulator"
devices = ["apple-tv-4k"] # das erste ist der Standard (nur Geräteplattformen)
max_devices = 1 # Standard 1
requires = ["xcode-26.5"] # Labels, die jede Maschine haben muss
exclusive = false # true: die Leihe belegt den gesamten Raum
script_timeouts = { provision = "20m" } # Standard: provision 20m, andere 3m
Ein OS-Plattform-Ordner (linux, macos, windows) kann description, requires, exclusive und script_timeouts enthalten, aber nicht devices.
Skripte
Dateinamen: <schritt>.<os>.sh für macos und linux, <schritt>.<os>.ps1 für windows. Das Betriebssystem des Raums wählt die Datei aus. Ein falsch geschriebener Skriptname ist ein Fehler.
| Schritt | Wann | Läuft in |
|---|---|---|
provision | einmal für jeden Raum und erneut, wenn die Skripte geändert werden: Installieren und prüfen, was die Plattform benötigt | hostel/ |
prepare | jede Leihe, bevor sie bereit ist: Starten der Geräte, Schreiben ihrer Fakten in device.env | slots/<slot>/ |
screenshot | hostel screenshot: $1 ist der Ausgabe-PNG-Pfad, $2 das Gerät | slots/<slot>/ |
reset | bei der Bereinigung: Stoppen und Löschen, was prepare gestartet hat | slots/<slot>/ |
health | nach der Bereinigung, bei der Reparatur, bevor ein warmer Raum eine Leihe annimmt: Exit ungleich Null, wenn der Raum die Plattform nicht bedienen kann | hostel/ |
Regeln:
- Jeder Schritt ist optional, außer
preparefür eine Geräteplattform auf jedem Betriebssystem der Maschinen, die sie aufführen. - Jeder Schritt muss sicher wiederholbar sein.
- Ein Exit-Code ungleich Null ist ein Fehler. Fehler bei Provision oder Prepare machen den Raum kaputt und senden die Leihe zurück in die Warteschlange. Die letzten 4 KB der Ausgabe gehen in das Ereignisprotokoll (
hostel status <raum>). - Der Helfer führt
/bin/sh <skript>aus (kein Ausführungsbit erforderlich) und stoppt die Prozessgruppe beim Timeout. - Maschinenbezogene
toolswerden vorprovisioninstalliert, sodass Skripte sie verwenden können.
Umgebung der Skripte: HOSTEL_PLATFORM, HOSTEL_PLATFORM_DEVICES (alle Geräte der Plattform), HOSTEL_SLOT, HOSTEL_SLOT_DIR, HOSTEL_WORK_DIR, HOSTEL_CACHE_DIR (zwischen Leihen beibehalten), HOSTEL_LEASE_ID, und für prepare, screenshot und reset: HOSTEL_DEVICES (die Geräte der Leihe, kommagetrennt) und HOSTEL_EXCLUSIVE (1 für eine Ganzraum-Leihe). Außerdem die MISE_*-Variablen, die env des Providers, der Maschine und des Slots sowie device.env (für screenshot und reset). Verwenden Sie Maschinen-env, um ein Skript zwischen Maschinen zu variieren.
device.env-Zeilen (NAME=wert) gehen in die Umgebung jedes Leihe-Befehls ein. Dokumentieren Sie die Namen, die Ihre Plattform schreibt.
Überprüfen
hostel config platforms
hostel status mac-mini # die Ereignisse zeigen Bereitstellungsausgabe und Fehler