# 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 ![](https://i.imgur.com/dJqvRmX.png) 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 ![](https://i.imgur.com/j2uiC7E.png) ## 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: ![](https://i.imgur.com/Phn8X2i.png) Ejemplo creado: ![](https://i.imgur.com/tpGC8Ne.png) 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 ```