Skip to content

ElixirCL/machine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elixir Dev Machine en Debian 11

Un simple proyecto para documentar la configuración del ambiente para desarrollo con Elixir en una Raspberry Pi 4.

También servirá en su mayoria para cualquier Debian 11.

La idea es tener un entorno minimalista pero bonito, que tenga todas las herramientas necesarias para desarrollar proyectos con Elixir. Buscando una estética Synthwave/Cyberpunk.

El objetivo es tener un entorno que se pueda usar con el teclado lo más posible, evitando el uso de ratón (solo para uso en el navegador).

A menos que se especifique explícitamente, los contenidos de ésta obra están bajo una Licencia Creative Commons Atribución-No-Comercial-Compartir-Igual 4.0 Internacional Licencia Creative Commons. El código fuente está bajo la licencia MPLv2.

1. Componentes de Hardware

3. Instalación de DietPI

Para comenzar descargaremos la imagen de DietPI y utilizaremos Balena Etcher para grabarla en nuestra tarjeta SD.

La insertamos en nuestra Raspberry y comenzaremos el proceso de instalación. Idealmente siguiendo las guías de instalación y seguridad.

4. Config Inicial

4.1. Actualización

# sudo apt-get update
# sudo apt-get upgrade

4.2. Neovim

Nuestro editor de cabecera será NeoVim, para instalarlo debemos seguir su manual. Ésto solamente será para tener un editor de texto básico. Luego realizaremos una instalación y configuración más apropiada para la edición de código fuente.

# apt-get install neovim

4.3. Git

Nuestro control de versiones será con GIT. Luego podremos configurarlo apropiadamente. Por ahora nos servirá para descargar algunas herramientas.

# apt-get install git

También si se trabaja mucho con Github se puede instalar hub:

# apt install hub

4.4. Configuración de las Fuentes de Terminal

La terminal se verá mejor si se selecciona la fuente TerminusBold de 16x32. La terminal utiliza fuentes .psf (bitmap) y no permite .ttf (vectorial) ver más.

# dpkg-reconfigure console-setup

Ésto sólo aplica si vas a usar la pantalla directamente. Si te conectas por SSH a la raspberry entonces puede no ser necesario. De todas formas se puede configurar para mayor facilidad de lectura en pantallas con alta resolución.

4.5. SSH

SSH es necesario para acceder remotamente a nuestra máquina. DietPI ofrece dos alternativas. Dropbear y OpenSSH.

Dropbear es una alternativa ligera, pero carece de ciertas características como scp y sftp. Por lo que debemos instalarlas por separado mediante las herramientas de OpenSSH (solo cliente, no servidor).

# apt install openssh-client openssh-sftp-server

OpenSSH es la opción tradicional y más completa.

Se puede instalar mediante:

# dietpi-software install 105

o (para Debian 11)

# apt install openssh-server

Podremos verificar su funcionamiento mediante el comando:

# ss -tlpn

4.6. Banners

Lo primero que haremos es poner un login screen bien pulento, recordando los viejos tiempos de la BBS. Usaremos el siguiente ANSI:

https://16colo.rs/pack/rev0902/LD-EMENU.ANS

También usaremos un conversor de CP437 a UTF8

con unos pocos ajustes se debería ver así:

185677622 ef4ae111 076c 458b 80f7 a30fac21e193

[35m░░▓▌    ▐██▀[37m  [1;33m▄▄▄▄▄[0m [35m▀▀███▓▓▓▀▀▀▀▀█▓▀▀▀▀▀▀▀▀█▓▀▀▀▀▀▀▀▀▀▀▀▀▀▀▓▓██▀  █▓▓▓▓██▄ ▐▓░░
▓▓██▄▄▄[1;45m░[0;35m▀▐▌[37m  [1;33m▐█[0;33m▀▀[1;43m▀[47m▓▓[43m█[40m▄▄▄[0m [35m▀▀▀[37m [1;33;47m▓▓[43m█[0m [35m██[37m  [1;33;47m▓[43m█[40m▌[43m█[47m▓[40m▄[0;35m▀[37m  [1;33m▄[43m██[40m▐[47m▓[43m█[0m [1;33;43m█[47m▓[43m▓▓█[40m▄▄[0m [35m▀[1m▒[0;35m▄▄█▀   ▐██▓▓██▓▓[37m[0m
[35m  ▐██[1;45m░[0;35m▄▄[1;45m▓░[0;35m▓▄[37m [33m [1m▀▀[0m [33m▐[1;43m█▓▓[40m▀▀▀[43m███▓[0;33m [1;43m▓▓▒[0m [35m▓█░[33m [1m▐[43m▓▓[0m [1;33m▀[43m█▓[40m▄[47m▓▓[40m▀[0m [1;33m▐[43m▓▓[0m [1;33;43m▓▓▒[0m [1;33m▀▀[47m▓[43m█[40m▌[0;35m▐███▄  ▄███[1;45m░░░[0;35m███[37m[0m
[35m▄▄█▌▄██[1;45m░░░[0;35m███▄▄▌[37m [33m▐[1;43m▓▒[0;33m▌[37m [35m   ▄[37m  [33m▐[1;43m▒▒[0;33m▌[35m▐█[1m▒[0;35m▌[33m ▐[1;43m▒▒[0m  [33m▄[1;43m░▓▓[40m▄[0m [35m [1;33;43m░▒[40m▌[0m [1;33m▐[43m▒▒[0;33m▄▄[1;43m▒▓[40m▀[0;33m [35m▓█▀▄▓████[1;45m░░▓▓▓░[0;35m██
[1;45m░░[0;35m██▀[37m [33m▄▄▄▄▄[37m [35m▀██[37m  [33m█[1;43m░[0;33m█▀▀▀▀[35m▄▓░[37m [33m▓[1;43m░░[0;33m▌[35m▀ [33m▄▄▄▓[1;43m░░[0;33m▄█[1;43m░[0;33m▀[37m [33m▀[1;43m░░[0;33m▄[1;43m░░[0;33m▓[37m [33m▐[1;43m░░[0;33m▓[1;43m░░[0;33m▄▄[37m [35m▀██▀▀[37m [33m▄▄▄▄▄[37m [35m▀[1;45m░[0;35m█[1m▒[0;35m█[37m[0m
[35m██▓▓[37m [33m▓[1;43m▓▓▀[0;33m▀▀▀▌[35m▐█[37m  [33m███[37m [35m▓▀▀[37m [33m▄▄██▌▀▄███▀▀▀███▄[37m [35m▐▄ [37m [33m▀██▌▀▄▓██▌[37m [33m▀▀██▄[37m [35m░[37m [33m▐▀▀▀[1;43m▀▓▓[0;33m▓[37m [35m███▓[37m[0m
[35m▀[37m [33m▄[37m [35m [33m█[1;43m▒▒[0;33m [37m  [35m▄▄▐▓░[37m [33m▐[1;43m░░[0;33m▓▄▄███▀▀▐█[1;43m  [0;33m▀[37m[3C[33m▄▄ ▀██▓ [35m▓█[37m[3C[33m▀▀███▀▀[35m ▓▌[37m [33m [1;43m░░[0;33m█[37m [35m▓▄▄[37m  [33m [1;43m▒▒[0;33m█[37m  [33m▄[37m [35m░[37m[0m
 [1;33;43m▄[0;33m▌[35m░[37m [33m▐[1;43m░░[0;33m▌[37m [35m▐[1m▒[0;35m███▌  [33m▀███▀▀▄▄███[1;43m░░[0;33m▄ [35m░[33m [1;43m░[0;33m▌ ▀[37m [33m▐█[1;43m░[0;33m▌[35m░[37m [33m▄▄███[1;43m░░[0;33m▄▄[35m ▀▀  [1;33m▐[43m▓░[0;33m▌[35m▐██▌[33m ▐[1;43m░░[0;33m▌[35m░[37m [33m▐[1;43m░[0m
 [1;33;43m▓▌[0;33m▄▄▄▀██▄▄▄[37m [35m▀▀▀[37m  [33m▄▄▄█[1;43m░░[0;33m▀▀[37m[4C[33m▀[1;43m░▓[0;33m  ▀█▄▄▄[1;43m░░[0;33m▀ ▄█▀▀[37m[5C[33m▀▀███▄▄▄[1;43m░░[0;33m█[37m [35m▀[37m [33m▄▄▄█[1;43m░[0;33m▀▄▄▄[1;43m░▓[0m
 [1;33;43m▒▒[0;33m▀▀▀█[1;43m░░[0;33m▀▀▓▓▓█▓███▀▀▀[37m[9C[33m▐[1;43m░[0;33m   [37m [33m▀▀▀▀   █▌[37m[11C[33m▀▀▀██████▓▓▀▀██▓▀▀▀[1;43m░▒[0m
 [33m▐[1;43m░[0;33m▌ [35m▄[33m  ▀▌ [37m[3C[33m    [37m[3C[33m       ▐▄▄▀  [35m          [33m ▀▄▄▀              [37m[6C[33m▐▀[37m  [35m▄ [33m▐[1;43m░[0;33m▌[37m[0m
  [33m█[1;43m░[0;33m▌ [35m▓▄[33m  [37m[61C[35m▄█ [37m [33m█[1;43m░[0;33m [37m[0m
[33m░[37m [33m █▓▌ [35m▀[33m [37m[4C[33m [37m        [9C[33m [37m             [5C[33m  [37m                  [35m▀[37m   [33m█▓ ░[37m[0m
[33m  [37m [33m▐█▓▌[37m[6C[33m [37m           [6C[33m [37m         [9C[33m  [37m             [7C[33m ▐█▌[37m[0m
[33m▐▄▄██▀[37m[7C[33m [37m               [33m   [37m          [8C[33m  [37m                 [4C[33m ▓█▄▄▌[37m[0m
  [33m▀▀[37m[9C[33m [37m      [11C[33m [37m   [35mELIXIR Pi     [4C[33m [37m        [9C[33m [37m[3C[33m▀▀

Mayor info sobre los códigos de terminal acá:

Para mayor información sobre la configuración de los banners podemos leer la documentación de DietPi al respecto.

4.6.1. Boot Banner

Para configurarlo simplemente debemos editar el archivo /etc/issue. Aunque no se verá muy bien debido a las limitaciones de caracteres de la terminal tradicional.

# vim /etc/issue

Si queremos ver como queda solo necesitamos aplicar el comando cat:

# cat /etc/issue

4.6.2. SSH Banner

Si nos conectamos por SSH también podemos poner un banner de bienvenida.

Podemos ir a la línea 331 de /boot/dietpi/func/dietpi-banner y agregar lo siguiente:

# Elixir Header
cat /etc/issue
....
#/////////////////////////////////////////////////////////////////////////////////////
# Main Loop
#/////////////////////////////////////////////////////////////////////////////////////

# Elixir Header
cat /etc/issue

if (( $INPUT == 0 ))
then
    Print_Header
    Print_Local_Ip
....

Si ejecutamos

# dietpi-banner

podremos configurar otras opciones del banner.

Adicionalmente si editamos el archivo /boot/dietpi/.dietpi-banner podremos configurar los colores.

# vim /boot/dietpi/.dietpi-banner

Modificando el Color 0 que es de las líneas por un hermoso magenta elixir:

aCOLOUR[0]='\e[35m'

Ahora también podremos editar el mensaje que aparece al inicio modificando el archivo /etc/motd y eliminando el mensaje sobre Debian que aparece.

4.7. Avahi

Avahi nos permite conectarnos a través del servicio Bonjour. Si tienes un dispositivo con MacOS podrás ingresar simplemente usando raspberrypi.local en ves de la ip del dispositivo.

# apt-get install avahi-daemon

También si se desea cambiar raspberrypi por otra cosa, se debe cambiar /etc/hostname en este caso lo llamamos elixir. Puedes reiniciar el dispositivo después de configurar esto.

Elixir Pi SSH

4.7.1. Hostname

Si se cambia el hostname, se debe asegurar de que esté dentro del loopback dentro del archivo /etc/hosts. Para evitar que salga el error sudo: unable to resolve host.

Verificar que el contenido sea similar al siguiente:

127.0.0.1 localhost
127.0.1.1 elixir
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

4.8. Compilador de C

C es un lenguaje impresindible para la creación de herramientas y otras utilidades. Podemos instalar todas las dependencias necesarias con:

# apt -y install gcc g++ make automake

4.8.1. GPIO

Para tener acceso a los puertos GPIO se debe instalar algunas bibliotecas adicionales. Los puertos GPIO son útiles por ejemplo, para usar un pequeño parlante para emitir sonidos desde los pines de GPIO. Se puede ver el Proyecto Raspberry PI RTTTL para más detalles.

Hay algunos proyectos para interactuar desde C a los puertos GPIO:

Se debería añadir el usuario al grupo gpio.

$ sudo usermod -aG gpio elixir

Si se prefiere usar python se puede instalar las dependencias:

$ sudo apt install python3-rpi.gpio

4.9. Creando Usuario Elixir

Para tener un sistema más seguro es necesario evitar logins con los usuarios root o dietpi, para esto crearemos un nuevo usuario llamado elixir con privilegios de super usuario.

# useradd -mk /etc/skel -s /bin/bash elixir
# passwd elixir
# usermod -aG sudo elixir

Evitamos logins con dietpi

# usermod -L dietpi

Es recomendable mantener la capacidad de hacer login con root si tenemos acceso local, para cualquier eventualidad. Asi que solamente debemos desactivar el acceso de root por ssh.

De forma predeterminada el servidor de ssh de dietpi es Dropbear. Si usas eliminamos el acceso a root por ssh[OpenSSH puedes ver ésta guía.

Ahora realizaremos toda la configuración restante utilizando el usuario elixir.

$ ssh elixir@elixir.local

4.10. Instalar ZSH

Primero instalamos zsh y la convertimos en la terminal predeterminada.

$ sudo apt install zsh
$ chsh -s $(which zsh)

Luego instalamos Ohmyz.sh

$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Ahora editamos .zshrc para añadir los comandos de Dietpi.

export PATH=$HOME/bin:/usr/local/bin:/usr/bin:/boot/dietpi:/boot/dietpi/func:/bin:/usr/sbin:/sbin:$PATH

# Añadir al final del archivo
/boot/dietpi/dietpi-login

4.11. Instalar Exa

exa es una mejora al comando ls, le agrega color y otras funcionalidades modernas.

# apt-get install exa

Para poder ejecutarlo podemos utilizar exa -lag --header y aplicar un alias para reemplazar ls.

Modificar .bashrc o .zshrc según corresponda para cada usuario en su $HOME.

alias ls='exa -lag --header --icons'

Para fish se deberían configurar las abreviaciones.

4.12. Instalar Starship

Es un command prompt muy bueno y es compatible con bash, zsh y fish. para instalarlo solo debemos seguir su guía de instalación.

# curl -sS https://starship.rs/install.sh | sh

bash

Añadir al final de ~/.bashrc:

eval "$(starship init bash)"

zsh

Añadir al final de ~/.zshrc:

eval "$(starship init zsh)"

fish

Añadir al final de ~/.config/fish/config.fish:

starship init fish | source

4.13. Instalar asdf

asdf es un gestor de versiones útil para instalar elixir y nodejs, entre otros.

$ sudo apt install curl
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2

Añadimos las configuraciones al final de .zshrc

# asdf
. $HOME/.asdf/asdf.sh
fpath=(${ASDF_DIR}/completions $fpath)
autoload -Uz compinit && compinit

4.14. Instalar Elixir

Lo primero que debemos hacer es instalar las dependencias para Erlang y Elixir.

$ sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk

Agregamos Erlang:

$ asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
$ asdf list all erlang

Buscamos la versión que queremos y la instalamos. En este caso sería la 25.0.4

$ asdf install erlang 25.0.4

Agregamos Elixir:

$ asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
$ asdf list all elixir

Buscamos la versión y la instalamos. En este caso sería la 1.13.4-otp-25

Tenemos que tener la otp correspondiente a la versión de erlang que instalamos.

$ asdf install elixir 1.13.4-otp-25

Ahora definimos la versión global

$ asdf global erlang 25.0.4
$ asdf global elixir 1.13.4-otp-25

Ahora si ejecutamos elixir -v nos debería arrojar algo similar a:

Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]

Elixir 1.13.4 (compiled with Erlang/OTP 25)

4.15. Instalar Phoenix

Phoenix es el framework de desarrollo web por excelencia de Elixir. Para instalarlo podemos seguir su guía.

$ sudo apt-get install inotify-tools
$ mix local.hex
$ mix local.rebar --force
$ mix archive.install hex phx_new

4.15.1. Instalar PostgreSQL

PostgreSQL es la base de datos recomendada para proyectos con Phoenix. En este caso se ha instalado la versión 13.

$ sudo apt install postgresql postgresql-contrib

Le añadimos la contraseña postgres al usuario postgres:

$ sudo passwd postgres
$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
$ sudo /etc/init.d/postgresql restart

Para saber el estado del servidor de PostgreSQL:

$ sudo systemctl status postgresql

Para iniciar el servidor o detener de PostgreSQL:

$ sudo systemctl start postgresql
$ sudo systemctl stop postgresql
$ sudo /etc/init.d/postgresql restart

Para más opciones de configuración se puede ver la documentación:

  • Archivos de configuración: /etc/postgresql/[version]/[cluster]/

  • Binarios: /usr/lib/postgresql/[version]

  • Archivos de datos: /var/lib/postgresql/[version]/[cluster]

4.15.2. Instalar NodeJS

NodeJS es utilizado para compilar los assets de Phoenix. Por lo que necesitamos instalarlo también utilizando asdf. Usaremos tanto la version lts como latest.

$ sudo apt -y install gnupg
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
$ asdf list all nodejs
$ asdf install nodejs lts
$ asdf install nodejs latest
$ asdf global nodejs latest

Verificamos que funcione con:

$ node -v
v18.7.0

4.15.3. Proyecto de Prueba

Para probar que esta correctamente ejecutándose crearemos un nuevo proyecto de Phoenix.

$ mix phx.new prueba
$ cd prueba
$ mix ecto.create

Veríamos un mensaje similar a:

The database for Prueba.Repo has been created

Ahora ejecutamos los assets

$ mix assets.deploy

Y mostraría un mensaje como:

Check your digested files at "priv/static"

Ahora debemos modificar el archivo config/dev.exs para permitir acceso a otras ips usando [ip: {0, 0, 0, 0}, port: 4000].

config :prueba, PruebaWeb.Endpoint,
  # Binding to loopback ipv4 address prevents access from other machines.
  # Change to `ip: {0, 0, 0, 0}` to allow access from other machines.
  http: [ip: {0, 0, 0, 0}, port: 4000],

Finalmente podemos probar ejecutar el servidor con:

mix phx.server

Ahora podremos ver el resultado dentro del navegador.

185839024 44d267a7 d984 4b80 9dc9 9070af306c71

4.16. Instalar Rust

Rust es un lenguaje de programación de bajo nivel muy popular y muchas herramientas están escritas con este lenguaje. Además es un gran amigo de Elixir para crear bibliotecas que requieran acceso de bajo nivel.

Como solamente lo necesitaremos para compilar algunas herramientas, podemos usar asdf. Pero si se requiere algo más personalizado se puede usar https://rustup.rs/.

$ asdf plugin add rust https://github.com/asdf-community/asdf-rust.git
$ asdf install rust 1.63.0
$ asdf global rust 1.63.0

Verificamos que esté instalado:

$ cargo --version
cargo 1.63.0 (fd9c4297c 2022-07-01)

$ rustc --version
rustc 1.63.0 (4b91a6ea7 2022-08-08)

Ahora incluimos los binarios al $PATH

$ vim ~./zshrc

En la última línea:

export PATH=/home/elixir/.cargo/bin:$PATH

Recargamos el archivo

$ source ~/.zshrc

4.17. Instalar ZelliJ

ZelliJ es un multiplexor de terminal, similar a Tmux. Pero escrito en Rust. Nos da la posibilidad de separar la terminal en múltiples pestañas, para mayor comodidad.

$ cargo install --locked zellij

Una vez compilado, configuramos:

$ mkdir ~/.config/zellij
$ zellij setup --dump-config > ~/.config/zellij/config.yaml

Podemos configurar varias opciones, pero solamente seleccionaremos un tema:

# Choose the theme that is specified in the themes section.
# For some examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
# Default: default
theme: tokyo-night

Lo guardamos en

$ mkdir ~/.config/zellij/themes
$ vim ~/.config/zellij/themes/tokyo-night.yaml
# TokyoNight Theme
# https://github.com/zellij-org/zellij/blob/main/example/themes/tokyo-night.yaml
# Originally by https://github.com/enkia/tokyo-night-vscode-theme

themes:
  tokyo-night:
    fg: [169,177,214] #A9B1D6
    bg: [26,27,38] #1A1B26
    black: [56,62,90] #383E5A
    red: [249,51,87] #F9334D
    green: [158,206,106]  #9ECE6A
    yellow: [224,175,104] #E0AF68
    blue: [122,162,247]  #7AA2F7
    magenta: [187,154,247] #BB9AF7
    cyan: [42,195,222] #2AC3DE
    white: [192,202,245] #C0CAF5
    orange: [255,158,100] #FF9E64

4.18. Instalar GitUI

GitUI es una aplicación de terminal que permite manejar más simplemente los repositorios git.

Para instalarla simplemente usamos el comando:

$ cargo install gitui

También podemos configurar sus colores creando un archivo llamado ~/.config/gitui/theme.ron

4.19. Actualizar Neovim

El problema de Neovim que instalamos previamente es que utiliza una versión antigüa de Neovim (0.4), la cual no funciona bien con algunos plugins de elixir que usaremos. Necesitamos una versión 0.5 o superior.

Compilaremos la última versión de Neovim desde la rama master. Es necesario debido a que las versiones stable y nightly están precompiladas y no son compatibles con la Raspberry Pi.

$ sudo apt-get install -y \
  autoconf \
  automake \
  cmake \
  g++ \
  gettext \
  libncurses5-dev \
  libtool \
  libtool-bin \
  libunibilium-dev \
  libunibilium4 \
  ninja-build \
  pkg-config \
  python3-pip \
  software-properties-common \
  unzip

Segundo habilitamos los plugins de python para neovim

$ pip3 install setuptools && pip3 install --upgrade pynvim

Tercero agregamos el plugin de neovim para asdf.

$ asdf plugin add neovim
$ asdf install neovim ref:master

Una vez compilado verificamos que este disponible el binario

$ asdf which nvim
/home/elixir/.asdf/installs/neovim/ref-master/bin/nvim

$ nvim --version
NVIM v0.8.0-dev-109-g7e7a1fa
Build type: RelWithDebInfo

Finalmente crearemos un alias para usarlo y actualizarlo más facilmente.

Editamos el archivo ~/.zshrc.

$ nvim ~/.zshrc

Añadimos al final.

alias vim=nvim
alias update-nvim-master='asdf uninstall neovim ref:master && asdf install neovim ref:master'
export EDITOR=nvim

Y actualizamos

$ source ~/.zshrc

4.20. Instalar Docker

Docker es la herramienta principal para trabajar con contenedores y Dev Containers.

Para poder instalarlo vamos a realizar lo siguiente:

Instalamos las dependencias de Docker:

$ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y

Incluimos las llaves GPG de Docker:

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Añadimos los repositorios de Docker:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instalamos Docker:

$ sudo apt update && sudo apt -y install docker-ce docker-ce-cli containerd.io

Verificamos que este instalado y ejecutándose:

$ sudo docker version && sudo systemctl status docker

Si por alguna razón no está ejecutándose, se puede usar:

$ sudo systemctl start docker

Agregamos al usuario elixir al grupo docker, para no necesitar sudo:

$ sudo usermod -aG docker elixir

Reiniciamos la sesión (log off y luego log in) para que se implementen los permisos.

Verificamos que todo esté en orden con:

$ docker run hello-world

Docker Hello World

About

💻 Dev Machine para Elixir con Debian 11

Topics

Resources

License

Stars

Watchers

Forks