Easy Install
GitHub 릴리스 및 기타 소스에서 바이너리를 손쉽게 설치할 수 있는 크로스 플랫폼 명령줄(command-line) 도구입니다. 단일 명령으로 실행 파일을 다운로드하고 설정하여 워크플로우를 간소화하세요.
주요 기능 (Features)
- 🚀 GitHub 릴리스에서 바이너리 직접 설치
- 🎯 자동 플랫폼 감지 및 바이너리 선택
- 📦 여러 아카이브 형식(zip, tar.gz, tar.xz 등) 지원
- 🔧 사용자 지정 설치 디렉토리
- 🌐 제한된 네트워크를 위한 프록시 지원
- 📋 복잡한 패키지를 위한 매니페스트 기반 설치
- 🔄 버전별 또는 최신 릴리스 설치
- 💾 자동 PATH 설정
- ⚙️ 지속적인 구성 관리(Persistent configuration management)
- ⏱️ 구성 가능한 네트워크 타임아웃
- 🗜️ strip 및 UPX 압축을 통한 바이너리 최적화
- 🔄 자체 업그레이드 지원
설치 (Installation)
Windows
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/easy-install/easy-install/main/install.ps1 | iex"
Linux/macOS
curl -fsSL https://raw.githubusercontent.com/easy-install/easy-install/main/install.sh | sh
...
Cargo (Rust)
cargo install easy-install
...
npm/pnpm/yarn
npm install -g @easy-install/easy-install
pnpm add -g @easy-install/easy-install
...
사용법 (Usage)
기본 설치 (Basic Installation)
ei https://github.com/ahaoboy/mujs-build
...
고급 옵션 (Advanced Options)
ei https://github.com/ahaoboy/mujs-build --target x86_64-pc-windows-gnu
...
아티팩트 필터링: --name 대 --regex
GitHub 릴리스에 여러 에셋이 포함된 경우, ei는 자동으로 사용자의 플랫폼을 감지하고 적절한 것을 선택합니다. 하지만 때로는 더 세밀한 제어가 필요할 수 있으며, 이때 --name과 --regex가 유용하게 사용됩니다.
--name
--name은 사용 가능한 에셋이 여러 개이고 그중 특정 하나만 원하는 경우에 사용됩니다. 예를 들어, quickjs-ng 릴리스에는 qjs와 qjsc 실행 파일 두 가지가 포함되어 있습니다:
ei quickjs-ng/quickjs --name qjs
작동 방식: ei는 먼저 guess_target을 사용하여 사용자의 플랫폼과 일치하는 모든 에셋(예: x86_64-pc-windows-msvc)을 찾은 다음, --name을 적용하여 결과를 필터링합니다. 이는 플랫폼 감지 과정을 우회하지 않습니다.
--regex
--regex는 에셋 파일명이 guess_target이 플랫폼 정보를 추출하기에 너무 복잡할 때 사용됩니다. 예를 들어, mpv는 버전 해시가 포함된 파일명을 사용합니다:
mpv-v0.41.0-dev-g4c220ffd9-28826186115-x86_64-pc-windows-msvc.zip
mpv-v0.41.0-dev-g4c220ffd9-28826186115-aarch64-pc-windows-msvc.zip
이 파일명들은 버전 정보 덩어리(version blob)가 도구 이름과 플랫폼 트리플 사이에 위치하기 때문에 guess_target을 혼란스럽게 합니다. --regex를 사용하여 원본 파일명을 직접 일치시키세요:
ei mpv-player/mpv@git-release --regex "x86_64-pc-windows-msvc\.zip"
...
작동 방식: 정규식은 각 에셋의 원본 파일명과 직접 일치시킵니다. 일치가 발견되면 해당 에셋이 즉시 선택되며, guess_target은 완전히 우회됩니다. 정규식은 정확히 하나의 에셋에만 일치해야 하며, 0개 또는 여러 개가 일치하는 것은 오류입니다.
--alias와 조합하기: 정규식으로 매칭된 에셋들은 종종 길고 다루기 어려운 이름을 가집니다. --alias를 사용하여 설치되는 파일(또는 다중 파일 패키지의 경우 디렉토리)에 깔끔하고 기억하기 쉬운 이름을 지정하세요:
ei some/tool --regex "x86_64-pc-windows-msvc" --alias tool
...
💡 **일반적인 규칙 (Rule of thumb):** `guess_target`이 파일 이름에서 사용자의 플랫폼을 인식할 수 있을 때는 `--name`을 사용하세요. 파일 이름이 비표준적이거나 플랫폼 감지가 실패할 경우에는 `--regex`를 사용하세요.
아래는 `ei`가 허용하는 모든 인자(arguments)와 옵션(options) 목록입니다:
USAGE:
ei [OPTIONS] [URL] [COMMAND]
#### 인자 (Arguments)
| 인자 | 설명 |
| :--- | :--- |
| `[URL]` | GitHub 리포지토리 (`owner/repo`), 릴리스 URL, 또는 아티팩트 URL. 생략하면 도움말이 출력됩니다. |
#### 옵션 (Options)
| 옵션 | 단축어 | 설명 | 기본값 |
| :--- | :--- | :--- | :--- |
| `--dir <DIR>` | `-d` | 다운로드된 바이너리를 설치할 디렉토리. 절대 경로 또는 이름( `~/.ei/` 아래에 저장됨)일 수 있습니다. | `~/.ei` |
| ... | |
#### 하위 명령어 (Subcommands)
| 하위 명령어 | 설명 |
| :--- | :--- |
| `config` | 영구적인 설정(configuration)을 관리합니다. [설정 관리](#configuration-management)를 참조하세요. |
### 바이너리 최적화
Easy Install은 단일 실행 파일 설치에 대한 자동 바이너리 최적화를 지원합니다:
```bash
# 디버그 심볼을 제거하여 바이너리 크기를 줄입니다
ei https://github.com/boa-dev/boa --strip
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
요구 사항 (Requirements):
--strip: PATH에서 strip 명령어가 사용 가능해야 합니다.
--upx: PATH에서 upx 명령어가 사용 가능해야 합니다.
참고 사항 (Notes):
- 최적화는 단일 실행 파일 설치 시에만 작동합니다.
- 필요한 도구를 찾을 수 없는 경우 경고가 표시되지만 설치는 계속 진행됩니다.
- 크로스 플랫폼에서 작동합니다: 이 플래그들은 어떤 OS에서도 사용할 수 있으며, 도구가 사용 불가능하면 자동으로 건너뜁니다.
- UPX는 최대 압축을 위해
--best --lzma 플래그를 사용합니다.
사용자 지정 설치 디렉토리 (Custom Installation Directory)
ei ./dist-manifest/mpv-easy.json -d c:/mpv-easy
...
업그레이드 (Upgrade)
단일 명령어로 ei 자체를 최신 버전으로 업그레이드합니다:
이 명령어는 공식 저장소에서 최신 릴리스를 다운로드하여 현재 바이너리를 제자리(in-place)에 교체합니다.
설정 관리 (Configuration Management)
Easy Install은 config 하위 명령어를 통해 지속적인 설정을 지원합니다. 설정은 ei 실행 파일과 동일한 디렉토리에 있는 ei_config.json에 저장됩니다.
지원되는 설정 키 (Supported Configuration Keys):
proxy: GitHub 다운로드를 위한 기본 프록시 (github, gh-proxy, ghproxy, jsdelivr 등)
dir: 기본 설치 디렉토리
target: 기본 대상 플랫폼
timeout: 네트워크 요청 시간 초과(초 단위) (기본값: 600)
retry: 실패한 다운로드에 대한 재시도 횟수 (기본값: 3)
strip: 실행 파일에서 디버그 심볼 제거 (기본값: false)
upx: UPX로 실행 파일 압축 (기본값: false)
조용한 모드 (Quiet Mode)
설치 중 모든 출력 메시지를 억제합니다:
ei https://github.com/ahaoboy/mujs-build --quiet
...
셸 완성 기능 (Shell Completions)
선호하는 셸에 대한 완성 스크립트를 생성합니다:
ei completions bash > ~/.local/share/bash-completion/completions/ei
...
지원되는 셸 (Supported Shells):
- bash
- zsh
- fish
- powershell
- elvish
완성 스크립트를 생성한 후, 터미널을 다시 시작하거나 완성 파일을 소싱(source)하여 ei 명령어에 대한 탭 완성을 활성화하세요.
설정 파일 위치:
ei_config.json 파일은 ei 실행 파일과 같은 디렉토리에 생성됩니다.
ei config 명령어를 사용할 때만 생성됩니다.
- 파일이 존재하지만 손상된 경우, 기본값으로 자동 초기화됩니다.
Manifest 기반 설치
ei "https://github.com/ahaoboy/mujs-build/releases/download/v0.0.4/dist-manifest.json"
...
사용 사례
cargo-binstall 대체하기
Easy Install은 더 많은 유연성을 가진 cargo-binstall의 드롭인(drop-in) 대체재로 사용될 수 있습니다:
ei cargo-bins/cargo-binstall -d ~/.cargo/bin
...
배포 매니페스트
여러 파일을 포함하는 복잡한 패키지의 경우, dist-manifest.json 파일을 생성하여 구조와 에셋을 정의할 수 있습니다. 이는 cargo-dist-schema 형식을 따릅니다.
예시: mujs
일반적인 mujs 릴리스에는 여러 파일이 포함됩니다:
.
├── libmujs.a
├── libmujs.o
...
해당 dist-manifest.json은 어떤 파일을 설치할지 정의합니다:
{
"mujs-aarch64-apple-darwin.tar.gz": {
"name": "mujs-aarch64-apple-darwin.tar.gz",
...
예시: Zig
GitHub 외부에 호스팅된 도구의 경우, 직접 다운로드 URL을 지정할 수 있습니다:
{
"artifacts": {
"https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz": {
...
지원 플랫폼
- Windows (x86_64, aarch64)
- Linux (x86_64, aarch64, musl)
- macOS (x86_64, aarch64/Apple Silicon)
기본 설치 위치
바이너리는 기본적으로 ~/.ei에 설치되며, 이는 설치 중에 PATH에 자동으로 추가됩니다.
유사 도구
- eget - GitHub에서 미리 빌드된 바이너리를 쉽게 설치
- ubi - 범용 바이너리 설치기 (Universal Binary Installer)
- dra - GitHub에서 릴리스 에셋 다운로드
라이선스
MIT
기여
기여는 환영합니다! 언제든지 Pull Request를 제출해 주세요.
저장소
https://github.com/easy-install/easy-install