diff --git a/README.md b/README.md
index 0c41a9a..53a2b77 100644
--- a/README.md
+++ b/README.md
@@ -1,90 +1,102 @@
# UDIB
-UDIB is the Unattended Debian Installation Builder.
-It provides a handy commandline utility for injecting files into Debian installation ISOs.
-Using UDIB, you can preseed an ISO by injecting a preseed file.
-Preseeded ISOs allow fully automated Debian installations on bare metal (or anywhere else).
+UDIB est l'outil de construction d'installation Debian non assistée.
+Il fournit un utilitaire en ligne de commande pratique pour injecter des fichiers dans les ISOs d'installation Debian.
+En utilisant UDIB, vous pouvez préconfigurer un ISO en injectant un fichier de préconfiguration.
+Les ISOs préconfigurés permettent des installations Debian entièrement automatisées sur du matériel nu (ou n'importe où ailleurs).
-## Quick Start Guide
+**Note:** Ce projet est un fork de [YunoHost/custom-debian-iso](https://github.com/YunoHost/custom-debian-iso) qui est lui-même un fork de [ulinja/udib](https://github.com/ulinja/udib).
-This short guide explains how to build a Debian ISO with a customized and automated installation:
+## Guide de démarrage rapide
-1. make sure you have all the [required software](#build-machine) installed
-2. clone this repo and `cd` into your local copy
-3. (optional) create and activate a virtual environment: `python3 -m venv .venv && . .venv/bin/activate`
-4. install the required python packages: `pip install -r requirements.txt`
-5. all the Debian ISOs are available in
-5. create the custom ISOs: `./udib.py inject -i debian-11.10.0-amd64-netinst.iso`
-6. boot from the `-modified.iso` on your target machine (or in a VM)
+Ce guide court explique comment construire un ISO Debian avec une installation personnalisée et automatisée :
-Depending on how many answers you provided in the preseed file, the installation may require some manual interaction.
-Preseed files are very powerful, and if you need more customization you can have a deeper look into [how they work](#whats-preseeding).
-You can also use UDIB to get the full preseed example file: `./udib.py get preseed-file-full` and use that as a starting point.
-Be sure to have a look at the [usage reference](#detailed-usage-guide) for a closer look at UDIB itself.
+1. assurez-vous d'avoir tous les [logiciels requis](#machine-de-construction) installés
+2. clonez ce dépôt et `cd` dans votre copie locale
+3. (optionnel) créez et activez un environnement virtuel : `python3 -m venv .venv && . .venv/bin/activate`
+4. installez les packages python requis : `pip install -r requirements.txt`
+5. tous les ISOs Debian sont disponibles dans
+5. créez les ISOs personnalisés : `./udib.py inject -i debian-11.10.0-amd64-netinst.iso`
+6. démarrez à partir de l'ISO `-modified.iso` sur votre machine cible (ou dans une VM)
-## What's preseeding?
+Selon le nombre de réponses que vous avez fournies dans le fichier de préconfiguration, l'installation peut nécessiter une certaine interaction manuelle.
+Les fichiers de préconfiguration sont très puissants, et si vous avez besoin de plus de personnalisation, vous pouvez regarder plus en détail [comment ils fonctionnent](#quest-ce-que-la-préconfiguration).
+Vous pouvez également utiliser UDIB pour obtenir le fichier d'exemple de préconfiguration complet : `./udib.py get preseed-file-full` et l'utiliser comme point de départ.
+Assurez-vous de jeter un œil à la [référence d'utilisation](#guide-dutilisation-détaillé) pour un regard plus approfondi sur UDIB lui-même.
-A preseed file is a text file which provides the Debian installer with previously set (preseeded) answers during the installation process.
-Preseeding a Debian ISO allows you to heavily reduce the amount of user interaction required during an installation, or even fully automate it.
-The preseed file is written by you and then injected into the installation image.
-When you start the installation, any answers you have provided to the debian installer as part of your preseed file are automatically applied during the installation.
-If you want to know more, you can have a look at Debian's [official guide](https://www.debian.org/releases/stable/amd64/apb.en.html) or at the Debian wiki's [quick overview](https://wiki.debian.org/DebianInstaller/Preseed), both of which explain preseeding much better than I can.
+## Qu'est-ce que la préconfiguration ?
-## How does UDIB work?
+Un fichier de préconfiguration est un fichier texte qui fournit à l'installateur Debian des réponses préalablement définies (préconfigurées) pendant le processus d'installation.
+La préconfiguration d'un ISO Debian vous permet de réduire considérablement la quantité d'interaction utilisateur requise pendant une installation, ou même de l'automatiser entièrement.
+Le fichier de préconfiguration est écrit par vous puis injecté dans l'image d'installation.
+Quand vous démarrez l'installation, toutes les réponses que vous avez fournies à l'installateur debian dans le cadre de votre fichier de préconfiguration sont automatiquement appliquées pendant l'installation.
+Si vous voulez en savoir plus, vous pouvez regarder le [guide officiel](https://www.debian.org/releases/stable/amd64/apb.en.html) de Debian ou l'[aperçu rapide](https://wiki.debian.org/DebianInstaller/Preseed) du wiki Debian, qui expliquent tous deux la préconfiguration bien mieux que je ne peux le faire.
-UDIB's main purpose is the injection files into existing Debian installation ISOs.
-In a nutshell, it does this by extracting the ISO, adding the files to the ISO's initrd, and repacking the ISO again.
-You could do all of this manually of course by following the [basic](https://wiki.debian.org/DebianInstaller/Preseed/EditIso#Adding_a_Preseed_File_to_the_Initrd) and [advanced](https://wiki.debian.org/RepackBootableISO) guides for ISO repacking on the Debian wiki, but UDIB does all of this for you.
+## Comment fonctionne UDIB ?
-# Dependencies
+Le but principal d'UDIB est l'injection de fichiers dans les ISOs d'installation Debian existants.
+En résumé, il fait cela en extrayant l'ISO, en ajoutant les fichiers à l'initrd de l'ISO, et en repackageant l'ISO à nouveau.
+Vous pourriez faire tout cela manuellement bien sûr en suivant les guides [basique](https://wiki.debian.org/DebianInstaller/Preseed/EditIso#Adding_a_Preseed_File_to_the_Initrd) et [avancé](https://wiki.debian.org/RepackBootableISO) pour le repackaging d'ISO sur le wiki Debian, mais UDIB fait tout cela pour vous.
-Using UDIB to create ISOs requires the following software:
+# Dépendances
+
+L'utilisation d'UDIB pour créer des ISOs nécessite les logiciels suivants :
- GNU/Linux
-- `python3` *(3.10.4 known to work)*
- - [required python packages](./requirements.txt) can be installed in a virtual environment
-- `xorriso` *(1.5.4 known to work)*
+- `python3` *(3.10.4 connu pour fonctionner)*
+ - [packages python requis](./requirements.txt) peuvent être installés dans un environnement virtuel
+- `xorriso` *(1.5.4 connu pour fonctionner)*
- **Debian (bullseye):** [xorriso](https://packages.debian.org/bullseye/xorriso)
- **Arch Linux:** [extra/libisoburn](extra/libisoburn)
- GNU `gpg`
- - preinstalled on most distributions
+ - préinstallé sur la plupart des distributions
- GNU `cpio`
- - preinstalled on most distributions
+ - préinstallé sur la plupart des distributions
- GNU `sha512sum`
- - preinstalled on most distributions
+ - préinstallé sur la plupart des distributions
-Internet access is (obviously) required if you want to fetch any files using UDIB.
+Un accès Internet est (évidemment) requis si vous voulez récupérer des fichiers en utilisant UDIB.
-# Detailed usage guide
+# Guide d'utilisation détaillé
-You can view help at the commandline using `./udib.py --help` for general options and `./udib.py COMMAND --help` for help with a specific subcommand.
+Vous pouvez voir l'aide en ligne de commande en utilisant `./udib.py --help` pour les options générales et `./udib.py COMMAND --help` pour l'aide avec une sous-commande spécifique.
-The name and destination of files produced by `udib.py` can be specified with the `--output-file` option.
-Alternatively, you can use the `--output-dir` option to specify the directory where produced files will be saved, without having to name them explicitly (default names will be used).
+Le nom et la destination des fichiers produits par `udib.py` peuvent être spécifiés avec l'option `--output-file`.
+Alternativement, vous pouvez utiliser l'option `--output-dir` pour spécifier le répertoire où les fichiers produits seront sauvegardés, sans avoir à les nommer explicitement (les noms par défaut seront utilisés).
-## Retrieving example preseed files or vanilla ISOs
+## Récupération d'exemples de fichiers de préconfiguration ou d'ISOs vanille
-As a starting point for creating your own preseeded ISO, you can retrieve one of Debian's example preseed files or an unmodified Debian ISO using UDIB:
+Comme point de départ pour créer votre propre ISO préconfiguré, vous pouvez récupérer un des fichiers d'exemple de préconfiguration de Debian ou un ISO Debian non modifié en utilisant UDIB :
```
udib.py [--output-file FILE | --output-dir DIR] get WHAT
```
-`WHAT` must be a specific string and can be either one of:
+`WHAT` doit être une chaîne spécifique et peut être soit :
-- `preseed-file-basic` to download Debian's basic example preseed file (sufficient in most cases)
-- `preseed-file-full` to download Debian's full example preseed file (has a LOT of customization options)
-- `iso` to download the latest, unmodified Debian stable x86-64 netinst ISO
+- `preseed-file-basic` pour télécharger le fichier d'exemple de préconfiguration basique de Debian (suffisant dans la plupart des cas)
+- `preseed-file-full` pour télécharger le fichier d'exemple de préconfiguration complet de Debian (a BEAUCOUP d'options de personnalisation)
+- `iso` pour télécharger le dernier ISO netinst Debian stable x86-64 non modifié
-## Injecting files into an ISO
+## Injection de fichiers dans un ISO
-To inject existing files into an ISO, you can run the following command:
+Pour injecter des fichiers existants dans un ISO, vous pouvez exécuter la commande suivante :
-```
-udib.py [--output-file FILE | --output-dir DIR] inject [--image-file IMAGEFILE] FILE [FILE ...]
+```bash
+python udib.py --output-file skylanix.iso inject --image-file debian-12.11.0-amd64-netinst.iso
```
-where `FILE` is the path to the file you want to inject.
-Injected files are added at the root of the installer's filesystem and can be accessed there during the installation.
-**NOTE:** the installer will not recognize a preseed file unless it's filename is `preseed.cfg` exactly.
-If you don't specify an `--image-file`, UDIB will download the latest Debian x86-64 netinst ISO and inject your `FILE`s into it.
+Le script injecte automatiquement tous les fichiers présents dans le dossier `files_to_inject/` :
+- Configuration GRUB personnalisée (`boot/grub/grub.cfg` et thème)
+- Configuration isolinux (`isolinux/menu.cfg` et `splash.png`)
+- Logo personnalisé (`logo.png`)
+- Fichier de préconfiguration (`preseeds/default.preseed`)
+
+**Exemple complet :**
+```bash
+# Créer un ISO personnalisé "skylanix.iso" à partir de l'ISO Debian standard
+python udib.py --output-file skylanix.iso inject --image-file debian-12.11.0-amd64-netinst.iso
+```
+
+**NOTE:** l'installateur ne reconnaîtra pas un fichier de préconfiguration sauf si son nom de fichier est exactement `preseed.cfg`.
+Si vous ne spécifiez pas d'`--image-file`, UDIB téléchargera le dernier ISO netinst Debian x86-64 et injectera vos fichiers dedans.
\ No newline at end of file
diff --git a/core/utils.py b/core/utils.py
index d7e1256..30218f1 100644
--- a/core/utils.py
+++ b/core/utils.py
@@ -1,6 +1,7 @@
"""A collection of general utilities, not specific to any module."""
-from crypt import crypt, METHOD_SHA512
+import hashlib
+import secrets
from getpass import getpass
from os import remove, rename
from pathlib import Path
@@ -36,8 +37,13 @@ def hash_user_password(printer=None):
p.failure("Passwords did not match")
return
+ # Generate a salt and create SHA-512 hash
+ salt = secrets.token_hex(16)
+ password_hash = hashlib.sha512((salt + password).encode()).hexdigest()
+ full_hash = f"$6${salt}${password_hash}"
+
p.info("Password hash:")
- p.info(crypt(password, METHOD_SHA512))
+ p.info(full_hash)
def assert_system_dependencies_installed():
"""Checks whether all system dependencies required by udib are installed.
diff --git a/files_to_inject/boot/grub/theme/logo.png b/files_to_inject/boot/grub/theme/logo.png
index 08238d5..4ac2c68 100644
Binary files a/files_to_inject/boot/grub/theme/logo.png and b/files_to_inject/boot/grub/theme/logo.png differ
diff --git a/files_to_inject/isolinux/menu.cfg b/files_to_inject/isolinux/menu.cfg
index b8c66e4..296895f 100644
--- a/files_to_inject/isolinux/menu.cfg
+++ b/files_to_inject/isolinux/menu.cfg
@@ -1,7 +1,7 @@
menu hshift 11
menu width 57
-menu title YunoHost installation
+menu title skylanix installation
menu background splash.png
menu color title * #FFFFFFFF *
diff --git a/files_to_inject/isolinux/splash.png b/files_to_inject/isolinux/splash.png
old mode 100644
new mode 100755
index d8bbdb7..0c5c752
Binary files a/files_to_inject/isolinux/splash.png and b/files_to_inject/isolinux/splash.png differ
diff --git a/files_to_inject/logo.png b/files_to_inject/logo.png
old mode 100644
new mode 100755
index c9cab92..a2c44b9
Binary files a/files_to_inject/logo.png and b/files_to_inject/logo.png differ
diff --git a/files_to_inject/preseeds/default.preseed b/files_to_inject/preseeds/default.preseed
old mode 100644
new mode 100755
index ed3fdb1..f360032
--- a/files_to_inject/preseeds/default.preseed
+++ b/files_to_inject/preseeds/default.preseed
@@ -1,116 +1,68 @@
-### Network configuration
+# Configuration de la langue et de la localisation
+d-i debian-installer/locale string fr_CH.UTF-8
+d-i preseed/early_command string debconf-set-selections /tmp/preseed.cfg
+
+# Configuration du clavier
+d-i keyboard-configuration/modelcode string pc105
+d-i keyboard-configuration/variantcode string fr
+
+# Configuration réseau (choix automatique de la première interface active)
d-i netcfg/choose_interface select auto
-d-i netcfg/dhcp_failed note
-d-i netcfg/dhcp_options select Configure network manually
-d-i netcfg/disable_dhcp boolean false
-d-i netcfg/get_hostname string yunohost
-d-i netcfg/get_domain string yunohost.org
+d-i netcfg/get_hostname string skylanix
+d-i netcfg/get_hostname seen false
+d-i netcfg/get_domain string unassigned-domain
-### Mirror settings
-d-i mirror/country string manual
-d-i mirror/http/hostname string ftp.debian.org
-d-i mirror/http/directory string /debian
-d-i mirror/http/proxy string
+# Désactivation du compte root
+d-i passwd/root-login boolean false
-### Localization
+# Partitionnement manuel (sans partitionnement automatique)
+d-i partman-auto/method string
+d-i partman-auto/choose_recipe select
+d-i partman-partitioning/confirm_write_new_label boolean false
+d-i partman/confirm boolean false
+d-i partman/confirm_nooverwrite boolean false
-d-i tzdata/Areas select Europe
-d-i localechooser/continentlist select Europe
-d-i time/zone string Europe/Paris
-d-i time/zone seen false
+# Configuration de l'horloge système
d-i clock-setup/utc boolean true
+d-i time/zone string Europe/Zurich
+d-i time/zone seen false
d-i clock-setup/ntp boolean true
-d-i clock-setup/ntp-server string 0.fr.pool.ntp.org
+d-i clock-setup/ntp seen false
-### Partitioning
-d-i partman-auto/method string lvm
-d-i partman-lvm/device_remove_lvm boolean true
-d-i partman-md/device_remove_md boolean true
-d-i partman-auto/choose_recipe select atomic
-# "atomic" corresponds to:
-# https://salsa.debian.org/installer-team/partman-auto/-/blob/162/recipes/atomic
-# https://salsa.debian.org/installer-team/partman-auto/-/blob/162/recipes-amd64-efi/atomic
-d-i partman-lvm/device_remove_lvm_span boolean true
-d-i partman-auto/purge_lvm_from_device boolean true
-d-i partman-auto-lvm/new_vg_name string system
-d-i partman-lvm/confirm boolean true
-d-i partman-auto-lvm/guided_size string max
-
-d-i partman/confirm_write_new_label boolean true
-# These lines are commented to keep displaying the partitioning info and ask confirmation
-# because it's deemed to brutal to savagely format the disk without asking confirmation here
-#d-i partman/choose_partition select finish
-#d-i partman/confirm boolean true
-d-i partman/confirm_nooverwrite boolean true
-d-i partman-lvm/confirm_nooverwrite boolean true
-
-### Account setup
-d-i passwd/root-password-crypted password $1$6xBdkGvE$8nLCNRxwABespdFJniEiX0
-d-i passwd/make-user boolean false
-
-### Base system installation
-d-i apt-setup/non-free boolean false
-d-i apt-setup/contrib boolean true
-
-d-i apt-setup/services-select multiselect security, updates
-d-i apt-setup/security_host string security.debian.org
-
-d-i apt-setup/local0/repository string \
- http://repo.yunohost.org/debian/ __DIST__ stable __TESTING__
-d-i apt-setup/local0/key string http://repo.yunohost.org/keys/yunohost___DIST__.asc
-d-i apt-setup/local0/comment string YunoHost repository
-#d-i debian-installer/allow_unauthenticated string true
-
-# Skip "scan another CD/DVD"
-# https://unix.stackexchange.com/a/409237
-apt-cdrom-setup apt-setup/cdrom/set-next boolean false
+# Configuration APT : ne pas utiliser en priorité le CD-ROM comme source
d-i apt-setup/cdrom/set-first boolean false
-d-i apt-setup/cdrom/set-next boolean false
-d-i apt-setup/cdrom/set-failed boolean false
-### Package selection
-tasksel tasksel/first multiselect standard, ssh-server
-# Keep postfix in here, otherwise exim4 might get installed and create a weird
-# conflict...
-d-i pkgsel/include string postfix yunohost yunohost-admin
-d-i pkgsel/upgrade select none
+# Activation des dépôts non-free
+d-i apt-setup/non-free boolean true
-### Deactivate poll on popular packages
-popularity-contest popularity-contest/participate boolean false
-debconf debconf/frontend select Noninteractive
+# Sélection des tâches à installer
+tasksel tasksel/first multiselect minimal
-### Boot loader installation
+# Paquets additionnels à installer
+d-i pkgsel/include string \
+ kde-plasma-desktop \
+ vim \
+ wget \
+ curl \
+ git \
+ htop \
+ network-manager \
+ spice-vdagent
+
+# Ajout du dépôt XanMod et installation du kernel
+d-i preseed/late_command string \
+ in-target mkdir -p /etc/apt/keyrings ; \
+ in-target wget -qO /etc/apt/keyrings/xanmod-archive-keyring.gpg https://dl.xanmod.org/archive.key ; \
+ in-target sh -c "echo 'deb [signed-by=/etc/apt/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org trixie main' > /etc/apt/sources.list.d/xanmod.list" ; \
+ in-target apt-get update ; \
+ in-target apt-get install -y linux-xanmod-x64v3
+
+# Installation de GRUB
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
-d-i grub-installer/bootdev string default
-### Finishing up the installation
+# Demander à l'utilisateur de choisir où installer GRUB
+d-i grub-installer/bootdev seen false
+
+# Message indiquant que le redémarrage est en cours
d-i finish-install/reboot_in_progress note
-d-i cdrom-detect/eject boolean true
-d-i debian-installer/exit/reboot boolean true
-
-### YunoHost Debconf (same than in yunohost/install_script)
-slapd slapd/password1 password yunohost
-slapd slapd/password2 password yunohost
-slapd slapd/domain string yunohost.org
-slapd shared/organization string yunohost.org
-slapd slapd/allow_ldap_v2 boolean false
-slapd slapd/invalid_config boolean true
-slapd slapd/backend select MDB
-postfix postfix/main_mailer_type select Internet Site
-postfix postfix/mailname string /etc/mailname
-mysql-server-5.5 mysql-server/root_password password yunohost
-mysql-server-5.5 mysql-server/root_password_again password yunohost
-mariadb-server-10.0 mysql-server/root_password password yunohost
-mariadb-server-10.0 mysql-server/root_password_again password yunohost
-nslcd nslcd/ldap-bindpw password
-nslc nslcd/ldap-starttls boolean false
-nslcd nslcd/ldap-reqcert select
-nslcd nslcd/ldap-uris string ldap://localhost/
-nslcd nslcd/ldap-binddn string
-nslcd nslcd/ldap-base string dc=yunohost,dc=org
-libnss-ldapd libnss-ldapd/nsswitch multiselect group, passwd, shadow
-postsrsd postsrsd/domain string yunohost.org
-
-### Avoid circular dependencies error
-d-i preseed/early_command string apt-install debhelper || true