본문 바로가기
ColliePWA

09/Documentation

관리 및 업데이트

휴대폰 또는 터미널에서 업데이트, 롤백, pack 업데이트, 메이저 버전 업그레이드, 중지, 제거, 0.x 설치본을 1.0으로 업그레이드

설치에 사용한 도구:현재 상태:Verb 표기:
herdr plugin install 또는 herdr plugin linkHerdr 관리형(herdr plugin listherdr.collie 표시됨)herdr plugin action invoke <verb> --plugin herdr.collie
설치 스크립트 또는 소스 빌드독립형설치 디렉터리에서의 bin/collie <verb>

Herdr 설치는 PATH에 collie이(가) 없습니다. Herdr 작업 ID(Herdr 작업)를 사용하십시오. 독립형 설치는 바이너리를 ~/.local/share/collie/current/bin/collie 또는 <checkout>/bin/collie에 배치합니다.

# the install script's layout
cd ~/.local/share/collie/current && bin/collie version
# a source build or a linked clone
cd ~/my/collie-checkout && bin/collie version

바이너리를 ~/.local/bin(PATH에 collie 추가)에 심볼릭 링크하려면 bin/collie link을(를) 실행하십시오.

설정 및 상태는 체크아웃 외부에 위치하며 업데이트 후에도 유지됩니다(bridge/solo-baseline.test.ts). .envtailscale serve 레코드는 설정 디렉터리에 있습니다(바이너리 설치의 경우 ~/.config/collie, Herdr 설치의 경우 Herdr의 플러그인 설정 디렉터리). 페어링된 기기 및 stt.json은(는) 상태 디렉터리에 있습니다(COLLIE_STATE_DIR이(가) 이동하지 않는 한 ~/.local/state/collie).

패키지 설치본

패키지 관리자가 Collie를 설치한 경우 업데이트도 패키지 관리자가 수행하며, 이 섹션 아래의 모든 내용은 적용되지 않습니다:

sudo pacman -Syu collie-bin    # or `nix profile upgrade collie`, or `brew upgrade collie`

Collie는 디스크의 구조를 보고 패키지 설치본임을 인식합니다: .git 없음, versions/ 레이아웃 없음, 릴리스 페이로드가 포함하는 매니페스트, 읽기 전용이거나 홈 디렉터리 외부에 있거나 root 소유인 루트 경로. 마지막 세 조건 중 하나만 충족해도 충분합니다. 이후 인플레이스 업데이트를 거부하고 폴더를 소유한 관리자를 식별할 수 있는 경우 해당 명령을 안내합니다:

error: /opt/collie is a packaged install — updates come from your package manager.
       `collie update` will not replace its files.
       Take the new version with: sudo pacman -Syu collie-bin

접두사 경로에서 Collie가 인식하는 관리자를 찾을 수 없는 경우, 실행할 수 없는 명령을 추측하지 않고 첫 두 줄만 출력한 후 중단합니다.

collie doctor은(는) 동일한 설치를 정상 상태로 보고하며, 휴대전화의 업데이트 카드에는 업데이트 버튼 대신 패키지 명령과 함께 최신 릴리스가 있다는 내용이 계속 표시됩니다.

참고. 이는 우회해야 할 제한 사항이 아닙니다. 해당 폴더는 패키지 관리자의 소유이며, 패키지 관리자 모르게 파일을 교체하면 설치된 항목에 대한 데이터베이스 정보가 부정확해집니다. sudo collie update도 동일한 방식으로 작업을 거부합니다.

새 버전을 적용하려면 패키지 관리자를 실행한 다음 서비스를 다시 시작하십시오.

paru -Syu collie-bin                              # Arch, or your AUR helper of choice
nix profile upgrade collie                        # Nix
mise upgrade --bump github:AltanS/collie          # mise
collie restart

mise 설치는 예외입니다. 트리 구조가 .gitversions/ 레이아웃 없이 홈 디렉터리에 위치하므로 Collie는 이를 패키지된 것으로 인식하지 않습니다. 따라서 collie update 명령은 cannot tell how this Collie was installed 메시지와 함께 거부되며 관리자 이름을 지정하지 않습니다. mise가 계속 이를 소유합니다. 설치을(를) 참조하십시오.

다시 시작하는 작업은 Collie가 대신 처리할 수 없는 영역이며, 생략할 수 없습니다. 패키지 관리자는 실행 중인 브리지 아래에서 파일을 교체하므로, 프로세스가 이미 새 버전을 보고하는 중에도 기존 코드를 계속 실행하게 됩니다. Collie는 이러한 불일치를 감지하여 보고합니다. collie doctor 명령은 restart-pending 오류를 발생시키고, 휴대전화에는 "Collie was replaced on disk. Restart it."라는 내용의 "Bridge restart needed" 배너가 표시됩니다. 두 알림은 collie restart 명령이 실행되는 즉시 사라집니다.

pack 환경에서 패키지로 설치된 구성원은 휴대전화를 통한 업데이트를 절대 수신하지 않습니다. pack은 해당 머신을 "waits for the package manager"로 표시하고 이를 제외한 상태로 작업을 완료 처리하므로, 버전을 맞추려면 위의 두 명령을 실행해야 합니다.

패키지된 lead은(는) 자체 이동만 거부합니다. 휴대폰은 여전히 모든 member를 lead가 실행 중인 버전으로 맞추며, 한 번의 확인으로 모두 처리됩니다. 위의 두 명령으로 lead를 이동한 후에는 어떤 것도 자동으로 버전을 맞추지 않습니다. Updates 페이지를 한 번 더 탭하면 member가 lead의 새 버전을 따릅니다.

휴대폰 또는 터미널에서 업데이트

업데이트 경로는 두 가지가 있으며, 둘 다 각 호스트에서 동일한 단계를 실행합니다. 활성 릴리스 옆에 새 릴리스를 배치하고, 심볼릭 링크를 전환하고, 재시작한 후, 서비스가 응답하는지 확인합니다. pack lead에서는 두 경로 모두 전체 pack을 포괄합니다. 휴대전화는 빠른 경로입니다. 터미널은 휴대전화로 맞출 수 없는 머신을 위한 대체 수단입니다.

휴대폰에서 진행

Settings을 열고 Updates를 선택합니다. 카드에는 실행 중인 버전, 최신 릴리스, 업데이트에 포함된 중간 버전이 표시됩니다. 호스트가 최신 릴리스 상태이면 카드에 해당 내용이 표시되고 아무것도 제공하지 않습니다.

업데이트 행에 최신 상태로 표시된 설정입니다.
업데이트 행에 최신 상태로 표시된 설정입니다.
최신 릴리스를 실행 중인 호스트의 업데이트 페이지입니다.
최신 릴리스를 실행 중인 호스트의 업데이트 페이지입니다.

그 아래에는 사전 점검 결과가 점검 항목당 한 줄씩 표시됩니다: doctor, disk, bun, tree, upstream, service. lead에서는 모든 pack 멤버도 점검됩니다.

  • 초록색 상태는 정상입니다.
  • 황색 상태는 참고할 가치가 있는 정보이며 작업을 차단하지 않습니다. pack 간 버전 차이, 비표준 설치 유형, 메이저 버전이 출시되었으나 적용되지 않는 경우 등이 해당합니다. 체크아웃의 추적되지 않는 임시 파일은 초록색 상태를 유지합니다.
  • 빨간색 상태는 업데이트를 차단합니다. 해당 줄에는 빨간색 collie doctor, 스테이징 빌드를 위한 1GB 미만의 여유 공간, 호스트에 bun 없음, 업스트림에 접근할 수 없음 등 이유가 명시됩니다. 단일 명령으로 해결할 수 있는 경우 카드는 해당 명령을 Fix: <command>로 출력합니다.

<version>(으)로 업데이트을 탭하면 한 번 확인을 요청하며, 확인 텍스트의 내용은 문자 그대로 적용됩니다. 터미널 세션은 유지되고 휴대폰 화면은 최대 30초 동안 끊깁니다. 재시작 시 멀티플렉서가 아닌 브리지가 종료되므로 에이전트는 계속 실행되며 휴대폰은 새 버전으로 다시 연결됩니다. 메이저 버전은 일반 업데이트로 진행되지 않습니다. 메이저 버전 전환 시 별도의 확인을 거치며 버전을 새 메이저로 명시하고 릴리스 노트를 먼저 읽도록 안내합니다.

실행되는 동안 카드는 현재 상태를 표시합니다:

State의미
preflight이 머신을 확인하는 중입니다. 변경된 사항은 없습니다.
staging이전 버전 옆에 새 버전을 빌드하거나 다운로드하는 중입니다.
restarting브리지가 의도적으로 중단되었습니다. 장애가 아닙니다.
verifying새 버전의 응답을 기다리는 중입니다.
done새 버전이 응답했습니다.
rolled-back새 버전이 응답하지 않아 업데이트 프로그램이 이전 버전으로 되돌렸습니다.
stuck두 버전 모두 응답하지 않았습니다. 자동으로 다시 시작되지 않습니다.
interrupted완료되기 전에 실행이 중단되었습니다. 불완전하게 설치된 항목은 없습니다.

처음 네 개는 진행 상황입니다. 카드에 해당 내용이 표시되며 화면을 열어 두라는 안내가 나타납니다. rolled-back에는 현재 유지 중인 버전이 표시되고, 서비스 로그의 끝부분이 나타나며, 다시 시도 옵션을 제공합니다. stuck는 터미널에서 실행할 단일 명령어를 출력합니다. interrupted다시 시도도 함께 제공합니다.

다음 요약 때 다시 알림는 카드의 알림을 닫습니다. 음소거가 아닙니다. 다음 푸시는 더 최신 릴리스와 새로운 주기가 모두 충족될 때까지 대기합니다.

알림 주기. 업데이트 푸시는 요약 형태로 제공되며, 하루에 최대 한 번, 호스트 현지 시간으로 09:00 이전에는 전송되지 않습니다. 패치 릴리스로만 구성된 변경 사항은 주간 주기를 기다리므로 패치 연속 업데이트가 네 번이 아닌 한 번의 푸시로 도착합니다. 마이너 또는 메이저 업데이트는 일일 주기를 유지하며 대기 중인 패치를 함께 전달합니다. 보류된 릴리스는 통합되며 누락되지 않습니다. 카드는 주기와 관계없이 항상 현재 상태를 표시합니다. 설정 → 알림(Web Push)에 있는 updates 알림 설정이 유일한 끄기 스위치입니다.

pack lead에서는 버튼에 pack을 <version> 버전으로 업데이트이 표시되며 한 번의 확인이 모든 머신에 적용됩니다. lead가 자체 헬스 게이트 아래에서 먼저 업데이트됩니다. 그런 다음 각 peer가 자체 사전 점검, 자체 헬스 게이트, 자체 롤백을 사용하여 한 번에 하나씩 동일한 릴리스로 자체 수준을 맞춥니다. peer별 버튼이나 두 번째 확인 프롬프트는 없습니다. 세부 정보, 두 가지 복구 경로, 휴대전화로 해결할 수 없는 한 가지 사례는 pack의 나머지 부분 업데이트를 참조하십시오.

멤버별 사전 점검 항목과 pack용 버튼 하나가 있는 lead의 업데이트 페이지입니다.
멤버별 사전 점검 항목과 pack용 버튼 하나가 있는 lead의 업데이트 페이지입니다.

모든 화면 상단의 띠에 실행 상태가 표시됩니다. 제공되는 릴리스, Starting update…, Updating to <version>, Updated to <version>. Tap to reload., 그리고 피어가 뒤따르는 동안 최종적으로 Updating <n> peers: <names> 순으로 표시됩니다. 롤백된 피어도 해당 위치에 이름이 표시되며, 페이지로 돌아가는 경로로 Updates를 참조하십시오.이(가) 함께 제공됩니다. 띠는 다음 순서로 나타납니다:

새 릴리스를 설치할 준비가 되었을 때의 띠입니다.
새 릴리스를 설치할 준비가 되었을 때의 띠입니다.
업데이트 설치가 실행되는 동안의 띠입니다.
업데이트 설치가 실행되는 동안의 띠입니다.
새 버전이 응답한 후의 띠입니다.
새 버전이 응답한 후의 띠입니다.
피어가 업데이트되는 동안의 띠입니다.
피어가 업데이트되는 동안의 띠입니다.

터미널에서 실행

collie update --check            # read-only preflight, --json for a script
collie update --check --local    # the same, this instance only, no pack members
collie update                    # stage, flip, restart, verify
collie update --status           # what the updater did, or is doing, --json for a script
collie update --rollback         # put the previous version back
collie update --major            # cross one major, see below

Herdr로 관리되는 설치 환경에서는 동일한 동작이 Herdr 액션으로 수행됩니다.

herdr plugin action invoke update --plugin herdr.collie      # Herdr-managed
bin/collie update                                            # Standalone

collie update --check은 아무것도 변경하지 않습니다. collie doctor를 실행하고, 여유 공간, bun 버전, 작업 트리, 업스트림 릴리스 목록, 서비스 단위를 읽으며, lead에서는 자체 SSH를 통해 모든 pack 멤버에게 동일한 질문을 던집니다. 빨간색 항목이 없으면 0을 반환하며 종료하고, --json는 버전이 지정된 보고서를 출력합니다. 이 인스턴스만 확인하고 pack 멤버를 건너뛰려면 --local를 추가하십시오. 휴대전화는 자체 호스트에서 로컬 점검을 실행하고 pack 링크를 통해 각 peer의 라인을 읽으므로 사전 점검에 SSH가 필요하지 않습니다.

collie update는 현재 메이저의 최신 릴리스를 가져와 준비합니다. 재시작 시 업데이트를 요청한 브리지가 종료되므로, 이 명령어는 교체 작업을 별도의 업데이트 프로그램에 넘기고 종료됩니다. 해당 업데이트 프로그램은 current가 새 버전을 가리키도록 설정하고, 새 바이너리를 통해 다시 시작한 후, 방금 설치한 버전을 포함한 응답이 오는지 최대 30초 동안 GET /api/health를 폴링합니다. 응답이 오지 않거나 이전 버전에서 응답이 오면 current를 다시 되돌리고 한 번 더 재시작한 뒤, 서비스 로그의 끝부분과 함께 rolled-back를 기록합니다. 이마저도 실행되지 않으면 직접 실행할 명령어와 함께 stuck를 기록하며, 더 이상 자동으로 재시작되지 않습니다. 롤백은 한 번만 수행되며 두 번 수행되지 않습니다.

머신에서 30초로 부족하다면 COLLIE_UPDATE_HEALTH_TIMEOUT_MS를 설정하십시오. 허용 시간을 초과하는 느린 콜드 스타트는 업데이트 실패로 간주되어 롤백됩니다.

collie update --status는 업데이트 프로그램이 유지하는 기록을 출력하며, 모바일 기기도 동일한 기록을 읽습니다. 메인 포트가 다운된 동안 deputy의 대기 도어가 /standby/update에서 이를 제공합니다.

새로운 beacon 훅 이벤트가 제공되면, update이(가) hooks install claude을(를) 다시 실행하라는 안내를 출력합니다.

버전이 저장되는 위치

바이너리 설치와 연결된 클론은 설치 루트(바이너리 설치의 경우 ~/.local/share/collie 또는 $COLLIE_DIR, 체크아웃의 경우 클론 자체) 아래에서 동일한 레이아웃을 공유합니다.

current -> versions/v1.3.0
versions/v1.3.0/
versions/v1.2.0/

체크아웃 환경에서 각 versions/vX.Y.Z는 릴리스 태그의 git worktree이며 단일 .git를 공유하므로, 버전 추가 시 두 번째 객체 저장소가 아닌 트리 하나만큼의 공간만 사용됩니다. 빌드는 새 디렉터리 내부에서 실행되고 마지막에 완료 마커를 기록합니다. 해당 마커가 없으면 전환이 거부되므로 빌드가 중단되어도 현재 실행 중인 버전은 변경되지 않습니다. 라이브 전환은 current 심볼릭 링크의 이름을 한 번 바꾸는 작업입니다. 보존 정책에 따라 current 및 최신 이전 버전 2개가 유지되며, 성공적인 실행 시에만 정리가 수행되므로 롤백 대상이 필요할 수 있는 실행에서는 해당 대상이 제거되지 않습니다.

Herdr 관리형 체크아웃은 예외이며 해당 위치에서 계속 업데이트됩니다(ADR 0006, 2026-09-03 개정). 분리된 얕은 복제본(shallow)이며 Herdr가 소유한 디렉터리에 위치하므로, 옆에 versions/ 레이아웃이 없고 인계할 대상이나 되돌릴 대상이 없습니다. 여기서는 --rollback가 거부되며, 복구 경로는 지정된 태그의 재설치(herdr plugin install AltanS/collie --ref vX.Y.Z --yes)입니다.

확인

bin/collie update --status
herdr plugin action invoke version --plugin herdr.collie
bin/collie version

최신 태그가 필요합니다.

모바일 자체 번들는 별개의 항목입니다. PWA는 자체적으로 새 빌드를 확인하고 약 1분 이내에 다시 로드하며, 업데이트 실행 중에는 해당 다시 로드를 보류합니다. 작업 중간인 경우 "탭하여 업데이트" 배너를 표시하고 사용자의 탭을 기다립니다.

버전이 변경되지 않은 경우

collie update은(는) 실행할 때마다 GitHub에 직접 요청합니다. 체크아웃의 경우 git ls-remote을(를), 바이너리 설치의 경우 GitHub 태그 API를 사용합니다. 릴리스 목록을 캐시하지 않습니다. GitHub 자체에서 반영하는 데 시간이 걸릴 수 있으므로 방금 게시된 릴리스라도 표시되는 데 1분 정도 걸릴 수 있습니다. 그다음에 collie doctor을(를) 실행하십시오. 그래도 해결되지 않으면 collie가 실행되지 않을 때을(를) 참조하십시오.

메이저 버전 업그레이드

update은(는) 메이저 버전을 자동으로 넘기지 않습니다.

herdr plugin action invoke update-major --plugin herdr.collie     # Herdr-managed
bin/collie update --major                                         # Standalone

한 메이저 버전을 올려 해당 버전의 가장 최신 릴리스로 진행합니다. 프리릴리스(ADR 0020)는 대상으로 하지 않습니다. 참고: 0.x에서 1.0으로 업그레이드.

"You are not currently on a branch" 오류가 발생하며 실패하는 경우

0.23.1 이전 GitHub 설치본에는 브랜치 추적 ref(#63)가 없습니다. 업데이트 기능을 복원하려면 다시 설치하십시오.

# replaces the checkout, rebuilds the UI
herdr plugin install AltanS/collie --yes
# reinstall doesn't restart the service
herdr plugin action invoke restart --plugin herdr.collie
# expect 0.23.1 or newer
herdr plugin action invoke version --plugin herdr.collie

Herdr의 플러그인 설정 디렉터리에 있는 설정(관례상 ~/.config/herdr/plugins/config/herdr.collie)은 유지됩니다.

pack의 나머지 부분 업데이트

휴대전화에서 한 번의 탭과 한 번의 확인으로 pack을 업데이트합니다. lead에서 Settings → Updates을 열고 pack을 <version> 버전으로 업데이트를 선택합니다. 버튼 위의 사전 점검은 lead뿐만 아니라 모든 멤버를 포괄합니다. 어느 곳에서든 점검이 빨간색이면 버튼이 비활성화되고 실패한 머신과 이유가 표시됩니다.

lead가 자체 헬스 게이트 아래에서 먼저 업데이트됩니다. lead가 안정된 후에만 첫 번째 peer가 시작됩니다. 그런 다음 각 peer가 자체 수준을 맞춥니다. lead가 실행 중인 릴리스를 읽고, GitHub에서 정확히 해당 태그를 가져오며, 자체 사전 점검, 자체 헬스 게이트, 자체 롤백을 실행합니다. peer는 한 번에 하나씩 이동합니다. Updates 페이지는 멤버당 한 줄씩 유지합니다: waiting, checking, staging, restarting, verifying, updated, rolled back 또는 unreachable.

peer가 따라갈 수 있는지 여부는 두 가지 요구 사항에 따라 결정됩니다.

  • peer에는 github.com로 향하는 아웃바운드 HTTPS가 필요합니다. 해당 위치에서 코드를 가져옵니다. 이 접근 권한이 없으면 peer는 뒤처진 것으로 보고되며 아래에 설명된 대로 터미널에서 대신 수준을 맞춥니다.
  • -dev+ 빌드는 절대로 따라가지 않습니다. 개발 빌드를 사용하는 머신은 lead가 무엇을 실행하고 있든 해당 빌드를 유지합니다.

롤백된 peer는 Updates 페이지에 해당 사실을 표시하며 자체적으로 재시도하지 않습니다. 두 가지 경로를 통해 다시 시도할 수 있습니다.

피어 롤백 후 Retry pack update 버튼이 표시된 업데이트 페이지입니다.
피어 롤백 후 Retry pack update 버튼이 표시된 업데이트 페이지입니다.
  • 휴대전화에서 실행하는 경우. lead가 최신 상태이고 peer가 뒤처지면 버튼에 pack 업데이트 재시도이 표시됩니다. peer만을 대상으로 하는 새 실행을 시작하며, 이 새 실행을 통해 각 peer에 한 번 더 시도할 기회가 부여됩니다.
  • lead의 터미널에서 실행하는 경우. 휴대전화로 전혀 수준을 맞출 수 없는 peer에 사용합니다. 명령어는 동일합니다.
collie pack update <member>…      # on the lead
collie pack update --all

자체 SSH를 통해 단일 시퀀스로 실행됩니다. 먼저 모든 머신에 대해 사전 점검을 실행하고, SSH를 통해 얻은 응답 옆에 각 peer의 자체 보고서를 출력하므로 불일치 사항이 평균화되지 않고 명시적으로 드러납니다. 한 번의 동의를 요청합니다. 그런 다음 lead가 배포 중인 빌드를 아직 실행하고 있지 않은 경우 lead 자체를 업데이트합니다. 다음으로 각 peer를 차례대로 처리합니다. lead의 커밋이 git 번들로 peer에 푸시되고, 다시 빌드되고, 재시작되며, 동일한 30초 예산 내에서 새 빌드에 응답할 때까지 폴링됩니다.

첫 번째 실패가 발생하면 실행이 중단됩니다. 그 뒤의 모든 멤버는 손대지 않은 채 "시도하지 않음"으로 보고되며, 요약에는 실패를 해결하는 단일 명령어가 표시됩니다. 자체 업데이트를 적용할 수 없는 lead는 어떤 peer도 건드리지 않습니다. pack은 버전 불일치를 허용하므로(PACK_PROTOCOL.md §7.1) 거기서 중단하는 것이 안전합니다. 따라서 절반만 업데이트된 pack은 지원되는 상태이지만 계속 진행하는 것은 지원되지 않습니다.

휴대전화로 해결할 수 없는 한 가지 사례. peer 수준을 맞춘 후 lead를 수동으로 롤백하면 peer가 lead보다 앞서게 됩니다. 어떤 것도 peer의 버전을 낮추지 않습니다. peer를 이전 버전으로 되돌릴 수 있는 lead는 peer를 어떤 버전으로든 변경할 수 있는 lead이기 때문입니다. 버전 불일치는 무해하며, 해결 방법은 lead에서 collie pack update <member>를 실행하는 것입니다.

코드는 SSH를 통해서만 peer에 도달하며 pack 링크를 통해서는 절대로 도달하지 않습니다(ADR 0016, 추록 2026-09-04). peer가 자체 수준을 맞출 때 코드는 익명 HTTPS를 통해 GitHub에서 가져오며 peer가 스스로 결정합니다. lead는 자신이 실행 중인 버전과 어떤 peer가 진행할 수 있는지만 명시합니다.

업데이터 자체가 종료되는 경우

업데이터가 사라지면 위의 내용 중 어떤 것도 도움이 되지 않습니다. 이는 터미널만 사용 가능하다고 가정하는 경로입니다.

업데이터는 하나의 레코드인 <state dir>/update.json(기본값은 ~/.local/state/collie/update.json, 또는 $COLLIE_STATE_DIR 하위)을 기록합니다. 먼저 이 파일을 읽으십시오. 상태, 실행 시작 버전, 목표 버전, 업데이터의 pid가 명시되어 있으며, 실패 시 서비스 로그의 마지막 부분과 복구 명령어가 포함되어 있습니다.

휴대전화에서 시작한 업데이트는 터미널에 전혀 출력되지 않습니다. collie-api-update-<stamp>라는 이름의 자체 임시 systemd 유닛에서 실행되며, --collect은(는) 해당 유닛이 종료되는 즉시 이를 제거하므로 실행 기록은 저널에만 남습니다.

journalctl --user -u 'collie-api-update-*' --since '30 min ago'

휴대전화에서는 성공했다고 보고했으나 다운스트림 작업이 수행되지 않은 경우(예: 실행 레코드를 작성할 수 없다는 경고가 발생하는 경우) 저널을 확인해야 합니다. 이는 리드가 자체적으로 업데이트되었지만 해당 pack의 레벨을 맞추지 않음을 의미합니다. 브리지 자체의 저널에는 나머지 절반의 기록이 포함됩니다. 리드가 레코드를 가져올 때 실행당 하나의 [pack] update <run id>: levelling peers to <version> 줄이 기록됩니다. 해당 줄이 없으면 턴이 시작되지 않은 것입니다.

bunx에서 멈추는 1.5.4 이전 버전의 업데이트

1.5.4 이전 버전에서는 휴대전화에서 시작된 업데이트가 사용자의 PATH가 없는 임시 systemd 사용자 유닛에서 실행됩니다. 체크아웃 설치 환경에서 Bun이 ~/.bun/bin에만 존재하는 경우, 체크아웃은 진행되지만 다시 빌드할 때 bunx: command not found 오류가 발생하며 실패합니다. Bun이 PATH에 있는 터미널에서 collie update을(를) 한 번 실행하거나, 심이 직접 Bun을 찾는 Herdr 액션을 실행하여 이를 해결하십시오. 두 방법 모두 진행된 체크아웃을 다시 빌드합니다. 1.5.4 버전부터는 업데이터가 Bun을 직접 찾습니다.

그 옆에는 pid와 타임스탬프를 담고 있는 <state dir>/update.lock이 있습니다. 한 번에 하나의 실행만 허용됩니다. 상태가 여전히 preflight, staging, restarting, verifying 중 하나로 기록되어 있고, 10분 동안 변경되지 않았으며, 해당 pid가 프로세스 테이블에 더 이상 없다면 종료된 상태입니다. 이는 interrupted로 간주되며 새 실행이 락을 획득할 수 있습니다.

이전 버전을 수동으로 복원하려면 current이 이전 버전을 가리키도록 설정하고 재시작하십시오.

cd ~/.local/share/collie        # or $COLLIE_DIR, or the checkout root
ls versions/
ln -sfn versions/<previous> current
collie restart

또는 이전 버전이 동일한 작업을 자동으로 수행하도록 할 수도 있습니다. 이는 stuck 레코드에 포함된 명령어입니다.

~/.local/share/collie/versions/<previous>/bin/collie update --rollback

collie 대신 전체 경로를 사용하십시오. PATH에 있는 이름은 current을 통해 확인되며, 문제가 발생한 대상이 바로 current일 수 있습니다.

상태 게이트가 감지하지 못하는 항목

게이트는 한 가지만 검증합니다. 서비스가 다시 시작되었고 설치된 버전으로 /api/health에 응답했다는 점입니다. 이는 제한된 보증이며 "절대 벽돌이 되지 않음"을 의미하지 않습니다. 게이트가 성공을 보고하더라도 다음 네 가지 문제가 발생할 수 있습니다.

  • 휴대폰의 오래된 웹 번들. 호스트는 새 버전이지만 휴대폰은 서비스 워커에서 이전 JavaScript를 계속 실행하고 있습니다. PWA는 자체 일정에 따라 자체 번들을 교체하므로 상태 게이트는 이를 파악할 수 없습니다.
  • 설정 또는 스키마 마이그레이션. Collie는 이 주기에서 마이그레이션을 제공하지 않으며 업데이터도 실행하지 않습니다. 게이트는 서비스의 응답 여부만 확인하며 데이터 형식이 올바른지는 확인하지 않습니다.
  • 상호작용 시에만 중단되는 mux 드라이버. 브리지가 시작되어 상태 검사에는 응답하지만, 어댑터가 최초의 실제 연결이나 전송 시 실패합니다. 상태 검사는 활성 상태 프로브일 뿐 적합성 테스트가 아닙니다.
  • 이전 버전의 코드를 실행하는 업데이터. 분리된 업데이터는 교체 대상 버전에서 실행됩니다. 업데이터는 작고 안정적으로 유지되며 레코드에는 버전이 지정되므로, 이전 업데이터와 새 브리지가 여전히 서로를 인식할 수 있지만 이는 완화책일 뿐 완전한 보증은 아닙니다.

스크립트에서 최신 릴리스 확인

git 태그를 조회하고 semver 기준으로 정렬합니다. 사전 릴리스를 제외하는 GET /repos/AltanS/collie/releases/latest은(는) 피하십시오.

# newest stable release
git ls-remote --tags --refs https://github.com/AltanS/collie | \
  sed 's#.*refs/tags/##' | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -1

시험판

안정 버전 설치에는 사전 릴리스가 제공되지 않습니다. 사전 릴리스를 사용하도록 설정하면 최종 릴리스가 나올 때까지 해당 메이저 버전의 사전 릴리스를 추적합니다 (ADR 0020).

# Standalone — the install script's opt-in flag takes the newest prerelease
curl -fsSL https://colliepwa.dev/install.sh | sh -s -- --beta

# Herdr-managed — install the tag; that is the whole opt-in
herdr plugin install AltanS/collie --ref <tag> --yes
# a reinstall does not restart the service
herdr plugin action invoke restart --plugin herdr.collie

스크립트에서 최신 릴리스 확인을(를) 사용하여 <tag>을(를) 확인하십시오.

안정 릴리스로 돌아가려면 다음을 실행하십시오.

herdr plugin install AltanS/collie --yes
herdr plugin action invoke restart --plugin herdr.collie

0.x에서 1.0으로 업그레이드

BUN_INSTALL이(가) .env에만 정의되어 있다면 셸 프로필이나 서비스 환경에서 대신 export 하십시오. 그런 다음 실행하십시오.

# Herdr-managed
herdr plugin action invoke update-major --plugin herdr.collie

# Linked clone
bin/collie update --major

bin/collie version 또는 herdr plugin action invoke version --plugin herdr.collie을(를) 통해 확인하십시오.

pack 설정의 경우: 리드를 먼저 업데이트한 다음 collie pack update <member>…을(를) 실행하십시오 (pack의 나머지 부분 업데이트). 참고:

  • join은(는) 일반 http:// 리드에 --insecure이(가) 필요합니다.
  • 1.0 이전의 초대 토큰은 pack invite을(를) 사용하여 다시 생성해야 합니다.
  • 이전 멤버 레코드는 reconnect이(가) 필요합니다.
  • 업그레이드되지 않은 피어는 pack status에서 warn:(으)로 표시됩니다 (PACK_PROTOCOL §7.1).

1.0에서 변경되는 사항

Herdr 액션 ID 및 scripts/collie-ctl.sh 경로는 변경되지 않습니다 (ADR 0006).

CLI 동사는 <checkout>/bin/collie에 컴파일됩니다 (명령어). collie을(를) PATH에 추가하려면 bin/collie link을(를) 사용하십시오 (PATH에 collie 추가, ADR 0021).

새로운 기능:

  • pair / devices: 기기별 쓰기 자격 증명 (기기 페어링).
  • pack … / join / promote: 다중 호스트 클러스터링 (Pack 명령).
  • doctor: 구성 진단.
  • stt setup: 음성 작성기 구성 (음성 입력).
  • hooks install claude / beacon emit: 에이전트 활동 비콘 (에이전트 비콘).
  • COLLIE_MUX: herdr(기본값), tmux, 또는 zellij을(를) 선택하십시오 (tmux 및 zellij).

무리(herd)가 실제라면 나란히

보조 인스턴스 구성은 단일 호스트에서의 다중 Collie 인스턴스에 설명되어 있습니다.

롤백

마지막 0.x 태그를 체크아웃하고 다시 빌드합니다.

last0x=$(git ls-remote --tags --refs origin | sed 's#.*refs/tags/##' | \
  grep -E '^v0\.[0-9]+\.[0-9]+$' | sort -V | tail -1)
git fetch --depth 1 origin tag "$last0x"
git checkout --detach --force "$last0x"
rm -f bin/collie    # 1.0's binary otherwise survives the rollback

bash scripts/collie-ctl.sh build을(를) 사용하여 다시 빌드하고 Herdr의 restart 액션을 호출합니다. 상태 파일(pack-trust.json, pack-runtime.json, paired-devices.json, pairing-pending.json)은 유지할 수 있습니다. 롤백하면 기기 페어링 적용이 제거됩니다. 쓰기 보호가 필요한 경우 COLLIE_DEVICE_HEADER을(를) 구성하십시오.

정상 작동 확인

version이(가) 1.0.0 이상으로 보고되는지 확인합니다. 업그레이드된 설치본은 기기를 자동으로 페어링하지 않습니다. 전화기에 쓰기 자격 증명을 발급하려면 pair을(를) 실행하고, 해당 전화기를 분실한 경우 devices revoke을(를) 실행하십시오(기기 페어링).

중지 또는 제거

서비스 일시 중지:

herdr plugin action invoke stop --plugin herdr.collie     # Herdr-managed
bin/collie stop                                           # standalone

서비스 정의 및 포트 매핑을 제거합니다(.env 및 체크아웃은 유지됨):

herdr plugin action invoke uninstall --plugin herdr.collie   # Herdr-managed
bin/collie uninstall                                         # standalone

남은 파일을 삭제하려면: herdr plugin uninstall herdr.collie을(를) 실행하거나(Herdr 관리형), bin/collie unlink을(를) 실행하고 ~/.local/share/collie / $COLLIE_DIR을(를) 삭제하십시오(독립형).

collie가 실행되지 않을 때

바이너리 설치(~/.local/share/collie 또는 $COLLIE_DIR)의 경우, 이전 바이너리를 직접 실행하십시오:

ls ~/.local/share/collie/versions/
~/.local/share/collie/versions/<previous>/bin/collie update --rollback

특정 버전을 직접 설치하려면:

curl -fsSL https://colliepwa.dev/install.sh | COLLIE_TAG=v1.0.0 sh

체크아웃 또는 Herdr 설치의 경우, git checkout <tag> 또는 herdr plugin install AltanS/collie --ref vX.Y.Z --yes을(를) 실행하십시오.

포크를 사용하는 경우

collie update은(는) origin을(를) COLLIE_UPDATE_REPO(기본값 AltanS/collie)와(과) 대조하여 확인하고 다를 경우 중단합니다. 포크가 자체 태그를 릴리스하는 경우 COLLIE_UPDATE_REPO=you/collie을(를) 설정하십시오.

업스트림 업데이트를 포크에 수동으로 병합하려면:

git remote add upstream https://github.com/AltanS/collie.git
git fetch upstream --tags
git merge v1.0.0                                            # the tag you decided to take
# resolve the conflicts, commit the merge, then rebuild and restart:
bash scripts/collie-ctl.sh build
# Herdr-managed: invoke the `restart` action instead
bin/collie restart

포크에서는 update --major을(를) 사용하지 마십시오. v1.* 태그를 수동으로 병합하십시오. 활성 COLLIE_UPDATE_REPO을(를) 확인하려면 collie doctor을(를) 실행하십시오.

재부팅 후에도 유지하기

Linux에서는 무인 사용자 서비스를 위해 lingering을 활성화합니다:

loginctl enable-linger $USER

systemctl --user status collie 명령으로 상태를 확인합니다.

macOS에서는 start이(가) ~/Library/LaunchAgents/herdr.collie.plist을(를) 자동으로 관리합니다. 사용자 로그인 시 실행됩니다. launchctl print gui/$(id -u)/herdr.collie 명령으로 상태를 확인하십시오.

GitHub에서 이 페이지 수정하기