v5.4.1: Windows에서 "aios update"가 깨진 이유와 자체 업데이트 수정¶
빠른 답변: v5.4.1은 Windows 전용 자체 업데이트 실패를 수정했습니다. 설치 트리 내부에서
aios update를 실행하면 프로세스 작업 디렉터리가 설치 프로그램이 삭제해야 할 디렉터리를 고정하고, Windows는 cwd가 유지하는 디렉터리를 삭제할 수 없어 삭제가 조용히 실패하고 새 버전이<install>/aios/에 중첩되어 이후 업데이트가MODULE_NOT_FOUND로 충돌했습니다. 수정은 작업 디렉터리를 설치 트리 밖으로 먼저 옮기고, 설치 프로그램이 이전 디렉터리 삭제를 검증하며(중첩 대신 명시적 실패), 재실행 시 명확한 오류를 출력하는 3중 구조입니다.
버그: Windows에서 자체 업데이트가 설치를 깨뜨릴 수 있음¶
릴리스 설치(git 작업 트리 없음)의 aios update는 릴리스 설치 프로그램을 제자리에서 다시 실행합니다. Windows에서는 실행 중인 프로세스의 cwd인 디렉터리를 삭제할 수 없습니다. ~/.rexcil/aios 안에서 update를 실행하면——가장 자연스러운 동작이지만——프로세스 cwd가 설치 트리를 고정합니다:
- 설치 프로그램의 삭제 단계가 조용히 실패(
-ErrorAction SilentlyContinue가 오류를 삼킴). Move-Item이 대상 디렉터리가 여전히 존재함을 확인하고 새 버전을<install>/aios/에 중첩.- 업데이트 후 재실행이
scripts/aios.mjs를 찾지 못해MODULE_NOT_FOUND로 충돌하고, 반쯤 교체된 설치가 남음.
이것은 "도구가 고장났다"처럼 보이지만 실제로는 "자신이 서 있는 디렉터리는 삭제할 수 없다"는 Windows API 규칙 하나가 원인인 버그였습니다.
수정: 3중 구조¶
- 먼저 이동. 릴리스 설치 프로그램을 실행하기 전에 업데이터는 자신의 작업 디렉터리를 설치 트리 밖으로 옮깁니다(
ensureWorkingDirectoryOutsideInstallTree). 교체 대상 디렉터리를 고정하는 것이 없어집니다. - 명시적 검증.
aios-install.ps1/aios-install.sh는 이전 디렉터리가 실제로 삭제되었는지 확인하고, 실패 시 명확한 메시지("실행 중인 aios/node 프로세스가 파일을 잠그고 있을 수 있음")로 중단합니다. 중첩 설치를 계속하지 않습니다. - 재실행 가드. 업데이트 후 프로세스는 진입점 존재를 확인하고, 교체 실패 시 구체적인 복구 메시지를 출력합니다.
업데이터는 릴리스 설치 프로그램 업데이트에 로컬 scripts/aios-install.ps1을 우선 사용하므로 방어적 수정이 즉시 적용됩니다.
해야 할 일¶
- 5.4.0 이하에서
aios update후MODULE_NOT_FOUND를 본 적이 있다면: 설치 프로그램을 한 번 다시 실행하세요(irm https://github.com/rexleimo/aios/releases/latest/download/aios-install.ps1 | iex). 이후aios update는 안전합니다. - 실패한 업데이트의 잔재로
~/.rexcil/aios/aios/에 이상한 중첩 디렉터리가 있다면 삭제(또는 재설치)하세요.
FAQ¶
비 Windows 설치도 영향받나요?¶
아니요. Unix 셸은 같은 방식으로 cwd를 고정하지 않으며, 이 실패는 Windows 디렉터리 잠금 동작에 특화된 것입니다. 방어적 검사는 모든 플랫폼에서 실행됩니다.
영향받는 경로는 aios update뿐인가요?¶
릴리스 설치의 제자리 교체는 모두 같은 경로를 사용합니다. 작업 디렉터리 이동은 그 전체 경로에 적용됩니다.
자세한 내용은 어디서 보나요?¶
변경 로그에 v5.4.1이 기록되어 있습니다. 수정 자체는 릴리스 자산에 포함되어 있으며, 5.4.1로 올리면 업데이트가 안전합니다.
자기 설치를 깨뜨릴 수 있는 자체 업데이터는 업데이터가 없는 것보다 나쁩니다. v5.4.1은 가장 흔한 경우——설치 디렉터리 내부에서의 업데이트——를 테스트된 안전한 경로로 만들었습니다.