Как установить менеджер версий asdf в Ubuntu
asdf — это инструмент командной строки для управления разными версиями среды выполнения на нескольких языках программирования. Он объединяет все среды в одном файле конфигурации и использует структуру плагинов для управления ими. Например, вы можете установить Node.js , но затем использовать asdf в качестве центрального репозитория плагинов , который может содержать как официальные плагины, так и те, которые поддерживаются сообществом.
В этой статье мы установим ядро asdf и подключаемый плагин Node.js с зависимостями сборки. Это минимум, необходимый для работы. Затем мы установим Node.js и попробуем управлять версиями.
Требования
Для работы нам понадобится сервер (мы используем Ubuntu, настроенный по этой статье) с пользователем с привилегиями sudo и включенным брандмауэром.
1: Установка ядра asdf
asdf предусматривает установку ядра, которое само по себе не имеет функционала. Ядро asdf включает отдельные плагины, специфичные для языка программирования или программы. Чаще всего данный инструмент используется для установки и управления несколькими версиями языка программирования. Рекомендуем загрузить ядро asdf с помощью git — эта система устанавливается вместе с Ubuntu. Для получения последней версии asdf нужно клонировать последнюю ветку из репозитория asdf:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf —branch v0.10.2
Установка asdf зависит от комбинации типа оболочки и метода ее загрузки. По умолчанию Ubuntu использует оболочку Bash, которая использует файл ~/.bashrc для конфигурации. Чтобы разрешить использование команды asdf, нужно добавить в этот файл следующую строку:
echo «. $HOME/.asdf/asdf.sh» >> ~/.bashrc
Активируйте внесённые изменения:
Примечание. Если вы используете ZSH вместо Bash, вы можете добавить ту же строку, но в файл ~/.zshrc.
Теперь, когда ядро установлено, можно устанавливать плагин.
2: Установка плагина Node.js и управление зависимостями
Важно отметить: установка плагина Node.js для asdf — это не установка самого Node.js. Мы сделаем это позже. Как упоминалось ранее, минимальные требования для установки asdf — это ядро asdf и как минимум один подключаемый плагин. После установки этого плагина вы можете использовать его для установки среды выполнения, с которой он работает.
Каждый плагин asdf поддерживается отдельно. Большинство плагинов поддерживаются сообществом, но существуют и те, которые поддерживает команда разработчиков asdf. У каждого плагина asdf есть свой собственный репозиторий и зависимости, которые необходимо установить. Вам следует проверить каждый репозиторий плагинов, например репозиторий плагинов Node.js . Этот плагин официально поддерживается командой asdf.
Установить плагин можно с помощью команды:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Зависимости этого плагина Node.js указаны в файле “README”, раздел “Use” . В этом разделе зависимости связываются с разделом официальных репозиториев Node.js по сборке Node.js . Это нужно сделать вручную, потому что asdf ориентирован на несколько операционных систем, а для каждой из них существуют свои зависимости и методы их установки. Также зависимости меняются от плагина к плагину. Чтобы установить необходимые зависимости, начните с обновления вашего исходного индекса apt:
sudo apt update
Затем можно установить зависимости:
sudo apt install python3 g++ make python3-pip
Для плагина Node.js команда выбирает предварительно скомпилированные двоичные файлы, либо компилирует двоичные файлы из исходного кода (зависит от версии, которую вы устанавливаете). Если вы выберете версию, которая требует компиляции из исходного кода, то вам понадобятся вышеупомянутые зависимости.
После успешной установки плагина можно переходить к установке Node.js.
3: Установка Node.js
Вы можете установить несколько версий Node.js, выбрав последнюю или любую предыдущую версию. Для установки последней версии Node.js нужно ввести:
asdf install nodejs latest
Trying to update node-build. ok Downloading node-v18.10.0-linux-x64.tar.gz. -> https://nodejs.org/dist/v18.10.0/node-v18.10.0-linux-x64.tar.gz Installing node-v18.10.0-linux-x64. Installed node-v18.10.0-linux-x64 to /home/8host/.asdf/installs/nodejs/18.10.0
Установка последней версии — это ярлык, предоставляемый asdf, это не специальная версия. asdf идентифицирует и устанавливает версии по их точным номерам. Для установки определенной версии Node.js, введите:
asdf install nodejs 16.16.0
Trying to update node-build. ok Downloading node-v16.16.0-linux-x64.tar.gz. -> https://nodejs.org/dist/v16.16.0/node-v16.16.0-linux-x64.tar.gz Installing node-v16.16.0-linux-x64. Installed node-v16.16.0-linux-x64 to /home/8host/.asdf/installs/nodejs/16.16.0
После установки двух версий проверить все имеющиеся у вас версии можно следующим образом:
asdf list nodejs
16.16.0 18.10.0\
Если вы захотите удалить какую-то из версий, это можно сделать с помощью команды uninstall, указав версию Node.js:
asdf uninstall nodejs 16.16.0
Node.js установлен, теперь можно выбрать версию, которую вы хотите активировать.
4: Выбор активной версии Node.js
asdf может установить версию Node.js на трех разных уровнях: локальном, глобальном и уровне оболочки. Для установки версии Node.js только для рабочего каталога вашего проекта выполните следующую команду:
asdf local nodejs latest
Установка текущей версии на глобальном уровне действует на уровне пользователя вашей системы:
asdf global nodejs latest
Для установки версии только для текущего сеанса оболочки введите:
asdf shell nodejs latest
Теперь мы полностью установили Node.js с помощью asdf и научились переключаться на нужную вам версию и в нужной вам области.
Подводим итоги
В этой статье мы установили ядро asdf, подключаемый модуль asdf Node.js, а потом и сам Node.js. Инструмент asdf позволяет установить несколько версий среды выполнения, и вы можете выбирать версию на разных уровнях — от глобальной среды до рабочего каталога проекта.
asdf
С его помощью можно заменить nvm , rbenv , pyenv , gvm и ещё массу менеджеров версий одним общим.
Фиксировать версии можно глобально или на каждый проект.
Глобальная фиксация версий происходит в файле ~/.tool-versions и выполняется с помощью команды:
asdf global plugin-name version
asdf global rust 1.62.1
Наибольшей ценностью обладает возможность фиксации версий для каждого отдельного проекта.
В этом случае файл .tool-versions располагается в корне проекта и версионируется вместе с исходным кодом.
Локальные для проекта версии фиксируются с помощью команды:
asdf local plugin-name version
asdf local golang 1.16.15
Это даёт возможность всем членам команды автоматически переключаться на конкретную версию рантайма для каждого конкретного проекта.
В моей команде версии рантаймов в локальном окружении каждого разработчика однозначно совпадают с версиями на staging — и production -окружениях.
Это позволяет исключить любые проблемы с обратной совместимостью или использованием в коде проекта недоступных возможностей новых версий языка.
Ссылки
asdf
Нет, это не просто кто-то уронил четыре пальца на клавиатуру!
В предыдущей статье я писал про pyenv — отличный инструмент для установки различных версий интерпретатора. Для питонистов pyenv вполне достаточно, но люди, пишущие на нескольких языках, могут обнаружить себя в ситуации, когда им приходится держать установленными pyenv , rvm / rbenv , nvm , rustup , gvm или ещё какие-нибудь менеджеры версий для разных языков программирования. При этом, конечно же, у каждого инструмента свой синтаксис команд, свои тонкости по работе с ним, свои зависимости. Если установить это всё сразу в свой шелл, то боюсь представить, что будет с переменной $PATH (она будет очень толстой). Потенциально это может замедлить работу шелла вообще. Но все эти проблемы остались в прошлом — встречайте asdf , универсальный менеджер версий!
asdf , так же как и pyenv , написан на чистом bash . Это означает, что инструмент отлично работает под Linux и MacOS, но, к сожалению, никак не работает на Windows (ну, разве что в WSL). asdf сам по себе не требует никаких внешних зависимостей, кроме некоторых базовых утилит, типа git и curl , которые и так наверняка у вас есть. Эти утилиты нужны для установки плагинов.
Вокруг asdf выстроилась огромная экосистема плагинов. Именно благодаря плагинам asdf и именует себя универсальным менеджером версий.
- не нужно учить диалекты команд для каждой отдельной утилиты, чтобы делать типовые действия;
- умеет управлять версиями всех мыслимых и немыслимых инструментов и языков программирования через плагины;
- можно настроить версии локально для определённой директории и asdf автоматически переключит версии инструментов при входе в неё;
- классное название — удобно печатать.
- у каждого плагина могут быть свои тонкости в плане настройки и свои зависимости, так что придётся читать инструкции, но, как правило, это единоразовые действия.
Установка
Установка во всех подробностях описана на официальном сайте. Глупо было бы пытаться описать установку лучше, чем на оф.сайте — лучше и не напишешь. Документация у asdf просто бомбическая. Есть варианты установки на Linux или MacOS (через brew ), описана настройка для всех популярных шеллов — bash , zsh и fish . Всё просто — выбираете вашу систему и шелл, и получаете команды по установке и настройке.
Обратите внимание, что для корректной работы asdf требует наличия git и curl . Если вдруг у вас в системе нет таких утилит, то инструкции по установке опять-таки можно найти на сайте asdf .
После установки перезапустите ваш шелл и проверьте установку:
$ asdf . "Late but latest" -- Rajinikanth
Если вы видите этот девиз asdf после справки по командам, то установка удалась, можно продолжать. Девиз в моём вольном переводе означает что-то типа «да, поздновато, но после нас подобных утилит уже не будет». Амбициозно, но я думаю, что asdf и правда в силах вытеснить с рынка все другие подобные утилиты, которые специфичны для одного языка.
Плагины
По умолчанию asdf поставляется без плагинов и содержит только базовую функциональность, такую как управление плагинами. asdf без плагинов по сути не делает ничего полезного. Чтобы управлять версиями чего-либо, нужно установить соответствующий плагин. Давайте запросим список доступных к установке плагинов:
$ asdf plugin list all
У меня вывелось аж 194 штуки. Список плагинов можно посмотреть и на сайте, вот здесь.
Есть плагины для всех популярных языков программирования:
- python ;
- nodejs ;
- rust ;
- java ;
- kotlin ;
- golang ;
- php ;
- ruby ;
- и, конечно же, для вашего любимого языка плагин тоже наверняка есть.
Кроме того, через asdf можно управлять версиями различных утилит, например:
- github-cli ;
- jq ;
- kubectl ;
- poetry .
И сервисов, например:
- postgres ;
- mysql ;
- mongodb ;
- redis .
Установка интересующего плагина выполняется следующим образом:
$ asdf plugin add
Рассмотрим работу с теми плагинами, с которыми мне доводилось работать.
Плагин для Python
Установим плагин для Python:
$ asdf plugin add python
asdf имеет очень логично организованный интерфейс командной строки. Запомните одно правило: если хотите просмотреть только установленные плагины или версии плагина, то делайте list , а если вообще все, то list all .
asdf plugin list all
asdf list all python
asdf plugin list
asdf list python
Выше мы уже смотрели список всех плагинов (через list all ), а теперь давайте просмотрим список установленных плагинов. Там должен быть python , мы ведь его только что установили:
$ asdf plugin list python
Отлично, плагин установлен! Давайте попросим asdf показать список доступных версий (хотим вообще все, поэтому list all ) для плагина python :
$ asdf list all python … 3.6-dev 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 3.6.10 3.7.0 3.7-dev 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.8.0 3.8-dev 3.8.1 3.8.2 3.9.0a6 3.9-dev …
Список я подсократил, но поверьте — он длинный. Там есть как все версии эталонного интерпретатора CPython, начиная с 2.1.3, так и альтернативные реализации Python — PyPy, IronPython, Jython, MicroPython и другие. Этот список очень напоминает подобный список из pyenv , и это не просто совпадение. Плагин asdf-python действительно под капотом использует pyenv .
В процессе установки asdf скачивает исходники Python и собирает интерпретатор из них. Это значит, что на машине придётся иметь установленные инструменты для сборки кода на C/C++ и все нужные библиотеки-зависимости. Список зависимостей для всех ОС и дистрибутивов можно посмотреть здесь. Обязательно установите эти зависимости прежде чем пытаться устанавливать какой-либо интерпретатор.
Установка конкретной версии интерпретатора происходит вот так:
$ asdf install python 3.7.7 $ asdf install python 3.8.2
Давайте запросим список установленных версий ( list ):
$ asdf list python 3.7.7 3.8.2
Давайте назначим глобальной ту версию Python, которую собираемся использовать чаще всего. Она будет использоваться по умолчанию, когда не найдена никакая локальная версия. Здесь всё работает так же, как и в pyenv , но даже если вы никогда им не пользовались, то я надеюсь, что дальше по примеру станет понятно как работают глобальные и локальные версии:
$ asdf global python 3.8.2 $ python -V Python 3.8.2
Если вам интересно, как работает asdf , то:
$ which python /home/br0ke/.asdf/shims/python
Опять же, он использует тот же принцип, что и pyenv — создает небольшие исполняемые файлы (shims) для всех команд, которыми собирается управлять. Эти шимы вызывают asdf и он принимает решение о том, какую версию программы нужно вызвать.
Давайте для демонстрации работы локальных версий создадим директорию, и представим, что в ней мы собираемся разрабатывать проект под определенной версией Python, отличной от глобальной:
$ mkdir my_project $ cd my_project
Установим локальную версию:
$ asdf local python 3.7.7 $ python -V Python 3.7.7
В этой директории asdf создал специальный файл .tool-versions (аналог .python-version из pyenv ):
$ cat .tool-versions python 3.7.7
Этот файл содержит версии всех утилит, которые мы настроили для директории, т.е. потенциально тут может быть не только Python. Как правило, этот файл не нужно добавлять в систему контроля версий (git), особенно если asdf в рамках проекта пользуетесь только вы.
asdf также вместо универсального .tool-versions умеет использовать файлы, специфичные для отдельных языков или инструментов, такие как .python-version ( pyenv ), .ruby-version ( rbenv ), .nvmrc и .node-version ( nodejs ) и другие. Это сделано для того, чтобы облегчить миграцию на asdf с других менеджеров версий. По умолчанию эта функциональность выключена, а включатся созданием файла ~/.asdfrc со следующим содержимым:
legacy_version_file = yes
При выходе из директории локально настроенная версия перестанет действовать и версия вернётся на глобальную:
$ cd .. $ python -V Python 3.8.2
По-моему, это очень удобно. В целом asdf работает так же как pyenv и многие другие менеджеры версий — в конце концов, они вдохновлены одной идеей. Только asdf вдохновился сильнее.
Допустим, что нужда прижала вас установить IPython:
$ pip install ipython
Чтобы IPython можно было запускать, нужно попросить asdf пересоздать шимы:
$ asdf reshim $ ipython Python 3.8.2 (default, May 10 2020, 22:17:35) Type 'copyright', 'credits' or 'license' for more information IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: print("asdf is awesome!")
Плагин для Node.js
Установим плагин для Node.js:
$ asdf plugin add nodejs
Запросим список доступных версий:
$ asdf list all nodejs … 12.16.3 13.0.0 13.0.1 13.1.0 13.2.0 13.3.0 13.4.0 13.5.0 13.6.0 13.7.0 13.8.0 13.9.0 13.10.0 13.10.1 13.11.0 13.12.0 13.13.0 13.14.0 14.0.0 14.1.0 14.2.0
Все инструменты устанавливаются по-разному, и плагины это учитывают. Например, Python собирался из исходников, а Node.js устанавливается простым скачиванием бинарника, так что никакие зависимости для сборки не нужны.
Но у плагина Node.js тоже есть свои тонкости. Чтобы установить версию интерпретатора Node.js, нужно добавить ключи мейнтейнеров проекта Node.js в систему. Это нужно, чтобы при установке плагин asdf-nodejs проверил цифровую подпись бинарника (в системе должна быть установлена утилита установлена gpg ):
$ bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring
Теперь установим последнюю на данный момент версию Node.js:
$ asdf install nodejs 14.2.0
Назначим её глобальной и проверим работу:
$ asdf global nodejs 14.2.0 $ node Welcome to Node.js v14.2.0. Type ".help" for more information. > console.log("asdf is super awesome!") asdf is super awesome! undefined
Давайте вернемся в директорию из предыдущего примера и добавим там ещё и локальную версию Node.js:
$ cd my_project $ asdf local nodejs 14.2.0
Теперь в .tool-versions лежит следующее содержимое:
$ cat .tool-versions python 3.7.7 nodejs 14.2.0
Заключение
asdf незаменим, если вы программируете более чем на одном языке. Крайне рекомендую присмотреться к нему, даже если сейчас вы программируете только на одном языке. Лучше выбирать инструменты на вырост.
Не бойтесь пробовать устанавливать разные плагины, только обязательно читайте инструкции к ним.
Обязательно подпишитесь на уведомления о новых постах в блоге, чтобы ничего не пропустить!
Дополнительное чтение
- официальный сайт;
- репозиторий проекта на GitHub;
- Python-плагин;
- Node.js-плагин.
Что означает ASDF?
Вы ищете значения ASDF? На следующем изображении вы можете увидеть основные определения ASDF. При желании вы также можете загрузить файл изображения для печати или поделиться им со своим другом через Facebook, Twitter, Pinterest, Google и т. Д. Чтобы увидеть все значения ASDF, пожалуйста, прокрутите вниз. Полный список определений приведен в таблице ниже в алфавитном порядке.
Основные значения ASDF
На следующем изображении представлены наиболее часто используемые значения ASDF. Вы можете записать файл изображения в формате PNG для автономного использования или отправить его своим друзьям по электронной почте.Если вы являетесь веб-мастером некоммерческого веб-сайта, пожалуйста, не стесняйтесь публиковать изображение определений ASDF на вашем веб-сайте.
Все определения ASDF
Как упомянуто выше, вы увидите все значения ASDF в следующей таблице. Пожалуйста, знайте, что все определения перечислены в алфавитном порядке.Вы можете щелкнуть ссылки справа, чтобы увидеть подробную информацию о каждом определении, включая определения на английском и вашем местном языке.
Акроним | Определение |
---|---|
ASDF | Ассоциация синхронных данных форматов |
ASDF | Атом решения демо крепеж |
ASDF | Воздушные силы самообороны |
ASDF | Действия отряда детектив силы |
ASDF | Другой механизм определения системы |
ASDF | Злой, угрюмый, подавлен и расстроен |
ASDF | Переменный синхронный двойной огонь |
ASDF | Силы обороны Алабама государство |
ASDF | Силы обороны штата Аляска |
ASDF | Средняя летняя ежедневно поток |
ASDF | Средняя площадь разница функция |
ASDF | Структура развития передовые решения |
ASDF | Федерация обсуждает Аргентинской школ |
ASDF | Фонд развития африканского сценария |
ASDF | Фонд социального развития АСЕАН |