업그레이드
릴리스 채널에서 업그레이드
섹션 제목: “릴리스 채널에서 업그레이드”이미 LabPod가 설치된 호스트에서 공개 설치 스크립트를 다시 실행하세요:
# 포함된 설치 프로그램이 변경할 내용을 미리 확인curl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --check
# 최신 릴리스로 업그레이드curl -fsSL https://labpod.ai/install.sh | sudo bash
# 특정 릴리스로 고정curl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --version v0.4.0# Run these as root# 포함된 설치 프로그램이 변경할 내용을 미리 확인curl -fsSL https://labpod.ai/install.sh | bash -s -- --check
# 최신 릴리스로 업그레이드curl -fsSL https://labpod.ai/install.sh | bash
# 특정 릴리스로 고정curl -fsSL https://labpod.ai/install.sh | bash -s -- --version v0.4.0기존 설치에서 설치 프로그램은 다음 작업을 수행합니다:
- 릴리스 다운로드: 릴리스 tarball을 다운로드하고 체크섬과 서명을 검증합니다.
- 업그레이드 전 복구 세트: 다운로드한 바이너리가 설치된 바이너리와 다르면 실행 파일,
애플리케이션 지원 파일, 데이터베이스 스냅샷을 교체 작업 전에
/var/lib/labpod/backups/pre-upgrade-<UTC>.*로 보관합니다. 데이터베이스 스냅샷을 의도적으로 생략할 때만--skip-backup을 전달합니다. - 후보 버전 고정 및 파일 갱신:
latest를 변경되지 않는 릴리스 태그로 확정하고 후보 바이너리가 그 버전을 보고하는지 검증합니다. 릴리스 내용이 변경된 경우에만/usr/local/bin/labpod와/opt/labpod/inject트리를 교체합니다. - 설정 보존:
/etc/labpod/labpod.env,/var/lib/labpod/labpod.db, 백업, 라이선스, TLS 캐시, Linux 계정, 사용자 홈 디렉터리를 보존합니다. - Unit 갱신: 최신 systemd unit 파일을
/etc/systemd/system/에 복사합니다. - 사전 점검, 마이그레이션, 재시작: 데이터베이스, 이미지 저장소, TLS, GPU 공유, inject 트리 경로를 API를 중지하기 전에 검증합니다. 설정 오류가 있으면 실행 중인 서비스를 그대로 유지하므로 수정한 뒤 설치 프로그램을 다시 실행할 수 있습니다. 유효한 업그레이드에서는 파일을 갱신하고 영속적인 데이터베이스 업그레이드를 적용하는 동안 LabPod API만 중지합니다.
- 재시작 후 상태 확인 및 롤백:
/api/version을 폴링하고 재시작한 API가 확정된 릴리스를 보고하는지 검증합니다. 업그레이드 단계가 실패하면 이전 실행 파일, 지원 파일, 마이그레이션을 시작한 경우의 데이터베이스, API 서비스, 백업 타이머를 자동으로 복원합니다. 이전 API가 정상인지 다시 확인한 뒤 롤백 성공을 보고합니다. 자동 롤백까지 실패한 경우에만 수동 복구가 필요합니다.
실제 업그레이드에서는 복구 세트가 자동으로 생성됩니다. 설치된 바이너리와 동일한 바이너리로
다시 실행하는 경우에는 생성하지 않습니다. 설치 프로그램은 기본적으로 최신 복구 세트 10개를
유지하며, 오래된 실행 파일, 애플리케이션 파일 스냅샷, 짝을 이루는 데이터베이스 스냅샷을 함께
정리합니다. 일별 labpod-*.db 백업에는 별도의 보존 정책이 적용됩니다.
사용자 지정 백업 디렉터리는 updater와 지원 파일 디렉터리 및 별도 위치의 inject 트리 밖에
두세요. 롤백이 복원에 사용하는 파일을 삭제하거나 자기 자신에게 재귀 복사해서는 안 됩니다.
--skip-backup을 전달한 뒤 마이그레이션이 시작되면 자동 롤백에 복원할 데이터베이스 스냅샷이
없습니다.
더 신중하게 진행하려면 업그레이드 전에 수동 백업을 추가로 생성할 수 있습니다:
sudo labpod admin backup --out /var/lib/labpod/backups/pre-upgrade-$(date -u +%Y%m%dT%H%M%SZ).db# Run these as rootlabpod admin backup --out /var/lib/labpod/backups/pre-upgrade-$(date -u +%Y%m%dT%H%M%SZ).db실행 중인 워크스페이스 유지
섹션 제목: “실행 중인 워크스페이스 유지”워크스페이스 컨테이너는 재시작 중에도 계속 실행됩니다. LabPod 서비스 재시작은 약 2초 걸립니다. 그 순간 처리 중이던 API 요청은 실패할 수 있지만 컨테이너 자체(Jupyter 커널과 학습 실행)는 계속됩니다. 워크스페이스 페이지와 앱은 서비스가 돌아온 뒤 다시 로드됩니다. LabPod Terminal은 자동으로 다시 연결하며 tmux 세션과 스크롤백을 유지합니다.
새 API 호출은 재시작 후 약 2초 내에 새 바이너리에서 처리됩니다.
마이그레이션 정책
섹션 제목: “마이그레이션 정책”LabPod 스키마 마이그레이션은 순방향 전용입니다. 업그레이드된 데이터베이스는 해당 마이그레이션을 수행한 릴리스 또는 그보다 새 릴리스와 함께 실행해야 합니다. 이전 DB를 복원한 상태에서 업그레이드된 새 바이너리를 실행하지 말고 이미 마이그레이션된 DB를 이전 바이너리로 실행하지 마세요.
설치 프로그램은 짝을 이루는 pre-upgrade-* 복구 세트로 자동 롤백합니다. 설치된 DB나 내부
스키마 상태를 직접 수정하지 마세요.
업그레이드가 실패하는 경우
섹션 제목: “업그레이드가 실패하는 경우”자동 롤백이 성공해도 설치 프로그램은 0이 아닌 상태로 종료하여 업데이트 실패를 분명히
표시합니다. /api/version이 이전 버전을 보고하는지 확인하고 설치 프로그램 출력과
journalctl -u labpod를 검토하세요. 원인을 해결한 뒤 다시 시도합니다.
자동 롤백을 완료하지 못하면 설치 프로그램이 정확한 서비스 중지 상태 복구 명령과 해당 시도의 실행 파일, 애플리케이션 파일, 데이터베이스 스냅샷 이름을 출력합니다. 호스트 셸에서 그 명령을 따르세요. 짝을 이루는 스냅샷을 복원하기 전에 고정된 이전 bootstrap이나 이전 릴리스의 설치 프로그램을 시작하면 잘못된 데이터베이스 세대에 마이그레이션을 실행할 수 있습니다. 데이터베이스 스키마와 실행 파일은 같은 릴리스 세대여야 합니다.
관리자 UI에서 업데이트
섹션 제목: “관리자 UI에서 업데이트”이 릴리스를 한 번 설치한 뒤에는 root 관리자가 Admin → Software update에서 공개 릴리스 채널을 확인하고 업그레이드를 시작할 수 있습니다. 이 페이지는 공개 설치 명령과 같은 서명 패키지와 체크섬 검증을 사용하고 설치 프로그램 로그를 기록하며 같은 업그레이드 전 데이터베이스 백업을 포함한 복구 세트를 만듭니다.
자동 확인은 기본으로 꺼져 있습니다. 호스트가 공개 릴리스 서비스에 연결해도 될 때만 켜세요.
LabPod은 24시간마다 새 버전을 확인하지만 관리자의 동의 없이 설치하지 않습니다. 에어갭 호스트는
위의 설치 명령을 계속 사용하면 됩니다. 터미널에서는 labpod admin update status, check,
apply로 같은 작업을 수행할 수 있습니다.
계정 홈 기준 경로 옮기기
섹션 제목: “계정 홈 기준 경로 옮기기”LABPOD_FILEOP_HOME_BASE를 바꿔도 기존 계정 데이터는 자동으로 옮기지 않습니다. 설치된 서버에서
이 값을 바꾸기 전에는 영향을 받는 워크스페이스와 LabPod 서비스를 중지한 뒤, 각 계정의 전체 홈
트리(workspaces와 이전하지 않은 work 포함)를 <새-기준-경로>/<사용자>로 옮기세요. 소유권을
유지하고 LabPod을 다시 시작하기 전에 passwd 홈도 그 경로로 바꿉니다.
기존 워크스페이스는 이전 경로가 사라질 때까지 기록된 영속 홈을 계속 사용합니다. 이 전환 기간에는
Files 보기도 기존 경로를 따르고, 데이터가 고아가 되지 않도록 LabPod이
workspace_home_migration_required 오류로 Delete를 거부합니다. LabPod은 이 이동을 대신하지
않으므로 기존 디렉터리를 지우기 전에 복사를 확인하세요.