TOOCS.asdf
TOOCS / Ansible Role: TOOCS.asdf
- Installs
asdf - For
zshusers, sets up~/.zloginfor a ready-to-use experience - Uses
asdfto install the languages of your choice (limited support, see Install languages)
TOOCS?
TOOCS - The Opinionated One-Click Setups are a set of tools / ansible roles designed to setup a system in one click. They are a simple, reliable, way to setup a given tool. You can use them as is, or, inspecting their code, as a tutorial to follow step by step.
They are, as their name suggests, opinionated: while they guarantee to setup the given tool in one click, they do not guarantee consistency in how they achieve it, new releases might introduce breaking changes.
Read the code and make sure you understand what's happening!
Table of Contents
Requirements
This role is only working on MacOSX & Ubuntu/Debian.
Post install - Shell configuration
Zsh users
When using this TOOCS on a user whose shell is zsh, the TOOCS will automatically configure the ~/.zlogin file. No further action is required.
If you are not using a framework, such as oh-my-zsh, or if on starting your shell you get an error message like 'command not found: compinit', then add this line before the ones added by the TOOCS in your ~/.zlogin file:
autoload -Uz compinit && compinit
Non Zsh users
For non-zsh users, some manual setup is required. Depending on your OS and shell, run the following:
Bash on Ubuntu (and other Linux distros)
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrcBash on macOS
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profileFish
echo 'source ~/.asdf/asdf.fish' >> ~/.config/fish/config.fish mkdir -p ~/.config/fish/completions; and cp ~/.asdf/completions/asdf.fish ~/.config/fish/completions
Restart your shell so that PATH changes take effect. (Opening a new terminal tab will usually do it.)
Also if you're having issues with it not detecting the shims you've installed it's most-likely due to the sourcing of above asdf.bash or asdf.fish not being at the bottom of your ~/.bash_profile, ~/.zshrc, or ~/.config/fish/config.fish. It needs to be sourced after you've set your $PATH.
Source: official 'asdf' setup
Install Languages
After installing asdf, this TOOCS can automatically install different versions of the languages of your choice. It will take care of installing the prerequisite dependencies for each language, and install the different versions, usually prefering to compile from source rather than downloading the pre-compiled binaries.
The variable languages_to_install is a list containing all the languages to install, along with the specific versions.
To install a language, add an entry to the list in
languages_to_installThe entry must have the form:
- LANG: - x.x.x - y.y.yWhere
LANGis the language name, andx.x.x / y.y.yare version numbers.The list of
languages_to_installis ordered:languages_to_install: - erlang: - 21.1.14 - 20.3.8.9 - elixir: - 1.7.4In this example, both versions of
erlangwill be installed beforeelixiris installed. This is convenient sinceelixirrequireserlangto be compiled.For each language, the list of versions to install is also ordered.
- The first version of the list will be set as
global - For languages supporting multiple simultaneous
global, all versions from the list, in order, will be set as global (ex: python)
languages_to_install: - erlang: - 21.1.14 - 20.3.8.9 - python: # Support for multiple `global` - 3.7.0 - 2.6.6 - 2.7.15In this example, after running the TOOCS, the shell will be configured as follow:
- The
erlcommand (erlang) will point to version21.1.14 - The
pythoncommand will point to version3.7.0 pythonsupporting multipleglobal, the following commands will also be made available:python3.7/pip3.7python2.7/pip2.7python2.6/pip2.6python3/pip3=> Latestpython3version:python3.7/pip3.7python2/pip2=> Latestpython2version:python2.7/pip2.7
- The first version of the list will be set as
Supported Languages
- Python
- Support for multiple
globalversions - On Debian stretch (and Ubuntu bionic), only python versions
>= 2.7.13and>= 3.5.3can be installed automatically. Earlier versions can later be manually installed, but it needs a workaround at the moment. See: Pyenv - Common Build Problems - OpenSSL
- Support for multiple
- Erlang
- Compiled with documentation but no
jinterface
- Compiled with documentation but no
- Elixir
- Requires
erlang - Explicitely compiled from source
- **/!\ Make sure the current version of
erlangis supported by the version ofelixirto install /!\**- Ex:
elixir v1.6.6is not compatible witherlang 21! To compileelixir v1.6.6,erlang 20must be used.
- Ex:
- Requires
Role Variables
asdf_versionasdfversion to install- Default:
v0.6.2
skip_shell_setup- If
Truewill only installasdfwithout setting up the shell - Default:
False
- If
languages_to_install- List of languages, and versions, to install using
asdf. See Install Languages - Default:
[]
- List of languages, and versions, to install using
Example Playbook
- hosts: sandbox
tasks:
- include_role:
name: TOOCS.asdf
# OR
- hosts: sandbox
tasks:
- include_role:
name: TOOCS.asdf
vars:
asdf_version: v0.6.1
skip_shell_setup: True
# OR
- hosts: sandbox
tasks:
- include_role:
name: TOOCS.asdf
vars:
languages_to_install:
- python:
- 3.7.0
- 2.7.15
- 2.6.6
- erlang:
- 20.3.8.9
- 21.1.4
- elixir:
- 1.7.4
- 1.6.6
License
MIT
Author Information
Follow me on Twitter: @ThisIsFlorianK
Find out more about my work: Florian Kempenich - Personal Website
