# Install isard baremetal all in one
## Repos donde tenemos chuletillas de cosas
git@gitlab.com:isard-vdi/ctti-sysadmin.git
git@gitlab.com:beto/dd-customize.git
git@gitlab.com:digitaldemocratic/dd-misc.git
git@gitlab.com:isard/isard-aragon-doc.git
git@gitlab.com:isard/isard-euskadifp.git
git@gitlab.com:isard/suport/isard-gencatfp.git
git@gitlab.com:beto/isardvdi-docs.git
## bios configuration
Aseguramos que está la virtualización disponible, por defecto ya venía activada

Si tiene tarjeta gráfica hay que verificar que tiene sriov y ari activado
El sriov hay que activarlo
[x] SRIOV ACTIVADO (ya )
Las opciones de ARI no veo claro que hacer, porque por defecto está en enable y en el manual no aparece la de **pcie ari enumeration**. De momento lo hemos dejado como
ir a PCIe/PCI/PnP Configuration
* PCIe ARI Support => lo cambiamoa enable
* PCIe ARI Enumeration => lo dejamos en auto

## Documentar el presupuesto o factura del distribuidor por si hay movidas de garantías
por ejemplo en Larburu: https://nextcloud.isardvdi.com/f/25682
## Install base software
Miramos los paquetes que gestionan el kernel y los fijamos antes de hacer un upgrade:
```bash
root@ubuntu-server-20-04:~# dpkg --get-selections |grep linux-
linux-base install
linux-firmware install
linux-generic install
linux-headers-5.4.0-96 install
linux-headers-5.4.0-96-generic install
linux-headers-generic install
linux-image-5.4.0-96-generic install
linux-image-generic install
linux-modules-5.4.0-96-generic install
linux-modules-extra-5.4.0-96-generic install
```
Ahora un upgrade:
```
apt upgrade -y
```
Fijamos kernel y headers con el comando apt-mark hold, si en el futuro queremos quitar estas restricciones se ha de ejecutar el mismo comando pero con unhold:
```bash
sudo apt-mark hold linux-generic linux-image-generic linux-headers-generic
```
## Variable de entorno
Esta variable hace que las instalaciones sean mas rapidas y no tener que darle yes en modo interactivo
```
export DEBIAN_FRONTEND=noninteractive
```
Y instalar paquetes base que nos servirán para monitorizar, conectarnos, hacer diagnósticos, manejar ficheros...
```
apt install -y rsync tmux screen vim tmate iperf3 python3-pip htop glances git tig ethtool net-tools iftop iotop wget curl nmap sshfs ssh mc stress stress-ng ntp neovim tshark tree
```
## Configurar Servidor NTP
https://websetnet.net/es/how-to-install-ntp-server-and-client-on-ubuntu-18-04-lts/+
## Disable apparmor
Desactivamos apparmor en el kernel para evitar problemas añadiendo estas dos lineas en /etc/default/grub y eliminamos el paquete apparmor:
https://www.kernel.org/doc/html/latest/admin-guide/LSM/apparmor.html
CONFIG_DEFAULT_SECURITY="apparmor=0"
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE='security="disable"'
```
sudo apt remove --assume-yes apparmor
```
## Snoopy Logger
Instalamos el Snoopy para poder monitorizar los comandos ejecutados
```
sudo apt-get install snoopy
```
Para ver el historial utilizamos el siguiente comando
```ES
sudo tail /var/log/auth.log
```
## Configuraciones de red
Nos gusta trabajar con network-manager y firewalld, en ubuntu hay que cambiar unas cuantas configuraciones para poderlo poner en marcha.
Primero instalamos network-manager:
```bash
apt install -y network-manager
```
Instalar resolvconf para que funcione correctamente el DNS:
```
sudo apt install resolvconf
```
**Le decimos que queremos que network-manager maneje tanto las conexiones de ethernet como las de wireguard:**
```
mv /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf_orig
touch /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
echo "[keyfile]" > /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
echo "unmanaged-devices=*,except:type:wifi,except:type:ethernet,except:type:wireguard" >> /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
```
**también hay que modificar la resolución dns para que la haga sin usar systemd**
```
mv /usr/lib/NetworkManager/conf.d/10-dns-resolved.conf /usr/lib/NetworkManager/conf.d/10-dns-resolved.conf:orig
echo "[main]" > /usr/lib/NetworkManager/conf.d/10-dns-resolved.conf
echo "dns=default" >> /usr/lib/NetworkManager/conf.d/10-dns-resolved.conf
```
Reiniciamos network-manager:
```
systemctl restart NetworkManager
```
Comprobamos que ya maneja las conexions:
```
nmcli con show
```
Duplica las conexiones, no entiendo por qué, las quitamos:
```
nmcli con delete Wired\ connection\ 1
nmcli con delete Wired\ connection\ 2
```
#### Fijar el nombre de las tarjetas
Script para renombrar interfaces, ojo a la parte final, si no va con ip dinámica puedes perder la conexión, la primera parte el cat > se usa para crear el archivo en el lugar y nombre que indica.
Estas variables hay que cambiarlas por el old_name y el new_name, en este caso sería enp68s0f0 el old_name y el new_name sería out
```
cat > /root/change_interface_name << "EOF"
#/bin/bash
new_name=$2;
old_name=$1;
echo "oldname: $old_name => newname: $new_name"
echo SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", \
ATTR{address}==\"$(cat /sys/class/net/$old_name/address)\", \
ATTR{type}==\"1\", KERNEL==\"e*\", \
NAME=\"$new_name\" >> /etc/udev/rules.d/70-persistent-net.rules
cat /etc/udev/rules.d/70-persistent-net.rules
EOF
```
Y otro script para hacer el cambio en live:
```
cat > /root/rename_live.sh << "EOF"
#/bin/bash
new_name=$2;
old_name=$1;
echo "oldname: $old_name => newname: $new_name"
dhclient -r $old_name
ip link set dev $old_name down
ip link set dev $old_name name $new_name
link set dev $new_name up
dhclient $new_name
EOF
```
Cambiamos el nombre manualmente intentando no perder la conectividad:
```
bash /root/change_interface_name enp68s0f0 out
bash /root/rename_live.sh enp68s0f0 out
```
En caso de que queramos ponerle IP fija utilizamos los siguientes comandos:
```
nmcli con mod enps03 ipv4.addresses 192.168.2.20/24
nmcli con mod enps03 ipv4.gateway 192.168.2.1
nmcli con mod enps03 ipv4.ignore-auto-dns yes
nmcli con mod enps03 ipv4.dns “8.8.8.8 8.8.4.4”
nmcli con mod enps03 ipv4.method manual
```
Y finalmente para habilitar los cambios usamos:
```
nmcli con down enps03
nmcli con up enps03
```
Verificamos dns con:
```
cat /etc/resolv.conf
```
Modificamos también el nombre de la conexión en network manager:
```
nmcli con mod enp68s0f0 con-name out connection.interface-name out
```
Si no queremos la IP fija podemos usar el DHCP:
```
nmcli con mod out ipv4.method auto connection.autoconnect yes
```
<sup> NOTA: Si el nombre de la conexión esta en español tendremos el problema de no poder cambiar el nombre correctamente, entonces usamos este comando
</sup>
```
nmcli con mod Conexión\ cableada\ 1 con-name out connection.interface-name out
```
#### Quitar servicios de red que vienen por defecto con Ubuntu y pueden colisionar con network manager
Deshabilitamos los servicios de red por defecto que vienen con ubuntu y quitamos netplan.io:
```
systemctl disable --now systemd-networkd.socket systemd-networkd systemd-networkd-wait-online networkd-dispatcher
apt -y purge netplan.io
```
Podemos tambien desactivar IPv6 usando GRUB y cambiando estas lineas de /etc/default/grub:
```
nvim /etc/default/grub
```
```
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
```
y actualizamos el GRUB:
```
sudo update-grub
```
Reboot y ver que todo ha arrancado bien:
```
reboot
```
### VPN wireguard por network manager
Instalar wireguard:
```
sudo apt install wireguard -y
```
Vamos a nuestro servidor de isard de vpns y creamos una nueva conexión, y descargamos el .conf
* new client
* allowed ips: 10.255.255.0/24 (revisar esta parte para que sólo se puedan conectar los equipos que queremos)
* y después de crear el cliente => botón apply config
* descargar el fichero y subir a /root del server con nombre isard.conf
Creamos un nuevo cliente:

Ejemplo creado:

Copiamos en /root/isard.conf la configuración de vpn y creamos la conexión con nmcli
```
nmcli connection import type wireguard file /root/isard.conf
nmcli connection modify isard connection.id "isard-vpn"
nmcli connection modify isard-vpn connection.autoconnect yes
nmcli connection up isard-vpn
```
#### Firewalld
```bash
apt install firewalld -y
```
#### Failtoban
```
apt install -y fail2ban
```
### Hostname
Comandos para comprobar el hostname y lo cambiamos por el hostname apropiado
```
hostname
hostnamectl
hostnamectl set-hostname vdi-mendizabala
```
### Sudoers
Modificamos la línea de sudoers para que no nos pida el password al hacer sudo:
```
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
```
Añadimos el usuario isard al sudoers
```
adduser isard
usermod -aG sudo isard
```
## SSH
Generamos las claves ssh dentro del usuario que queremos usar e introducimos los authorized_keys
```
ssh-keygen
```
## Docker e Isard
Instalar docker-ce
https://docs.docker.com/engine/install/debian/
```
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#test
docker run hello-world
```
Install docker-compose
```
apt install -y python3-pip
pip3 install docker-compose
```
Upgrade docker compose v2
```
# create the docker plugins directory if it doesn't exist yet
mkdir -p ~/.docker/cli-plugins
# download the CLI into the plugins directory
curl -sSL https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
# make the CLI executable
chmod +x ~/.docker/cli-plugins/docker-compose
```
#### Install Isard:
```
mkdir -p /opt/isard/src
git clone https://gitlab.com/isard/isardvdi /opt/isard/src
```
#### Actualizaciones automáticas Isard:
1. Primero nos conectamos por ssh a la maquina deseada
2. Antes de hacer la actualización vamos a /opt/isardvdi/sysadm y dentro tendremos el isard-upgrade-cron.sh con unos pasos a seguir
3. Si no tenemos el jq y el buster-backports instalados, tendremos que instalarlos con:
```
apt install jq
apt install -t buster-backports git
```
4. En el mismo script, hay un cron que copiaremos y pegaremos en /etc/crontab y usaremos para configurar cuando queremos que se hagan las actualizaciones automáticas:
```
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
12 4 * * * root /opt/isard/src/isardvdi/sysadm/isard-upgrade-cron.sh >/tmp/isard-upgrade.log 2>&1
```
(EXTRA) En el isardvdi.cfg comprobamos que tenemos el DOCKER_IMAGE_TAG=main y no está repetido. (se puede poner el TAG con guiones y la version deseada, en principio)
```
DOCKER_IMAGE_TAG=main
#Exemple: 8-22-4
```
Para comprobar que funcionan podemos hacerlo modificando el tiempo o de manera manual hacemos:
```
./build.sh
docker-compose pull
docker-compose up -d
```
#### Backups automáticos Isard:
Vamos al isardvdi.cfg y descomentamos estas lineas con los parametros de que y cuando queremos hacer los backups y se guardara por defecto en /opt/isard-local/backup:
```
BACKUP_DIR=/opt/isard-local/backup
BACKUP_REPORT_EMAIL=root
BACKUP_DB_ENABLED=false
BACKUP_DB_WHEN="everyday at 01"
BACKUP_DB_PRUNE="--keep-daily=1 --keep-weekly=24 --keep-monthly=12 --keep-within=14d --save-space"
BACKUP_DISKS_ENABLED=false
BACKUP_DISKS_WHEN="everyday at 01"
BACKUP_DISKS_PRUNE="--keep-daily=1 --keep-weekly=4 --keep-monthly=3 --keep-within=7d --save-space"
BACKUP_DISKS_TEMPLATES_ENABLED=false
BACKUP_DISKS_GROUPS_ENABLED=false
BACKUP_DISKS_MEDIA_ENABLED=false
```
#### Auto Up después de un reboot Isard:
Dentro de opt/isard/src/sysadm hay un service llamado isardvdi.service, este archivo se pone en /etc/systemd/system y hacemos un reload y enable para activarlo tras el próximo reinicio:
```
cp isardvdi.service /etc/systemd/system
systemctl daemon-reload
systemctl enable isardvdi
```