Projet universitaire (UPJV) - M1 INFO 2023
Modifiez votre image ISO Debian facilement ! Ajoutez lui des paquets (.deb), configurez l'installation silencieuse (preseed), et ajoutez votre propre script de post-installation ; le tout hors-ligne !
Customiso est un programme avec une interface en ligne de commande (CLI).
Une commande de base : customiso
. Cette commande a deux commandes enfants, à savoir customiso generate
et customiso make
.
L’objectif est d’automatiser le processus de modification d’une image ISO Linux Debian afin de :
- Configurer de l’installation silencieuse ;
- Ajouter de paquets « .deb » et installer automatiquement ces derniers ;
- Ajouter des fichiers personnalisés à des emplacements spécifiques de l’arborescence ;
- Ajouter un script de post installation personnalisé. La simplicité d’usage est la devise de Customiso !
Permet de générer un fichier YAML avec un ensemble d’informations relatives à la modification souhaitée de l’image ISO. Exemple d'utilisation :
customiso generate -c /tmp/config.yaml
Permet, avec un fichier YAML correctement formaté en entrée (comme celui généré par Customiso Generate), de modifier l’image ISO en conséquence du fichier passé en paramètre. Exemple d'utilisation :
customiso make -c "/tmp/config.yaml" -i "debian-11.7.0-amd64-DVD-1.iso" -o "debian_custom"
En plus de cette documentation, utilisez l'option --help
pour chaque commande enfant.
Une page man
est également disponnible.
Vous devrez avoir Python (3.9 ou 3.10 => testé) avec pip et pyenv.
sudo apt update
sudo apt install python3 python3-pip python3-pyenv
wget --content-disposition customiso.tanguynicolas.fr
sudo apt install ./customiso-v1-0-0.deb
customiso check
Le programme est installé sur votre système suivant cette arborescence :
/
├── usr
│ ├── bin
│ ├── lib
│ │ └── customiso
│ └── share
│ └── man
│ └── man1
└── var
└── lib
└── customiso
Les dépendances sont les mêmes que pour les utilisateurs.
Pour les distributions Arch-based ou RHEL-based, il faudra ajouter Apt et Dpkg.
Exemple sur Manjaro avec yay :
yay -Sy apt dpkg
git clone [email protected]:Tanguy00/Customiso.git && cd Customiso
python -m venv .pyenv
source .pyenv/bin/activate # On entre dans l'env
pip install -r requirements.txt
Veillez à être dans l'environnement virtuel.
python src/customiso --help
Directive | Description | Valeur |
---|---|---|
preseed.localization.language | La langue parlée/écrite pour l'installation. | "ask", [string] |
preseed.localization.country | Le pays de résidence. | "ask", [string] |
preseed.localization.locale | La langue parlée/écrite. | "ask", [string] |
preseed.localization.keymap | La langue du clavier. | "ask", [string] |
preseed.clock_time_zone.timezone | Le fuseau horaire. | "ask", [string] |
preseed.network.hostname | Le nom d'hôte. | "ask", [string] |
preseed.network.domain | Le domaine. | "ask", "none", [string] |
preseed.network.advanced.ip_config | Si le système dispose ou non d'internet pour l'installation. | "ask", [boolean] |
preseed.mirror.http_hostname | L'hôte HTTP pour le miroir. | "ask", [string] |
preseed.mirror.http_proxy | Le proxy HTTP pour le miroir. | "ask", "none", [string] |
preseed.accounting.root.enable | Indique si le compte root est activé. | [boolean] |
preseed.accounting.root.password | Le mot de passe chiffré du compte root. | "ask", [string] |
preseed.accounting.user.fullname | Le nom complet de l'utilisateur. | "ask", [string] |
preseed.accounting.user.username | Le nom d'utilisateur. | "ask", [string] |
preseed.accounting.user.password | Le mot de passe chiffré de l'utilisateur. | "ask", [string] |
preseed.partitionning.predefined_mode | Le mode de partitionnement prédéfini. | "ask", 0, 1, 2, 3 |
preseed.packages.tasksel | Les composants du système à installer. Valeurs possibles : 'standard', 'desktop', 'gnome-desktop', 'kde-desktop', 'xfce-desktop', 'web-server', 'ssh-server'. | "ask", [list(string)] |
preseed.packages.popularity_contest | Si vous souhaitez participer à popularity_contest. | "ask", [boolean] |
preseed.finishing.reboot_message | Indique si un message de redémarrage est affiché. | "ask", [boolean] |
preseed.finishing.device_eject | Indique si l'éjection du support est activée. | "ask", [boolean] |
additional_packages | Les packages additionnels à installer. | "none", [list(string)] |
additional_files | Les fichiers additionnels à ajouter et leur futur emplacement. | "none", [list("from": [string], "to": [string])] |
post_install_script | Le script exécuté après l'installation. | "none", [string] |