View

asdf

rura6502 2023. 12. 9. 00:34

https://asdf-vm.com/guide/introduction.html

Guide

What is asdf?

Introduction

asdf는 툴 버전 매니저이다. 모든 툴 버전 정의는 하나의 파일(.tool-versions) 파일에 포함된다. 사용자는 깃 레포에서 이 것을 확인하여 팀에게 공유하고, 모든 팀원들이 정확하게 같은 버전의 툴을 사용할 수 있도록 보증할 수 있다.

오래된 작업 방식은 여러 CLI 버전 매니저, 각각의 구분된 API, 설정파일, 구현(ex. @PATH 조작, shims, 환경변수 등등)을 요구했다. asdf는 개발 워크플로우를 단순화하기위해 싱글 인터페이스, 환경설정을 제공하고 간단한 플러그인 인터페이스를 통해 모든 도구와 런타임을 확장할 수 있도록 제공한다.

How It Works

asdf는 사용자의 쉘 설정에 셋업되면 특정 툴들을 관리하기위해 플러그인이 설치된다. 플러그인을 통해 툴이 설치되면 그 각각의 툴을 위한 shims를 가지는 실행가능한 파일이 생성된다. 사용자는 실행파일을 실행하면 asdf가 .tool-versions에 설정된 툴들의 버전을 구분해주는 shim이 실제로 실행된다.

Related Projects

nvm / n / rbenv etc

nvm, n, rbenv와 같은 툴들은 이들 툴들에 의해 설치된 실행파일들을 위한 shim을 생성하는 쉘 스크립트이다.
asdf는 매우 유사하고 이러한 툴/런타임 버전 관리의 영역들과 경쟁하도록 만들어졌다. asdf의 다른점은 툴/런타임 별 매니저를 필요에따라 삭제할 수 있고, 레포의 *-version 파일 별로, 매니저별 다른 명령어들도 필요에 따라 삭제할 수 있는 플러그인 시스템이다.

direvn

현재 디렉토리에 따라 환경변수를 로드하고 언로드할 수 잇는 새로운 기능으로 기존 쉘을 보강한다.

asdf는 환경변수를 관리하지 않는다. 그러나 asdf-direnv 플러그인을 사용해서 direvn의 행위를 asdf와 통합할 수 있다.

Homebrew

The Missing Package Manager for macOS (or Linux)

Homebrew는 사용자의 패키지와 업스트림 의존성(upstream dependencies)을 관리한다. asdf는 업스트림 의존성을 관리하지 않는다. 패지키관리자가 아니고 의존성 리스트를 작게 유지하려고 노력하기 때문에 그것은 사용자가 해야한다.

NixOS

Nix는 패키지 관리와 시스템 설정에 unique approach를 가지고 있는 도구

NixOS는 각각의 툴에 대한 의존성 트리 전체 패키지의 정확한 버전을 관리함으로써 환경을 truly하게 재연하는 것을 목표로 하는 툴이다. 몇몇 기능들은 asdf가 하지 못한다. NixOS는 자체 프로그래밍 언어, 많은 CLI tools, 6만개 이상의 패키지 컬렉션으로 동작한다.
하지만 asdf는 upstream dependency들을 관리하지않으며 패키지 매니저가 아니다.

Why use asdf?

asdf는 플러그인 시스템을 통해 많은 도구들로 팀들이 정확하게 같은 버전의 툴을 사용하는 것을 보증하고 사용자의 쉘 설정에포함되는 단일 쉘 스크립트의 단순함과 친숙함을 제공한다.

Getting Started

Introduction

asdf 설치본은 아래 항목을 포함하고 있다.

  1. 디펜던시 설치
  2. asdf core 다운로드
  3. asdf 설치
  4. 사용자가 관리 하고자하는 각각의 툴, 런타임을 위한 플러그인 설치본
  5. 툴, 런타임 버전 설치본
  6. .tool-versions 설정 파일들을 통한 글로벌/프로젝트 버전 관리 설정

1. Install Dependencies

asdf 는 주로 git과 curl 을 요구한다. 사용자의 패키지 매니저를 구동하기 위해 아래 전체 커맨트 리스트가 있다.(몇몇은 이후 단계에서 자동으로 설치될 수 있다.)

사용자의 시스템 설정에 따라 sudo 가 필요할 수 있다.

2. Download asdf

Official Donwload

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1

Community Supported Download Methods

공식 git을 이용하는 것을 강력 추천한다.

  • Howbrew : brew install asdf
  • Pacman : git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si 또는 선호에 따라 AUR helper

3. Install asdf

여기에 구성에 영향을 미치는 쉘, OS, 설치 방법에 대한 다른 조합들이 있다. 너의 시스템과 가장 매칭되는 selection을 expand해라.

  • 공식문서 참고

asdf는 사용자의 프레임워크(oh-my-zsh 등)을 source하고, $PATH를 설정한 후 source 해야한다.

Warninig
macOS에서 Bash, Zsh 쉘은 시작되면서 자동으로 path_helper라는 유틸리티를 호출한다. path_helperPATH(and MANPATH)를 rearrange item 해서 특정 순서가 요구되는 툴들의 동작에 inconsistent를 일으킬 수 있다. 이 문제를 해결하기 위해서 맥상의 asdf는 기본적으로 PATH 엔트리들의 가장 앞쪽에(가장 높은 우선위를 가지기 위해) 강제로 추가된다. 이것은 ASDF_FORCE_PREPEND 변수를 통해 설정 가능하다.

PATH의 변경을 적용하기 위해 쉘을 재시작해라. 일반적으로 새로운 탭을 열면 된다.

Core Installation Complete!

asdf 코어 설치가 완료되었다.

asdf는 플러그인을 설치하고 툴을 설치하고 그 툴의 버전을 관리해야 유용하게 사용할 수 있다. 계속되는 가이드는 이것을 어떻게 하는지 알려준다.

4. Install a Plugin

시연을 위해 asdf-nodejs를 통해 nodejs를 설치&설정할 것이다.

Plugin Dependencies

각각의 플러그인들은 종속성이 있기 때문에 우리는 그 종속성이 리스팅되어있어야 하는 플러그인 레포를 체크해야 한다. asdf-nodesjs는 여기

  • Debian apt-get install dirmngr gpg curl gawk
  • CentOS/ Rocky Linux/ AlmaLinux yum install gnupg2 curl gawk
  • macOS brew install gpg gawk

몇몇 플러그인들읜 ponst-install hooks를 가지고 있기 때문에 디펜던시를 먼저 설치해야 한다.

Install the Plugin

asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git

5. Install a Version

이제 우리는 nodejs 플러그인을 가지고 있고 툴의 버전을 설치할 수 있다.
asdf list all nodejs 명령어로 사용가능한 버전을 볼 수 있고 asdf list all nodejs 14로 버전의 서브셋 목록을 볼 수 있다.
latest로 가능한 버전을 볼수도 있다.

asdf install nodejs latest

Note
asdf는 정확한 버전을 강제한다ㅣ latest는 실행 시 가장 최신의 버전을 resolve하는 helper 이다.

6. Set a Version

asdf는 $HOME 디렉토리부터 현재 워킹 디렉토리까지의 모든 .tool-versions 파일에 정의된 툴의 버전을 lookup 한다. lookup은 asdf 관리 도구가 를 실행될 때 just-in-time으로 실행한다.

WARNING
툴의 실행을 위한 version listed 행위가 없으면 에러가 난다. asdf current 는 현재 사용자의 디렉터리로부터 툴의 버전이 resolution인지, absent인지 보여주어 사용자는 어떤 툴이 실행에 실패할 것인지 확인할 수 있다.

Global

기본 전역 설정은 $HOME/.tool-versions에 관리된다. 아래와 같이 전역 버전을 설정할 수 있다.

asdf global nodejs latest

$HOME/.tool-versiosn는 아래와 같이 볼 수 있다.

nodejs 16.5.0

몇몇 OS는 파이썬같이 asdf가 아니라 시스템에 의해 관리되는 툴이 이미 설치되어 있을 수 있다. 사용자는 asdf에게 다시 시스템에 의해 관리되도록 설정해야한다. Versions reference section이 도움이 가이드해줄 것이다.

Local

로컬 버전은 $PWD/.tool-versions 파일(사용자의 현재 working directory)에 정의된다. 대부분 프로젝트의 깃 레포가 될 수 있다. 사용자가 원하는 디렉토리에서 실행한다

asdf local nodejs latest

$PWD/.tool-versions 는 아래와 같이 설정된다

nodejs 16.5.0

Using Existing Tool Version Files

asdf는 다른 오래된 버전 매니저의 버전 파일을 마이그레이션하는 것을 지원한다. rbenv.ruby-version와 같은 경우이다. 이러한 지원은 플러그인 베이스로 지원된다.
asdf-nodejs.nvmrc, .node-version을 통해 지원된다. 이 기능을 활성화하기 위해 사용자의 asdf configuration file인 $HOME/.asdfrc 파일을 아래와 같이 수정하여야 한다.

legacy_version_file = yes

configuration 레퍼런스 페이지를 통해 더 많은 설정을 확인하여라

Guide Complete!

asdf의 Getting Started 가이드가 끝났다. 너는 이제 프로젝트의 nodejs의 버전을 관리할 수 있다. 너의 프로젝트의 각각의 툴 타입을 위해 다음 유사한 단계를 따라해라.

asdf, asdf --help를 실행해서 명령어를 확인하고 더 많은 명령어와 친숙해져라.

Usage

Core

asdf 핵심 명령어 목록은 다소 작지만 많은 워크플로우를 용이하게 할 수 있다.

Installation & Setup

Getting Started 가이드를 참고하라

Exsec

asdf exec <command> [args...]

현재 버전의 shim 명령어를 실행

Env

asdf env <command> [util]

Info

asdf info

OS, Shell, asdf debug information을 출력하기 위한 헬퍼 커맨드. 버그 리포트를 만들 때 이 명령어의 결과를 공유

Reshim

asdf reshim <name> <version>

이 명령어는 패키지의 현재 버전의 shim들을 재생성한다. 기본적으로 shim은 툴을 설치하는 동안 플로그인에 의해 생성된다. npm CLI같은 몇몇 툴들은 실행가능한 글로벌 설치본을 제공한다. 예를들어 npm install -g yarn으로 Yarn을 설치하는 것이다. 이 실행가능한 명령어는 플러그인 라이프사이클에 의해 설치되지 않기 떄문에 이를 위한 shim이 아직까지는 존재하지 않는다. asdf reshum nodejs <version>yarn 처럼 어떤 새로운 실행가능 명령 shim을 강제로 recalculation 한다.

Shim-versions

asdf shum-versions <command>

명령어를 위한 shim을 제공하는 플러그인과 버전 목록을 리스팅한다.

예를들어 Node.js는 node, npm 두 명령어를 설치한다. asdf-nodejs로 더 많은 툴의 버전이 설치되어있다면 shim-versions는 이렇게 리턴될 수 있다.

$ asdf shim-versions node
nodejs 14.8.0
nodejs 14.17.3
nodejs 16.5.0


$ asdf shim-versions npm
nodejs 14.8.0
nodejs 14.17.3
nodejs 16.5.0

Update

asdf plugin update --all

만약 사사용자가 특정 패키지의 업데이트를 원하면 아래와 같이 하면 된다.

asdf plugin update <name>
# asdf plugin update erlang 

이 update 명령어는 플러그인 레포지터리의 default branch of the origin 의 가장 최근 커밋을 가져온다. 버전이 적용된 플러그인과 업데이는 현재 개발중이다.

Remove

asdf plugin remove <name>

플러그인을 지우는 것은 플러그인에 의해 만들어진 모든 툴의 설치본을 지운다. 이것은 툴의 많은 미사용 버전을 cleaning/pruning하기 위한 간편한 방법이다.

Syncing the asdf Short-name Repository

short-name repo는 사용자의 로컬 머신과 싱크되고 주기적으로 refresh 된다. 싱크를 확인하는 방법은 다음과 같다.

  • 싱크 이벤트를 명렁어로 트리거한다.
    • asdf plugin add <name>
    • asdf plugin list all
  • disable_plugin_short_name_repositoryyes로 설정되어있다면 동기화가 중단된다. 더 많은 정보는 asdf config docs를 참고해라.
  • X분 동안 동기화가 이루어지지 않았다면, 동기화가 발생한다.
    • X는 기본 60 이지만 .asdfrcplugin_repository_last_check_duration 옵션에서 설정할 수 있다. asdf config docs를 참고해라.

Versions

Install Version

asdf install <name> <version>
# asdf install erlang 17.3

플러그인이 소스로부터의 컴파일, 다운로드를 지원한다면

Share Link
reply