Page modifiée le :

Debian Bookworn avec kernel v 6.1 sur Odroid Xu4

Copie de l'image

En remplaçant /dev/sdX par la bonne valeur

root@deb:/home/bruno# dd if=./Armbian_24.2.1_Odroidxu4_bookworm_current_6.1.77_minimal.img of=/dev/sdX bs=2048

Première connection

Il faut trouver l'adresse IP de la carte soit sur l'écran connecté en hdmi à l'Xu4, soit dans l'interface de la box (Bails DHCP actifs). On se connecte en root avec le mot de passe provisoire 1234

bruno@deb:~$ ssh root@192.168.0.100

Création d'un mot de passe root, d'un utilisateur (odroid ici), timezone et locales.

Ajout d'une clef pour se connecter par clef :

Après avoir créé une paire de clef son son ordinateur servant à se connecter à l'Xu4, on l'a copie sur l'Xu4.

bruno@deb:~$ ssh-copy-id -i /home/bruno/.ssh/id_rsa.pub root@192.168.0.100
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/bruno/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.100's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.0.100'"
and check to make sure that only the key(s) you wanted were added.

bruno@deb:~$ ssh root@192.168.0.100

On fait de même avec l'utilisateur odroid

On essai de se connecter à l'utilisateur nouvellement créé, puis à root, normalement, plus de mot de passe demandé. Si ok, on peut supprimer la connexion directe à root et par mot de passe.

root@odroidxu4:~# nano /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no

Hostname

Pour remplacer odroidxu4 par votre nom personnel de machine (omega ici), faire les modifs dans ces deux fichiers.

root@odroidxu4:~# nano /etc/hostname
root@odroidxu4:~# nano /etc/hosts

ipv6 fixe

NetworkManager est utilisé pour créer, gérer, supprimer des connexions réseau. Là, on définie une adresse ipv6 de la plage d'adresses fournie par le fournisseur d'accès. (! A adapter selon votre plage d'adresses)

root@omega:~# nmcli connection add type ethernet con-name "Ipv6 fixe" ipv6.addresses 2a01:e0a:195:1040:cdaf:219b:207e:d823/64 ipv6.method manual
root@omega:~# nmcli connection mod "Ipv6 fixe" ipv6.gateway fe80::
root@omega:~# nmcli connection mod "Ipv6 fixe" ipv6.dns fd0f:ee:b0::1,2001:4860:4860::8888
root@omega:~# nmcli c down "Ipv6 fixe" && nmcli c up "Ipv6 fixe"
Connection 'Ipv6 fixe' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
root@omega:~# nmcli -p connection show
======================================
  NetworkManager connection profiles
======================================
NAME            UUID                                  TYPE      DEVICE          
-----------------------------------------------------------------------------------------------------------------------
Ipv6 fixe       c4ba93b7-d225-39c3-9e2d-5f665ad729d3  ethernet  enx001e06300937 
lo              2bf4146f-7aae-43d7-a8e3-8968b500cb96  loopback  lo              
root@omega:~#

root@omega:/home/odroid# cat /etc/NetworkManager/system-connections/Ipv6\ fixe.nmconnection 
[connection]
id=Ipv6 fixe
uuid=85da0bb7-1825-404a-aa92-fc3b4d94a6e2
type=ethernet
timestamp=1711381369

[ethernet]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=default
address1=2a01:e0a:195:1040:cdaf:219b:207e:d823/64,fe80::
dns=fd0f:ee:b0::1;2001:4860:4860::8888;
method=manual

[proxy]

Pour une interface graphique

root@odroidxu4:~# nmtui

Pour vérifier

root@odroidxu4:~# ip address | grep inet6
    inet6 ::1/128 scope host noprefixroute 
    inet6 2a01:e0a:195:1040:cdaf:219b:207e:d823/64 scope global noprefixroute 
    inet6 fe80::3d92:5d30:67d1:10bd/64 scope link noprefixroute 
root@odroidxu4:~#

les 3 addresses (locale, adresse fixe, lien réseau local)

Pour l'ipv4, j'ai définie une adresse privée fixe dans la box (192.168.0.100). En cas de ré-installation complète, cela permet de garder l'adresse. Effectuez une translation d'adresse (NAT) pour un accès ipv4 depuis internet.

On redémarre

root@odroidxu4:~# reboot

On met à jour

odroid@omega:~$ sudo apt update
odroid@omega:~$ sudo apt upgrade

Montage du disque externe

Trouvez UUID de la partition à monter (sda1 ici)

root@omega:/home/odroid# lsblk -o name,uuid
NAME         UUID
sda          
└─sda1       2dadfe57-6d61-43a2-b38c-c264a84f8a80
mmcblk1      
└─mmcblk1p1  83630b40-b297-4624-bf44-feede454fdd0
mmcblk1boot0 
mmcblk1boot1 
zram0        
zram1        
zram2        
root@omega:/home/odroid# 

Pour ajouter un disque externe branché en usb, créez un répertoire et éditez le fichier /etc/fstab :

odroid@omega:~$ sudo -s
[sudo] Mot de passe de odroid : 
root@omega:/home/odroid# mkdir /srv/hdd
root@omega:/home/odroid# nano /etc/fstab

UUID=2dadfe41-6e61-43b2-b48c-c264a83a8a80       /srv/hdd        ext4    rw,noatime 0 0

root@omega:/home/odroid# systemctl daemon-reload
root@omega:/home/odroid# mount /srv/hdd

motd

Pour modifier la page d'accueil lors d'un accès ssh, cela se passe dans

/etc/update-motd.d/

Dans le fichier 30-armbian-sysinfo, Modifier ip -4 en ip, quelque echo pour faire des saut de ligne.

bruno@deb:~$ ssh odroid@omega.ducouet.fr
  ___      _           _     _  __  ___   _ _  _   
 / _ \  __| |_ __ ___ (_) __| | \ \/ / | | | || |  
| | | |/ _` | '__/ _ \| |/ _` |  \  /| | | | || |_ 
| |_| | (_| | | | (_) | | (_| |  /  \| |_| |__   _|
 \___/ \__,_|_|  \___/|_|\__,_| /_/\_\\___/   |_|  

Welcome to Armbian 24.2.1 Bookworm with Linux 6.1.79-current-odroidxu4

System load:   1%               Up time:       2 days 2:45
Memory usage:  7% of 1.94G  
IP:            
192.168.0.100
2a01:e0a:195:1040:cdaf:219b:207e:d823
fe80::3d92:5d30:67d1:10bd
CPU temp:      49°C             Usage of /:    9% of 29G    
storage/:      24% of 440G   

Tip of the day: Check what is new in Armbian v24.2 https://www.armbian.com/newsflash/armbian-24-2-kereru/

Last login: Thu Mar 28 17:09:32 2024 from 2a01:e0a:195:1040:8bf7:102f:4cf0:13f6
odroid@omega:~$ 

J'ai toutes mes adresses IPs qui s'affichent.

Serveur web Apache et php

root@omega:/home/odroid# apt install apache2 libapache2-mod-php
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
Les paquets supplémentaires suivants seront installés : 
  apache2-bin apache2-data apache2-utils libapache2-mod-php8.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libicu72 liblua5.3-0 libmagic-mgc libmagic1 libsodium23 libxml2 php-common php8.2-cli php8.2-common
  php8.2-opcache php8.2-readline
Paquets suggérés :
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser php-pear file
Paquets recommandés :
  ssl-cert
Les NOUVEAUX paquets suivants seront installés :
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php libapache2-mod-php8.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libicu72 liblua5.3-0 libmagic-mgc libmagic1 libsodium23 libxml2 php-common
  php8.2-cli php8.2-common php8.2-opcache php8.2-readline
0 mis à jour, 21 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 15,8 Mo dans les archives.
Après cette opération, 66,2 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
...

root@omega:~# apt install php-sqlite3 php-xml

fail2ban / reaction

https://blog.ppom.me/fr-reaction/

root@omega:/home/odroid# ls -l /usr/local/bin
total 5792
-rwxr-xr-x 1 root root     370 12 févr. 09:41 hdmi-hotplug
-rwxr-xr-x 1 root root  371084 21 mars  16:49 ip46tables
-rwxr-xr-x 1 root root  371048 21 mars  16:49 nft46
-rwxr-xr-x 1 root root 5177496 21 mars  16:49 reaction
root@omega:/home/odroid# cat /etc/systemd/system/reaction.service
[Unit]
Description=A daemon that scans program outputs for repeated patterns, and takes action.
Documentation=https://framagit.org/ppom/reaction-wiki

[Service]
ExecStart=/usr/local/bin/reaction start -c /etc/reaction.jsonnet
StateDirectory=reaction
RuntimeDirectory=reaction
WorkingDirectory=/var/lib/reaction

[Install]
WantedBy=multi-user.target
root@omega:/home/odroid#
root@omega:/home/odroid# cat /etc/reaction.jsonnet 
// This is the extensive configuration used on a **real** server!

local banFor(time) = {
  ban: {
    cmd: ['ip46tables', '-w', '-A', 'reaction', '-s', '<ip>', '-j', 'DROP'],
  },
  unban: {
    after: time,
    cmd: ['ip46tables', '-w', '-D', 'reaction', '-s', '<ip>', '-j', 'DROP'],
  },
};

{
  patterns: {
    // IPs can be IPv4 or IPv6
    // ip46tables (C program also in this repo) handles running the good commands
    ip: {
      regex: @'(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|(?:(?:[0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?:(?::[0-9a-fA-F]{1,4}){1,6})|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(?::[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(?:ffff(?::0{1,4}){0,1}:){0,1}(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]))',

      ignore: ['127.0.0.1', '::1',],
      // Ignore les adresses IPv6 locales
      ignoreregex: [@'2a01:e0a:195:1040:.*'],
    },
  },

  start: [
    ['ip46tables', '-w', '-N', 'reaction'],
    ['ip46tables', '-w', '-I', 'INPUT', '-p', 'all', '-j', 'reaction'],
  ],
  stop: [
    ['ip46tables', '-w', '-D', 'INPUT', '-p', 'all', '-j', 'reaction'],
    ['ip46tables', '-w', '-F', 'reaction'],
    ['ip46tables', '-w', '-X', 'reaction'],
  ],

  streams: {
    // Ban hosts failing to connect via ssh
    ssh: {
      cmd: ['journalctl', '-fn0', '-u','ssh'],
      filters: {
        failedlogin: {
          regex: [
            @'authentication failure;.*rhost=<ip>',
            @'Connection (reset|closed) by (authenticating|invalid) user .* <ip>',
            @'Failed password for .* from <ip>',
          ],
          retry: 2,
          retryperiod: '48h',
          actions: banFor('336h'),
        },
      },
    },

    // Ban invalid http request
    http: {
      cmd: ['tail', '-fn0', '/var/log/apache2/error.log'],
      filters: {
        baduser: {
          regex: [
                @'^\[.*\] \[php:error\] \[.*\] \[client <ip>.*\] script .* not found or unable to stat',
          ],
          retry: 3,
          retryperiod: '24h',
          actions: banFor('168h'),
        },
      },
    },

  },
}
root@omega:/home/odroid# 

root@omega:/home/odroid# systemctl daemon-reload
root@omega:/home/odroid# systemctl enable reaction.service
Created symlink /etc/systemd/system/multi-user.target.wants/reaction.service → /etc/systemd/system/reaction.service.
root@omega:/home/odroid# systemctl start reaction.service
root@omega:/home/odroid# systemctl status reaction
● reaction.service - A daemon that scans program outputs for repeated patterns, and takes action.
     Loaded: loaded (/etc/systemd/system/reaction.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-04-07 18:18:17 CEST; 4 days ago
       Docs: https://framagit.org/ppom/reaction-wiki
   Main PID: 27005 (reaction)
      Tasks: 18 (limit: 4442)
     Memory: 4.6M
        CPU: 2min 16.563s
     CGroup: /system.slice/reaction.service
             ├─27005 /usr/local/bin/reaction start -c /etc/reaction.jsonnet
             ├─27021 tail -fn0 /var/log/apache2/error.log
             └─27023 journalctl -fn0 -u ssh

avril 11 15:31:06 omega reaction[27005]: 2024/04/11 15:31:06 INFO  ssh.failedlogin: match [222.113.80.162]
avril 11 15:48:50 omega reaction[27005]: 2024/04/11 15:48:50 INFO  ssh.failedlogin: match [2001:470:2cc:1:a599:5036:213b:47fd]
avril 11 16:00:38 omega reaction[27005]: 2024/04/11 16:00:38 INFO  ssh.failedlogin: match [65.20.249.180]
avril 11 16:05:07 omega reaction[27005]: 2024/04/11 16:05:07 INFO  ssh.failedlogin: match [182.75.197.174]
avril 11 16:36:00 omega reaction[27005]: 2024/04/11 16:36:00 INFO  ssh.failedlogin: match [60.246.152.189]
avril 11 17:11:12 omega reaction[27005]: 2024/04/11 17:11:12 INFO  ssh.failedlogin: match [185.199.98.51]
avril 11 17:11:12 omega reaction[27005]: 2024/04/11 17:11:12 INFO  ssh.failedlogin.ban: run [ip46tables -w -A reaction -s 185.199.98.51 -j DROP]
avril 11 17:33:03 omega reaction[27005]: 2024/04/11 17:33:03 INFO  ssh.failedlogin: match [49.65.1.179]
avril 11 17:54:03 omega reaction[27005]: 2024/04/11 17:54:03 INFO  ssh.failedlogin: match [121.66.124.148]
avril 11 18:34:15 omega reaction[27005]: 2024/04/11 18:34:15 INFO  http.baduser: match [37.165.198.45]
root@omega:/home/odroid# 

Rclone

Gestion du ventilateur :

Pour avoir la température avec thermal_zone[0-4] (Lecture seule).

root@omega:/home/odroid# cat /sys/devices/virtual/thermal/thermal_zone[0-4]/temp
43000
42000
46000
44000
43000
root@omega:/home/odroid#

Pour gérer les vitesses du ventilateur (de 0 à 255) (lecture écriture).

root@omega:/home/odroid# cat /sys/devices/platform/pwm-fan/hwmon/hwmon0/device/fan_speed
0 120 180 240 root@omega:/home/odroid# 
root@omega:/home/odroid# echo "0 90 150 254" > /sys/devices/platform/pwm-fan/hwmon/hwmon0/device/fan_speed
root@omega:/home/odroid# cat /sys/devices/platform/pwm-fan/hwmon/hwmon0/device/fan_speed
0 90 150 254 root@omega:/home/odroid# 
root@omega:/home/odroid#

Pour gérer les seuils de déclenchement des différentes vitesses avec trip_point_[0-2]_temp (lecture écriture).

root@omega:/home/odroid# cat  /sys/devices/virtual/thermal/thermal_zone0/trip_point_[0-2]_temp
echo '58000' >  /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp

Pour pérenniser les modifications des vitesses du ventilateur et des différents seuils de déclenchement, ajoutez les "echo" dans le fichier /etc/rc.local.

Gestion des performances du processeur :

nano /etc/default/cpufrequtils

Pour voir le governor actuellement utilisé

cat /sys/devices/system/cpu/cpu[0-7]/cpufreq/scaling_governor

Pour voir les fréquences

root@omega:/home/odroid# cat /sys/devices/system/cpu/cpu[0-7]/cpufreq/cpuinfo_cur_freq
900000
900000
900000
900000
600000
600000
600000
600000
root@omega:/home/odroid#

Pour tout savoir sur les différents core du CPU :

root@omega:/home/odroid# /usr/bin/cpufreq-info

Pour les gérer de façon perenne avec le fichier /etc/default/cpufrequtils

root@omega:/home/odroid# nano /etc/default/cpufrequtils  

ENABLE=true
MIN_SPEED=600000
MAX_SPEED=2000000
GOVERNOR=schedutil