/Customiso

Modifiez votre image ISO facilement ! Ajoutez lui des paquets (.deb), configurez l'installation silencieuse (preseed), et ajoutez votre propre script de post-installation ; le tout hors ligne !

Primary LanguagePython

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]