Instalación y configuración de una Raspbery Pi

En esta entrada se definen los pasos a seguir para instalar y configurar una Raspberry Pi para desplegar una serie de servicios.

1. Instalación del SO

Usando el programa Raspberry Pi Imager se puede quemar la imagen de Ubuntu, RaspberryPiOS, LibreElec o que prefieras, en cualquier tarjeta micro SD o USB 1. Por ejemplo elegiremos la imagen de Raspbian OS con escritorio y la quemaremos en un USB de 64GB.

Otra forma de quemar una imagen en una tarjeta SD o un USB sería usando los siguientes comandos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# See the partitions
lsblk

# Umount the USB partition
umount /dev/sdc1 

# Format in vFAT
mkfs.vfat -F 32 /dev/sdc -I

# Flash the ISO into USB
dd status=progress if=NAME.iso of=/dev/sdc

2. Configuración Básica

Una vez esté instalado el sistema operativo, existen varias opciones para configurar la raspi. Se puede configurar sin necesidad de una pantalla, teclado y ratón extra como se explicó en un post anterior o usando estos tres periféricos externos. En este caso, usaremos una pantalla, un teclado y un ratón externo para simplificar la publicación. Por lo tanto, una vez encendida la raspi con el USB o la tarjeta SD conectada, aparecerá un dialogo para configurar el idioma, el wifi y una contraseña (por ejemplo: 1234567890).

1
2
# Update and upgrade packages system
sudo apt-get update -y && sudo apt-get upgrade -y

Añadimos un alias par el hostname en el archivo /etc/hosts del oredenador que estemos utilizando para la configuración.

1
<ip de la raspberry> node-1

En el siguiente paso es necesario copiar la clave pública al archivo ~/.ssh/authorized_keys de la RaspberryPi. Para ello se utilizará el siguiente comando:

1
ssh-copy-id -i pi@<ip de la raspberry o node-1>

Ahora nos pedirá la contraseña de nuestra clave SSH y nos conectaremos a la RaspberryPi mediante:

1
ssh pi@node-1

3. Instalación de Programas

Paquetes básicos

1
sudo apt install -y software-properties-common git wget

Docker y docker compose

Instalación

Instalamos docker con el script de instalación:

1
2
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Mientras que la instación de docker-compose lo realizamos a través de pithon3:

1
2
3
4
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose

Añadir usuario al grupo docker

1
sudo usermod -aG docker ${USER}

Ansible

1
sudo apt install -y ansible

Instalar zsh y Oh my zsh2

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

Instalar Powerlevel10k

Descargar y pegar las 4 fuentes .ttf Meslo Nerd en /usr/local/share/fonts. Deben tener los permisos 644 (-rw-r–r–).3

Creamos la carpeta /usr/local/share/fonts:

1
2
sudo mkdir /usr/local/share/fonts
cd  /usr/local/share/fonts

Descargamos las fuentes:

1
sudo wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf  https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf

Clonar el proyecto de powerlevel10k:

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Sustituir el siguiente valor en ~/.zshrc:

1
ZSH_THEME="powerlevel10k/powerlevel10k"

Configurar al gusto y actualizar los cambios del fichero ~/.zshrc:

1
source ~/.zshrc

Snapd

Instalación

Se instala los paquetes snapd y core:

1
sudo apt install -y snapd core

Añadir ruta de ejecutables al PATH de bash y Zhs

Se añade la ruta de ejecutables snap al PATH:

1
2
3
4
echo "export PATH=$PATH:/snap/bin" >> ~/.bashrc
source ~/.bashrc
echo "export PATH=$PATH:/snap/bin" >> ~/.zshrc
source ~/.zshrc

Se comprueba que se ha añadido correctamente la ruta:

1
echo $PATH

Añadir lanzadores al menú de aplicaciones

Se crea un enlace simbólico desde el directorio que almacena los lanzadores de snaps (/var/lib/snapd/desktop/applications) al directorio de aplicaciones del sistema (usr/share/applications/)

1
sudo ln -s /var/lib/snapd/desktop/applications /usr/share/applications/snapd

Flatpak

Instalación

De la documentación oficial de Flatpak, se siguen los siguientes pasos:

  1. Instalar Flatpak
1
sudo apt install flatpak -y
  1. Se instala el repositorio de Flatpak
1
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  1. Se reinicia el sistema para aplicar los cambios.

Añadir lanzadores al menú

Se crea un enlace simbólico desde el directorio que almacena los lanzadores de flatpak (/var/lib/flatpak/exports/share/applications/) al directorio de aplicaciones del sistema (usr/share/applications/)

1
sudo ln -s /var/lib/flatpak/exports/share/applications/ /usr/share/applications/flatpak

KeePassXC

Nota: se instala a través de Snap porque los repositorios oficiales tienen una versión desactualizada.

  1. Se instala a través de snap:
1
sudo snap install keepassxc
  1. Se descarga la extensión para el navegador.

  2. Se configura la extensión del navegador a través de un script oficial de KeePassXC. Guardar script y ejecutar:

1
2
wget https://raw.githubusercontent.com/keepassxreboot/keepassxc/master/utils/keepassxc-snap-helper.sh
zsh keepassxc-snap-helper.sh 

En caso de obtener el error Could not find keepassxc.proxy! Ensure the keepassxc snap is installed properly., esto se debe a que falta añadir la ruta de ejecutables snap al PATH mediante:

1
2
3
4
echo "export PATH=$PATH:/snap/bin" >> ~/.zshrc
source ~/.zshrc
echo "export PATH=$PATH:/snap/bin" >> ~/.bashrc
source ~/.bashrc

Volver a ejecutar el script:

1
bash keepassxc-snap-helper.sh

VSCodium [^4]

  1. Añade la clave GPG del repositorio:
1
wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/vscodium.gpg
  1. Añade el repositorio:
1
2
3
4
echo 'deb
 [ signed-by=/usr/share/keyrings/vscodium-archive-keyring.gpg ] 
https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs vscodium main'
    | sudo tee /etc/apt/sources.list.d/vscodium.list
  1. Actualización de repositorios e instalación de VSCodium:
1
sudo apt update && sudo apt install codium 

Configuración usando Ansibles

Usando una colección

  • Instalación:
1
2
ansible-galaxy install dev-sec.os-hardening
ansible-galaxy install dev-sec.ssh-hardening
  • Crea un playbook para cada rol de ansible llamado ansible-os-hardening.yaml y ansible-ssh-hardening.yaml.

  • Ejecuta estos playbooks con los siguientes comandos:

1
2
ansible-playbook ansible-os-hardening.yaml --ask-become-pass
ansible-playbook ansible-ssh-hardening.yaml --ask-become-pass

Usando un playbook básico

  • Añade tu clave ssh en un ssh-agent usando zsh (o bash):
1
2
ssh-agent zsh
ssh-add ~/.ssh/id_ed25519
  • Ejecutar el playbook de ansible con la contraseña sudo requerida para los comandos:
1
ansible-playbook playbook.yaml --ask-become-pass