설치 경로 — 패키지 관리자 배포
tabbit을 세 OS 전부에서 한 줄로 설치하고, PATH를 손대지 않으며, 한 줄로 갱신하게 하는
배포 채널의 설계입니다.
바뀌는 것은 바이너리를 어디에서 받는가뿐입니다. 빌드도, 아카이브의 내용도, 도구 자체도 그대로입니다 — 4절의 선행 정리 하나를 제외하면. 그래서 이 문서의 대부분은 설계가 아니라 어느 채널을 쓰고 어느 채널을 쓰지 않는가와 그 근거입니다.
1. 요약
| 무엇 | 판단 |
|---|---|
| 1단계 | 설치 스크립트 2개(sh·ps1). 세 OS 전부, 심사 없음, 재실행이 곧 갱신입니다 |
| 2단계 | Scoop 버킷(Windows)과 Homebrew tap(macOS·Linux). 둘 다 우리가 소유하므로 심사가 없고, 릴리즈 워크플로가 매니페스트를 갱신합니다 |
| 3단계 | winget. 심사가 있으나 Windows 사용자가 가장 먼저 조회하는 곳입니다 |
| 보류 | npm · Chocolatey · dotnet tool — 각각 조건이 붙습니다(8절) |
| 하지 않음 | apt/rpm 자체 저장소 · snap · flatpak(9절) |
선결 사항이 1개 남아 있습니다. Windows 아카이브에 실행 파일 외의 파일이 들어 있습니다
(4절). 릴리즈는 v0.1.0으로 해소되었습니다(2절).
결정을 요청하는 항목이 2개입니다 — macOS 코드 서명(7절)과 npm 이름(8절).
2. 현재 상태
doc/install.md가 안내하는 절차는 내려받기 → 압축 해제 → PATH 등록 → (macOS) 격리 해제
4단계입니다. 각 단계의 비용입니다.
| 단계 | 비용 |
|---|---|
| 내려받기 | 플랫폼별 파일 6개 중 자기 것을 고릅니다. win-arm64와 win-x64의 구분은 사용자가 판정합니다 |
| 압축 해제 | 설치 위치를 사용자가 정합니다 |
| PATH 등록 | Windows 안내는 $env:PATH 대입이므로 그 세션에서만 유효하고, 영구 등록은 「시스템 환경변수에 추가하세요」라는 문장으로 남아 있습니다 |
| macOS 격리 해제 | xattr -d com.apple.quarantine를 사용자가 실행합니다 |
| 갱신 | 수단이 없습니다. 같은 4단계를 다시 수행합니다 |
릴리즈는 게시되어 있습니다. v0.1.0이 2026-08-26에 올라갔고, 아카이브 6개와
SHA256SUMS가 함께 있습니다. 문서가 가리키는 내려받기 주소가 실재하므로, 이 절의 4단계는
이제 실제로 밟을 수 있는 절차입니다.
3. 요구사항과 판정 기준
| 요구 | 판정 기준 |
|---|---|
| 세 OS | Windows · macOS · Linux에서 각각 한 줄 |
| 실행 경로 자동 | 설치 직후 새 셸에서 tabbit --version이 동작할 것 |
| 갱신 한 줄 | 버전을 기재하지 않고 최신으로 이동할 것 |
| 되돌리기 | 제거가 한 줄일 것. 남는 파일이 없을 것 |
| 우리 쪽 비용 | 릴리즈 태그 하나로 모든 채널이 갱신될 것 — 손으로 갱신하는 채널은 곧 낡습니다 |
4. 선행 정리 — 아카이브를 실행 파일 하나로
모든 채널이 「아카이브 안의 어느 파일이 실행 파일인가」를 매니페스트에 기재합니다. 그 답이 「하나뿐」이면 채널마다의 기재가 한 줄로 끝납니다.
지금은 그렇지 않습니다. v0.1.0의 게시본 실측입니다.
tabbit-0.1.0-win-x64.zip
tabbit.exe 66,646,914 바이트
aspnetcorev2_inprocess.dll 392,488 바이트
LICENSE 1,468 바이트
readme.md 4,032 바이트
tabbit-0.1.0-linux-arm64.tar.gz
tabbit 65,350,079 바이트
LICENSE · readme.md
aspnetcorev2_inprocess.dll은 ASP.NET Core의 IIS 인프로세스 모듈입니다. 이 도구의 serve
모드는 Kestrel로 자체 호스팅하므로 IIS 뒤에서 동작하지 않고, 따라서 이 파일은 사용되지
않습니다. PublishSingleFile이 네이티브 자산을 번들에 넣지 않고 실행 파일 옆에 두기
때문에 나온 것입니다.
정리 방법은 2가지이고 어느 쪽이든 결과는 같습니다.
| 방법 | 내용 |
|---|---|
| 제외 | .pdb를 제거하는 DropNativeDebugFiles 타깃과 같은 자리에서 제외합니다 |
| 번들 | IncludeNativeLibrariesForSelfExtract=true. 실행 시 임시 폴더로 추출되므로 첫 실행이 느려지고 추출 폴더가 생깁니다 |
앞의 것을 권고합니다. 뒤의 것은 사용되지 않는 파일을 위해 실행 시 비용을 지불합니다.
해당하는 것은 Windows뿐입니다.
aspnetcorev2_inprocess.dll은 IIS 인프로세스 모듈이라 Windows 게시에만 나오고, Linux·macOS 아카이브는 실행 파일 하나에LICENSE와readme.md가 붙은 것이 전부입니다. 매니페스트가 실행 파일을 지목해야 하는 채널에서 판정이 갈리는 곳도 Windows 쪽(Scoop·winget)뿐입니다.
5. 1단계 — 설치 스크립트
패키지 관리자보다 앞에 두는 이유는 심사가 없고, 우리 저장소만으로 완결되며, 세 OS를 한 번에 덮기 때문입니다. 그리고 뒤의 모든 채널이 준비될 때까지 문서의 첫 줄을 대신합니다.
curl -fsSL https://maxidea1024.github.io/tabbit/install.sh | sh
irm https://maxidea1024.github.io/tabbit/install.ps1 | iex
문서 사이트가 이미 GitHub Pages로 게시되고 있으므로 website/static/에 파일 2개를 두면
그 주소가 됩니다. 별도 호스팅이 필요하지 않습니다.
| 스크립트가 하는 일 | 내용 |
|---|---|
| 플랫폼 판정 | uname -s·uname -m / RuntimeInformation.OSArchitecture. 사용자가 RID를 고르지 않습니다 |
| 버전 결정 | 인자가 없으면 releases/latest. TABBIT_VERSION으로 고정할 수 있습니다 |
| 검증 | SHA256SUMS와 대조합니다. 릴리즈가 이미 게시하고 있으므로 새로 만들 것이 없습니다 |
| 설치 위치 | ~/.tabbit/bin · %LOCALAPPDATA%\Programs\tabbit. 관리자 권한이 필요하지 않습니다 |
| PATH 등록 | 셸 프로필(.zshrc·.bashrc·.profile)에 1줄 추가 / Windows는 사용자 환경변수를 [Environment]::SetEnvironmentVariable로 영구 등록 |
| 갱신 | 같은 명령을 다시 실행합니다. 같은 버전이면 아무 것도 하지 않고 종료합니다 |
| 제거 | ~/.tabbit 삭제와 프로필 1줄 삭제. 스크립트가 표식 주석과 함께 기재하므로 기계적으로 제거할 수 있습니다 |
PATH 등록에는 규칙이 하나 필요합니다 — 이미 등록되어 있으면 추가하지 않습니다. 재실행이 곧 갱신이므로, 그 검사가 없으면 프로필에 같은 줄이 누적됩니다.
macOS의 격리 속성은 이 경로에서 발생하지 않습니다. 격리는 내려받는 프로그램이 부여하는
것이고 curl은 부여하지 않습니다. 지금 문서의 xattr 안내는 브라우저로 받은 경우에
한정됩니다 — 스크립트 설치가 기본이 되면 그 안내는 수동 설치 절로 이동합니다.
6. 2단계 — Scoop과 Homebrew
둘 다 우리가 소유하는 저장소에 매니페스트를 두는 방식이라 심사가 없습니다. 사용자가 버킷·tap을 1회 추가하는 대가로, 등록 지연 없이 릴리즈와 같은 시각에 최신이 됩니다.
6.1 Scoop — Windows
버킷은 이 저장소의 bucket/ 폴더로 충분합니다. Scoop은 임의의 git 저장소를 버킷으로
받으며 루트의 bucket/을 조회하므로, 저장소를 새로 만들 필요가 없습니다.
scoop bucket add tabbit https://github.com/maxidea1024/tabbit
scoop install tabbit
scoop update tabbit # 갱신
scoop uninstall tabbit # 제거
bucket/tabbit.json의 골자입니다.
{
"version": "0.1.0",
"description": "Game Data Authoring & Build Tool",
"homepage": "https://maxidea1024.github.io/tabbit/",
"license": "MIT",
"architecture": {
"64bit": { "url": "https://github.com/maxidea1024/tabbit/releases/download/v0.1.0/tabbit-0.1.0-win-x64.zip" },
"arm64": { "url": "https://github.com/maxidea1024/tabbit/releases/download/v0.1.0/tabbit-0.1.0-win-arm64.zip" }
},
"bin": "tabbit.exe",
"checkver": "github",
"autoupdate": { "hash": { "url": "$baseurl/SHA256SUMS" } }
}
| 항목 | 효과 |
|---|---|
bin | ~/scoop/shims에 shim을 생성합니다. 그 폴더는 Scoop 설치 시 이미 PATH에 있으므로 실행 경로 문제가 발생하지 않습니다 |
checkver·autoupdate | scoop update가 새 릴리즈를 조회합니다. 해시는 릴리즈의 SHA256SUMS에서 읽으므로 우리가 기재하지 않습니다 |