logo linux desarrollo

En este apunte describo mi bitácora de configuración de un Linux (Ubuntu) como equipo de desarrollo. Instalo varias aplicaciones gráficas y de línea de comando que para mí son fundamentales para trabajar con el equipo.

Partiendo de una instalación nueva de Ubuntu, el orden de instalación puede variarse, pero te recomiendo (si tu Ubuntu está recién instalado) que sigas el mismo orden para ver los mismos resultados.


Primeros pasos

Antes de empezar, utilizo el terminal predeterminado de Ubuntu, aunque a veces me da por usar otro (Terminator, Xfce Terminal, Konsole, …).

Scripts

Que uso habitualmente

  • Script /usr/bin/e
  • Fichero /etc/nanorc personalizado para nano
    • Creo los directorios de backup (sudo mkdir /root/.nano y mkdir ~/.nano
  • Script /usr/bin/confcat, un cat sin las líneas de comentarios
  • Script /usr/bin/s para cambiar a root mucho más rápido
    • Añado mi usuario a sudoers
    • echo 'luis ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/90-mi-usuario
  • Cambiar los permisos:
    • sudo chmod 755 /usr/bin/e /usr/bin/confcat /usr/bin/s

No olvides SSH, tengo varios apuntes al respecto: Git multicuenta, SSH y X11 y SSH en Linux. Un resumen,

ssh-keygen -t ed25519 -a 200 -C "luis@kymerax" -f ~/.ssh/id_ed25519

Añade el contenido de la pública al ~/.ssh/authorized_keys de tus servidores o estaciones remotas.

Locales

Por si lo necesitas. Para reconfigurar los locales. Yo trabajo con los locales en Español, aunque instale Linux en inglés, de hecho suelo configurar ambos.

  • /etc/locale.gen
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8
  • Ejecutar locale-gen
locale-gen
  • La configuración más completa es con:
dpkg-reconfigure locales

Instalación de software

Actualizar el sistema

sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y
sudo flatpak update
sudo snap refresh

Esenciales para empeza

sudo apt install -y vim libfuse2

GIT, sin comentarios

sudo apt install -y git gh

C/C++ aunque no programes en estos lenguajes

sudo apt install -y build-essential cmake autotools-dev automake \
               libevent-dev libncurses5-dev bison flex

Python, pip, pipenv (nota, python3 venía preinstalado)

sudo apt install -y python3-pip pipenv

Golang (el lenguaje de programación más famoso del mundo)

Lo describo más adelante en la sección Golang.

Recomendados que vendrán bien

sudo apt install -y xscreensaver xscreensaver-data-extra xscreensaver-gl-extra
sudo apt install -y ca-certificates curl wget

Docker (más en Docker)

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# Instalo la última verión
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Añado mi usuario al grupo de Docker (salir y volver a hacer login tras este comando)
sudo usermod -aG docker $USER

# Compruebo que funciona. Si recibes un error de permisos, haz un reboot del equipo
docker run hello-world

Portainer CE para la gestión de contenedores.

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
https://localhost:9443   (Asigno contraseña al administrador)

tmux desde los fuentes

# Preparo el entorno, módulos adicionales
sudo apt-get update
sudo apt install pkg-config autoconf-archive build-essential autoconf libtool libssl-dev python3-pkgconfig libcurl4-gnutls-dev

# Descargo y compilo tmux
cd ~/ && git clone https://github.com/tmux/tmux.git && cd tmux && ./autogen.sh && ./configure
make && sudo make install

Networking, varias herramientas útiles

apt install -y net-tools iputils-ping tcpdump ppp

Shell

La shell que viene por defecto en Ubuntu es bash pero tal como cuento en ¡Adiós Bash, hola Zsh!, hace ya un tiempo que me he cambiado a zsh.

Además de Zsh, opcionalmente Oh My Zsh (aunque yo he dejado de usarlo), te recomiendo que le eches un ojo a “Terminales con tmux”, un multiplexor de terminales opcional potentísimo.

Git

Ya realicé la instalación arriba, en cualquier caso, lo repito:

sudo apt update
sudo apt install git -y

Creo mis ficheros ~/.gitconfig y ~/.gitignore_global, que te puedes bajar

curl -s -O https://gist.githubusercontent.com/LuisPalacios/0ee871ee236485d4a064179b16ada400/raw/348a8a448095a460756f85ef0362521b886b0a2e/.gitconfig
curl -s -O https://gist.githubusercontent.com/LuisPalacios/6923f8cc708ce10f3bd4a6772625fb0c/raw/65d0ed6acba83ece4db78228821589212b9f9f4b/.gitignore_global

Como cliente GUI uso GitKraken. Tienes más información sobre git en esta chuleta sobre GIT y GIT en detalle.

Dejo aquí enlaces a mis apuntes sobre Git

  • Chuleta sobre GIT, donde recomiendo instalar gh en tu cuenta Personal o Multicuenta.
  • Git multicuenta, donde trato más en detalle cómo trabajar con varias cuentas en GitHub
  • GIT en detalle, para profundizar en Git y entenderlo de una vez por todas, ojo que es muy técnico.

Chrome

No necesita mucha presentación. En Ubuntu lo instalo desde la página de Google Chrome, descargo el .deb y botón derecho > Abrir con Instalación de Software.

VSCode

Visual Studio Code es un editor de código fuente para Windows, Linux, macOS y Web con un soporte increible de extensioens, características, plugins y lenguajes soportados. Sigo las indicaciones de Visual Studio Code on Linux, descargo el .deb y al instalo (también añade el repositorio apt para luego hacer los updates automáticos mediante el gestor de paquetes del sistema).

sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y
echo "code code/add-microsoft-repo boolean true" | sudo debconf-set-selections
sudo apt install ./<file>.deb

Consejos sobre VSCode

  • Consulta mi apunte sobre Personalizar VSCode.
  • Settings Sync - sincroniza settings, snippets, temas, iconos, extensiones, usando tu cuenta de GitHub o Microsoft
  • Con VSCode puedes hacerlo todo desde el teclado. Ya trae un subconjunto de comandos mapeado a Atajos de teclado. Si quieres aprender estos atajos por defecto, imprime el PDF para Windows, macOS o Linux y déjalo cerca.

AppImageLauncher

Vas a encontrar muchas aplicaciones en formato .AppImage y para instalarlas y gestionarlas te recomiendo que te instales el AppImageLauncher. Te recomiendo leer AppImageLauncher, integra las aplicaciones AppImages al lanzador de aplicaciones donde explican muy bien cómo instalarlo.

Docker

Si vas a hacer desarrollos de backend, servicios, middleware, es muy probable que necesites Docker. Tienes dos opciones, la primera es Docker Engine y la segunda usar Docker Desktop para Linux, o incluso podrías montar ambos en el mismo equipo. Si tienes dudas mira las diferencias.

En mi caso prefiero usar Docker Engine y leventar un contenedor con Portainer CE para hacer la gestión.

HTTPie

Recomiendo la herramienta HTTPie si vas a trabajar con API’s. Te ayuda a trabajar con tus API’s de forma sencilla e intuitiva. Tienen una versión gráfica y otra CLI.

El proceso para instalarlo en mi linux es el siguiente:

  • Desde la página de Descargas accedo a Download for Linux
  • Desde la página de Descargas CLI sigo las instrucciones para instalarme la versión CLI, snap install httpie

Ejemplos:

  • Hola Mundo
    • https httpie.io/hello
  • Método HTTP personalizado, encabezados HTTP y datos JSON
    • http PUT pie.dev/put X-API-Token:123 name=John
  • Envío de formularios
    • http -f POST pie.dev/post hello=World
  • Ver la solicitud que se está enviando utilizando una de las opciones de salida
    • http -v pie.dev/get
  • Construir e imprimir una solicitud sin enviarla utilizando el modo offline
    • http --offline pie.dev/post hello=offline
  • Usar la API de Github para publicar un comentario en un issue con autenticación
    • http -a USERNAME POST https://api.github.com/repos/httpie/cli/issues/83/comments body=HTTPie is awesome! :heart:
  • Subir un archivo utilizando entrada redirigida
    • http pie.dev/post < files/data.json
  • Descargar un archivo y guardarlo mediante salida redirigida
    • http pie.dev/image/png > image.png
  • Descargar un archivo al estilo wget
    • http --download pie.dev/image/png
  • Usar sesiones nombradas para hacer persistentes ciertos aspectos de la comunicación entre solicitudes al mismo host
    • http --session=logged-in -a username:password pie.dev/get API-Key:123
    • http --session=logged-in pie.dev/headers
  • Establecer un encabezado de host personalizado para evitar la falta de registros DNS
    • http localhost:8000 Host:example.com

Golang

Hago la instalación manual desde su sitio en internet. Primero elimino el golang de mi Ubuntu

Veo que tenía una versión que se instaló en el pasado usando apt

sudo dpkg -l | grep -i golang
# Me enseña que tengo la 1.22
sudo apt-cache policy golang-go golang-src
# Me muestra su detalle

Las borro

sudo apt-get remove golang-go
sudo apt-get remove --auto-remove golang-go
sudo dpkg -l | grep -i golang
# No muestra nada

Instalo desde el sitio de Go la última versión disponible

# Desde root
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz

Me aseguro de tener /usr/local/go/bin en mi PATH (mi ~/.zshrc lo tiene configurado).

% go version
go version go1.22.5 linux/amd64

Si no has programado nunca en Go, ya estás tardando 😂, sigue el manual https://go.dev/doc/.