Platforms (플랫폼)
플랫폼은 게스트가 요청하는 대상입니다(hostel acquire <platform>). 두 가지 종류가 있습니다:
| 종류 | 이름 | 제공하는 머신 |
|---|---|---|
| OS 플랫폼 | linux, macos, windows | 해당 OS가 설치된 모든 머신에서 자동으로 제공됩니다. platforms에 나열하지 마세요. |
| 기기 플랫폼 | ios, android, 또는 사용자 정의 | platforms에 나열된 머신에서 제공됩니다. |
Node, Java, pnpm 같은 도구는 플랫폼이 아닙니다. 저장소의 mise 파일(hostel-use)이나 머신의 tools 키(hostel-rooms)로 선언합니다.
hostel platforms # 모든 사용자: 여유 슬롯, 대기열, 대기, 기기
hostel config platforms # 관리자용: NAME, KIND, MACHINES, SOURCE
기본 플랫폼
바이너리에는 ios, android, macos, windows가 내장되어 있습니다. linux는 스크립트가 없는 OS 플랫폼입니다.
| 플랫폼 | 기기 | 머신 OS | 머신에 필요한 사항 |
|---|---|---|---|
ios | iphone-17-pro, ipad-pro-13 (최대 2개) | macOS | 사람이 설치하는 Xcode 및 iOS Simulator 런타임이 필요합니다. 플랫폼은 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 서버. 데스크톱 앱: 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 # 사용자 버전 저장 (source: changed)
hostel config platforms reset ios # 이 릴리스의 버전으로 되돌리기
hostel config platforms remove tvos # 머신이 나열하고 있으면 거부됨
push --name <n>은 다른 이름으로 폴더를 저장합니다. push는 즉시 적용됩니다. 플랫폼이 변경된 여유 방은 다시 프로비전됩니다. push는 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는 가질 수 없습니다.
스크립트
파일 이름: macos 및 linux의 경우 <step>.<os>.sh, windows의 경우 <step>.<os>.ps1입니다. 방의 OS가 파일을 선택합니다. 스크립트 이름을 잘못 입력하면 오류가 발생합니다.
| 단계 | 시점 | 실행 위치 |
|---|---|---|
provision | 각 방에 대해 한 번, 스크립트가 변경되면 다시 실행: 플랫폼이 필요한 것을 설치하고 확인 | hostel/ |
prepare | 각 임대가 준비되기 전: 기기를 시작하고, 사실(facts)을 device.env에 기록 | slots/<slot>/ |
screenshot | hostel screenshot: $1은 출력 PNG 경로, $2는 기기 | slots/<slot>/ |
reset | 정리 시: prepare가 시작한 것을 중지하고 삭제 | slots/<slot>/ |
health | 정리 후, 복구 시, 웜(warm) 방이 임대를 받기 전: 방이 플랫폼을 제공할 수 없으면 0이 아닌 값으로 종료 | hostel/ |
규칙:
- 각 단계는 선택 사항이지만, 기기 플랫폼에서 해당 플랫폼을 나열한 머신의 각 OS에 대해
prepare는 필수입니다. - 각 단계는 다시 실행해도 안전해야 합니다.
- 0이 아닌 종료 코드는 실패입니다. Provision 또는 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 # 이벤트는 provision 출력 및 오류를 보여줍니다