TL;DR
- rust-bhyve는 Rust로 작성된 illumos용 사용자 공간 가상 머신 모니터(VMM)로, x86_64 SmartOS 및 기타 illumos 배포판에서 실행되지만 실험 단계이며 프로덕션 지원 대상이 아님.
- rshyve는 SmartOS
bhyve영역 브랜드가 생성하는 명령줄을 받아 UEFI·Linux 직접 부팅,virtio·NVMe·AHCI CD-ROM·VNC·vTPM·PCI 패스스루·제어 소켓·라이브 마이그레이션을 제공함. - firehyve는 Linux 커널 직접 부팅과
virtio장치·직렬 콘솔만 제공하는 마이크로VM이며, fhrun은 그 안에서 Linux 바이너리를 자식 프로세스처럼 실행함. - 바이너리는 illumos에서만 실행되고 illumos 호스트에서 빌드되며, 단위 테스트는 Linux와 macOS에서도 실행됨.
- 라이브 마이그레이션 인증 부재와 FPU·XSAVE 상태 미전송 등 보안상 제약이 있으며, Propolis에서 파생된 코드와
libtpms를 포함하고 라이선스는 MPL-2.0임.
rust-bhyve
rust-bhyve는 Rust로 작성된 illumosbhyve용 사용자 공간 가상 머신 모니터(VMM)임.- SmartOS 및 기타 illumos 배포판의
x86_64에서 실행됨. - 실험 단계이며 프로덕션 지원 소프트웨어가 아니고 공개 릴리스가 없음.
- 라이브 마이그레이션은 인증되지 않으며 FPU/XSAVE 상태를 전달하지 않음.
- 신뢰할 수 없는 게스트를 실행하기 전에
SECURITY.md확인이 필요함.
바이너리
rshyve- SmartOS
bhyve영역 브랜드가 구성하는 명령줄을 사용하므로, 영역에서/usr/sbin/bhyve대신 실행 가능함. - UEFI 펌웨어 또는 Linux 커널을 직접 부팅함.
virtio, NVMe, AHCI CD-ROM, VNC 프레임버퍼, vTPM, PCI 패스스루, 제어 소켓, 라이브 마이그레이션을 제공함.bhyve의 모든 기능을 포함하지 않으며, 일부 플래그와 장치 옵션은 거부되고 일부는 수락 후 무시됨.firehyve- 동일한 크레이트를 기반으로 하는 마이크로VM임.
- Linux 커널을 직접 부팅하고
virtio장치와 직렬 콘솔만 제공함. - 펌웨어, 마이그레이션, 제어 소켓은 제공하지 않음.
- 처리할 수 없는 옵션 대부분을 시작 시 거부함.
bhyve영역 브랜드가 모든 영역에 지정하는 부트 롬, 추가 직렬 백엔드, 프레임버퍼, xHCI 태블릿은 수락하고 로그를 남긴 뒤 무시함.fhrunfirehyve마이크로VM 내부에서 Linux 바이너리를 자식 프로세스처럼 실행함.docs/features.md에서 각 바이너리가 지원하는 기능과 제한을 확인할 수 있음.
빠른 시작
- 다음 구성으로
rshyve를 실행할 수 있음. - 가상 CPU 2개와 메모리 2GiB를 지정함.
/dev/zvol/rdsk/zones/disk0을virtio-blk디스크로 연결함.net0을virtio-net-viona네트워크 장치로 연결함./usr/share/bhyve/uefi-rom.bin을 부트 롬으로 지정함.- 첫 번째 직렬 포트를 표준 입출력에 연결하고
myvm이라는 가상 머신을 실행함.
빌드
- 바이너리는 illumos에서만 실행되므로 illumos 호스트에서 빌드해야 함.
- 소스 저장소는
https://github.com/TritonDataCenter/rshyve에서 서브모듈과 함께 복제함. cargo build --workspace --locked --release로 워크스페이스의 릴리스 바이너리를 빌드함.cargo test --workspace --locked --no-fail-fast로 전체 테스트를 실행함.- 단위 테스트는 Linux와 macOS에서도 실행됨.
docs/testing.md에서 사전 요구 사항, 테스트 게스트 부팅 방법, 테스트 하네스 스크립트를 설명함.- SmartOS 노드의 영역에
rshyve를 사용하려면 노드에 설치한 뒤 영역이 해당 바이너리를 가리키도록 설정해야 함. - 플랫폼 이미지 사전 빌드는 공개되지 않음.
- 플랫폼 설정 방법은
docs/platform.md에서 설명함.
상태
- SmartOS의
bhyveAPI v18에서 테스트됨. - 테스트된 구성과 알려진 주의 사항은
docs/features.md에 정리됨. - 미해결 작업은
docs/roadmap.md에 정리됨.
문서
- 아키텍처: 워크스페이스 구성, 핵심 타입, 데이터 흐름
- 기능 참고: 각 바이너리의 지원 기능과 제한
- 명령줄 참고: 플래그와 제어 명령
- 장치: PCI, LPC, 커널 에뮬레이션 장치
- 라이브 마이그레이션: 프로토콜, 상태, 오케스트레이터 계약
- 메타데이터 에이전트: COM2를 통한 게스트 구성
- 플랫폼 통합: SmartOS 영역에서
rshyve실행 - UEFI 펌웨어: FreeBSD
edk2펌웨어와 변수 저장소 fhrun: 매니페스트와 종료 코드- 테스트: 빌드, 단위 테스트, 테스트 게스트, 하네스
- 로드맵: 미해결 작업
firehyve부팅 측정: 초안 측정 보고서- 공개 보안 문제
Propolis 기반
- 이 프로젝트는 Oxide Computer Company의
bhyveVMM인 Propolis의 코드를 사용함. bhyve및vionaioctl 바인딩, 주소 공간 관리자, PS/2 장치 모델은 변경 사항이 거의 없는 상태로 Propolis에서 가져옴.- PCI, UART, VM 종료 처리 계층의 일부도 Propolis에서 파생됨.
- 두 프로젝트 모두 MPL-2.0을 사용함.
- 파생된 각 파일에는 원본 상위 파일을 명시하는 헤더가 포함됨.
THIRD_PARTY.md에는 측정된 유사도가 기록되며,tools/propolis-derivation.py는 Propolis 체크아웃을 기준으로 유사도를 다시 측정함.
기여
CONTRIBUTING.md에서 빌드, CI가 검증하는 항목과 검증하지 않는 항목, 저장소 게이트, 커밋 형식을 설명함.- 운영자가 확인할 수 있는 변경 사항은
CHANGELOG.md에 기록됨.
보안
- 취약점은 비공개 방식으로 신고해야 함.
- 신고 절차는
SECURITY.md에서 확인할 수 있음.
라이선스
- 라이선스는 MPL-2.0이며 전체 내용은
LICENSE에 포함됨. - 코드 일부는 MPL-2.0에 따라 Oxide Computer Company의 저작권이 적용되는 Propolis에서 복사되거나 파생됨.
libtpms는 3조 BSD 라이선스로 벤더링됨.- 저작권 및 출처 표시는
NOTICE에 있으며, 정확한 출처 정보는THIRD_PARTY.md에 기록됨.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요