Odroid C4 : configurer armbian bookworm

Rédigé par Alexandre le 2023-08-01

#auto-hébergement #debian #loisir

J'ai pris beaucoup de retard sur les mises à jour de mon infrastructure suite à beaucoup de changement dans ma vie. Du coup, je suis en train de combler mon retard et je commence tout naturellement par mes hôtes LXD.

Fidèle à mes principes, je ne fais pas de mises à jour, je réinstalle. Du coup dans cet article je réinstalle un Odroid C4 avec la dernière version d'Armbian sous Debian 12, alias Bookworm.

Cette documentation a été rédigée et testée en utilisant l'image minimale CLI en version 6.1.30. Le contenu de cette documentation peut être modifié à tout moment afin de coller avec mes besoins.

Installer

Cette documentation ne donne pas les détails sur l'installation de armbian sur la carte SD ou l'eMMC, toutefois voici comment je procède :

  • Télécharger la dernière version Debian de armbian sur le site officiel
  • Vérifier l'intégrité de l'image téléchargée
  • Positionner l'eMMC sur la clef USB permettant de la connecter à un ordinateur
  • Ouvrir gnome-disk-utility
  • Sélectionner l'eMMC
  • Utiliser le menu des trois points verticaux (tout en haut à droite)
  • Choisir Restaurer l'image disque...
  • Chercher l'image d'armbian en cliquant sur (Aucun)
  • Lancer en utilisant le bouton Démarrer la restauration...
  • Une fois la restauration terminée, éjecter l'eMMC via le bouton adéquat (en haut à droite)
  • Remettre l'eMMC dans la machine

Premier démarrage

Une fois le système démarré, il faut trouver son IP. Personnellement je cherche dans la liste des baux DHCP de ma box internet et tente le SSH sur chaque IP dont je ne connais pas le périphérique. Dans mon cas, le DHCP a attribué l'IP 192.168.1.221.

Se connecter via SSH :

ssh root@192.168.1.221

Le mot de passe par défaut est indiqué ici. Après l'avoir saisi, nous sommes invité à le changer :

New root password: *********
Repeat password: *********

Nous sommes maintenant invité à changer les options régionales :

1) bash
2) zsh

Shell: BASH

Pour finir, il nous est proposé de créer un utilisateur, ce que je ne fais pas.

Configuration

Réseau

Définir la configuration réseau afin d'avoir une IP statique :

sudo tee /etc/network/interfaces <<EOF
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug end0
iface end0 inet static
  address 192.168.1.6/24
  gateway 192.168.1.254
  dns-nameservers 193.110.81.9 185.253.5.9 80.67.169.12
EOF

NB : je ne configure pas d'IPv6 parce que celle-ci est amenée à changer lors du redémarrage de ma box internet.

Faire le ménage dans les paquets liés au réseau :

sudo apt purge --autoremove network-manager iperf3 ifenslave ethtool fping iputils-arping isc-dhcp-client netcat-openbsd build-essential aptitude* autoconf automake autotools-dev avahi-autoipd bind9-*

Installer les paquets utilisés normalement par Debian pour gérer le réseau :

sudo apt install ifupdown resolvconf

Gestionnaire de paquets

Créer un fichier personnel de configuration d'apt :

sudo tee /etc/apt/apt.conf.d/99custom <<EOF
APT::Install-Recommends "false";
APT::Install-Suggests "false";
APT::Get::Show-Versions "true";
APT::Get::Show-Upgraded "true";
APT::Get::Purge "true";
APT::Get::List-Cleanup "true";
EOF

Nettoyer les dépôts inutiles et utiliser les serveurs français :

sudo tee /etc/apt/sources.list <<EOF
deb https://deb.debian.org/debian/ bookworm main
deb https://deb.debian.org/debian/ bookworm-updates main
deb https://deb.debian.org/debian/ bookworm-backports main
deb http://security.debian.org/debian-security bookworm-security main
EOF

Désactiver la source desktop :

sudo sed -i 's/ bookworm-desktop//g' /etc/apt/sources.list.d/armbian.list

Prendre en compte les changements :

sudo apt update

Faire le ménage au niveau des paquets :

sudo apt purge --autoremove alsa-utils aptitude* autoconf automake bison bsdmainutils bsdextrautils build-essential bzip2 chrony console-setup* command-not-found cpufrequtils cracklib-runtime device-tree-compiler dialog dirmngr distro-info-data dnsutils dosfstools dpkg-dev evtest expect fbset f2fs-tools f3 figlet flex fuse g++* gir1.2* gnupg* gpg gpg-* gpgconf gpgsm hdparm hostapd html2text htop iotop iptables iso-codes iw jq keyboard-configuration kbd lsb-release lsof m4 make man-db mailcap mmc-utils ncurses-term net-tools networkd-dispatcher nocache ntfs-3g parted patch pciutils pinentry-curses policykit-1 psmisc pv qrencode rfkill selinux-utils screen software-properties-common stress sunxi-tools sysfsutils tcl-expect tcl8.6 tmux toilet* unicode-data unzip usb.ids usbutils vim* vlan wget wireless* wireguard* wpasupplicant xkb-data xxd xz-utils zsh*

Un brin de ménage au niveau fichier :

sudo rm -R /etc/NetworkManager /usr/lib/chromium-browser /var/log/unattended-upgrades /root/.oh-my-zsh /root/.config /root/.zshrc

Supprimer les paquets orphelins :

sudo apt install --assume-yes deborphan dialog &&\
sudo apt purge --assume-yes --autoremove $(deborphan)

Mettre à jour le système :

sudo apt full-upgrade

Installer les paquets habituels :

sudo apt install htop locales ca-certificates curl sudo rsync tmux git nftables vim vim-airline

NB : ignorer les messages qui disent que les paquets sont déjà installés.

La configuration par défaut de vim sous Debian est une horreur pour moi, donc je la change :

sudo tee /etc/vim/vimrc.local <<EOF
set nocompatible
set backspace=indent,eol,start
set confirm
set number
set expandtab
set smarttab
set shiftwidth=2
set tabstop=2

" Turn on syntax highlighting by default
syntax on

" Configure airline plugin
let g:airline#extensions#tabline#enabled = 1
EOF

Options régionales

Configurer la langue du système :

sudo rm /etc/default/locale &&\
sudo locale-gen fr_FR.UTF-8 &&\
sudo dpkg-reconfigure locales

Dans la fenêtre qui s'ouvre :

  • Chercher fr_FR.UTF-8
  • Cocher en appuyant sur la barre espace
  • Valider avec la touche Entrée
  • Choisir fr_FR.UTF-8
  • Terminer avec la touche Entrée

Configurer le fuseau horaire :

sudo dpkg-reconfigure tzdata

Dans la fenêtre qui s'ouvre :

  • Sélectionner Europe
  • Valider avec la touche Entrée
  • Chercher Paris
  • Terminer avec la touche Entrée

Nom d'hôte

Définir un nom d'hôte :

newHostname="infra-odroidc4-thaumas"

Modifier le nom d'hôte :

hostnamectl set-hostname $newHostname; \
sudo sed -i "s#odroidc4#$newHostname#g" /etc/hosts

Protocole de temps réseau

Installer le paquet systemd permettant de synchroniser le temps via le réseau :

sudo apt install systemd-timesyncd

Définir les serveurs NTP à utilisé pour se synchroniser :

sudo tee /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
EOF

Activer la synchronisation de l'heure via systemd :

sudo timedatectl set-ntp true

Vérifier :

$ sudo timedatectl
               Local time: Tue 2023-08-01 10:31:04 UTC
           Universal time: Tue 2023-08-01 10:31:04 UTC
                 RTC time: Tue 2023-08-01 10:31:04
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Utilisateur

Définir le nom de l'utilisateur :

newUser="alexandre"

Créer un compte utilisateur :

adduser $newUser

Ajouter le nouvel utilisateur au groupe sudo afin de permettre une élévation de privilèges :

adduser $newUser sudo

Se connecter en SSH via ce nouvel utilisateur :

ssh alexandre@192.168.1.221

Personnaliser bash :

tee --append ~/.bashrc <<EOF
# custom
PS1='\${debian_chroot:+($debian_chroot)}\[\033[0;36m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

alias ls='ls --color=auto -lah --group-directories-first'
alias df='df -h --exclude-type=tmpfs --exclude-type=devtmpfs'
EOF

Prendre en compte les changements :

source ~/.bashrc

SSH

Réinstaller le serveur SSH :

sudo apt purge --autoremove --assume-yes openssh-server &&\
sudo rm -r /etc/ssh/; \
sudo apt install --assume-yes openssh-server

Configurer SSH afin de pouvoir se connecter en SSH via une paire de clef.

Redémarrer :

sudo rm /etc/resolv.conf &&\
cd /etc && sudo ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf &&\
sudo reboot

Après le redémarrage, se connecter via la nouvelle IP :

ssh alexandre@192.168.1.6

Pare-feu

Créer les règles du pare-feu (ici on autorise SSH sur le port 22) :

sudo tee /etc/nftables.conf <<EOF
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0;

    # accept any localhost traffic
    iif lo accept

    # accept traffic originated from us
    ct state established,related accept

    # accept neighbour discovery otherwise IPv6 connectivity breaks.
    ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit,  nd-router-advert, nd-neighbor-advert } accept

    ## Custom
    # Allow SSH from ANY
    tcp dport 22 accept

    # count and drop any other traffic
    counter drop
  }
}
EOF

Activer le pare-feu :

sudo systemctl start nftables

Tester une connexion en SSH via un autre terminal. Si cela ne fonctionne pas, utiliser l'interface de Kimsufi pour redémarrer le serveur et corriger le fichier de configuration du pare-feu. Si cela fonctionne, activer le pare-feu au démarrage :

sudo systemctl enable nftables

Complément

Installer un paquet permettant d'avoir une entropie convenable :

sudo apt install haveged

Conclusion

La machine est maintenant prête à recevoir vos services.