Customiso
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 !
Présentation
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 !
Customiso Generate
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
Customiso Make
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"
Documentation
En plus de cette documentation, utilisez l'option --help
pour chaque commande enfant.
Une page man
est également disponnible.
Setup du projet (pour les utilisateurs)
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
Setup du projet (pour les développeurs)
Dépendances
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
Setup
git clone git@github.com:Tanguy00/Customiso.git && cd Customiso
python -m venv .pyenv
source .pyenv/bin/activate # On entre dans l'env
pip install -r requirements.txt
Utilisation
Veillez à être dans l'environnement virtuel.
python src/customiso --help
Fichier de configuration Customiso
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] |