Bonjour,
Je galère un peu… Mon but est de maintenir une machine virtuelle avec kvm comme modèle à répliquer sur diverses machines physiques…
Là, je viens d’avoir le cas où sur la machine physique je dois installer firmware-realtek…
J’installe déjà divers trucs qui peuvent potentiellement servir en fonction du matériel…
Mais, par exemple, existe-t-il un script Debian que je pourrais lancer lors de mon déploiement (chroot) et qui installerait ce qu’il faut en fonction du matériel détecté ?
Comment ce firmware-realtek est-il sensé s’installer lors d’une installation classique ?
Y aurait-il un modèle (propre à Debian si possible) à suivre pour faire ce genre de chose ?
Pour créer l’image, j’ai actuellement un script du genre
#!/bin/bash
[ $(id -u) -eq 0 ] || { echo "Please su - to be root !" ; exit 4 ; }
[ -b /dev/vda ] || { echo "No /dev/vda block device, please verify the context..." ; exit 4 ; }
[ -b /dev/vda1 ] || { echo "No /dev/vda1 block device, please verify the context..." ; exit 4 ; }
ping -c 1 192.168.10.1 &> /dev/null || { echo "NAS (192.168.10.1) unreachable !" ; exit 4 ; }
mkdir -p /mnt/nas || { echo "Making /mnt/nas directory failed !" ; exit 4 ; }
mount -t cifs //192.168.10.1/nas /mnt/nas || { echo "Mounting cifs NAS directory failed !" ; exit 4 ; }
mkdir /mnt/vda1 || { echo "Making /mnt/vda1 directory failed !" ; exit 4 ; }
mount /dev/vda1 /mnt/vda1 || { echo "Mounting /dev/vda1 on /mnt/vda1 failed !" ; exit 4 ; }
cd /mnt/vda1 || { echo "Changing current directory to /mnt/vda1 failed !" ; exit 4 ; }
if [ -d /mnt/vda1/home/user/.mozilla/firefox/*/storage ]
then
rm -r /mnt/vda1/home/user/.mozilla/firefox/*/storage
fi
if [ -d /mnt/vda1/home/user/.cache ] && [ ! -z "$(ls -A /mnt/vda1/home/user/.cache)" ]
then
rm -r /mnt/vda1/home/user/.cache/*
fi
if [ -d /mnt/vda1/tmp ] && [ ! -z "$(ls -A /mnt/vda1/tmp)" ]
then
rm -r /mnt/vda1/tmp/*
fi
curdate=$(date +"%Y%m%d%H%M")
tarfile="/mnt/nas/installation/gnu-vm-vda1-root-$curdate.tar.gz"
echo "Taring /dev/vda1 to file ↓"
echo $tarfile
tar --checkpoint=.1000 --xattrs --xattrs-include=* -czf $tarfile *
Et pour le déploiement j’ai
#!/bin/bash
main ()
{
ping -c 1 192.168.10.1 &> /dev/null || { echo "NAS (192.168.10.1) unreachable !" ; exit 4 ; }
mkdir -p /mnt/nas || { echo "Making /mnt/nas directory failed !" ; exit 4 ; }
mount -t cifs //192.168.10.1/nas /mnt/nas || { echo "Mounting cifs NAS directory failed !" ; exit 4 ; }
if [ $# -lt 3 ] ; then
echo "First argument, target partition device:"
blkid | grep "ext4" | sed 's|^/dev/\(.*\): .*$|\1|'
echo "Second argument, image name:"
ls -ltr /mnt/nas/installation/gnu*.tar.gz| grep "installation/gnu" | sed 's|^.*installation/\(.*\).*$|\1|'
echo "exemple"
echo "installimage.sh sda1 gnu-vm-vda1-root-202302081136.tar.gz op42"
exit 1
fi
local target="$1"
local targetdev="$(readlink -f /dev/$target)"
[ -b "$targetdev" ] || { echo "No $targetdev block device, please verify the context..." ; exit 4 ; }
local targetblk="$(lsblk -no pkname $targetdev)"
local targetblkdev="$(readlink -f /dev/$targetblk)"
[ -b "$targetblkdev" ] || { echo "No $targetblkdev block device, please verify the context..." ; exit 4 ; }
local targetmnt="/mnt/$target"
local tarfile="/mnt/nas/installation/$2"
local hostname="$3"
[ -e $tarfile ] || { echo "Image fil no found." ; echo $tarfile ; exit 4 ; }
local uuid=$(blkid |grep "^$targetdev"|sed 's|^.* UUID="\(.*\)" BLOCK.*$|\1|')
[ -b "/dev/disk/by-uuid/$uuid" ] || { echo "Can’t determine UUID :(" ; exit 4 ; }
mkdir "$targetmnt" || { echo "Making $targetmnt directory failed !" ; exit 4 ; }
mount "$targetdev" "$targetmnt" || { echo "Mounting $targetdev on $targetmnt failed !" ; exit 4 ; }
cd "$targetmnt" || { echo "Changing current directory to $targetmnt failed !" ; exit 4 ; }
[ -e etc ] && { echo "File system should be cleaned first, maybe holding /home parts..." ; exit 4 ; }
tar --checkpoint=.1000 --xattrs --numeric-owner -xpzf "$tarfile"
sed -i "s|^UUID=.* / *ext4 .*$|UUID=$uuid / ext4 errors=remount-ro 0 1|" etc/fstab
sed -i "s|opxx|$hostname|g" etc/hosts
sed -i "s|opxx|$hostname|g" etc/hostname
for dir in dev sys dev/pts proc run ; do mount -B "/$dir" "$dir" || { echo "System directory binding failed..." ; exit 4 ; } ; done
cp /etc/resolv.conf etc/resolv.conf
local efidev=$( blkid | grep -E -i "^$targetblkdev.*vfat.*$" | sed 's|^\(.*\): .*$|\1|' )
local efid=$( blkid | grep "^$efidev" | sed 's|^.* UUID="\(.*\)" BLOCK.*$|\1|' )
if [ -b "/dev/disk/by-uuid/$efid" ] ; then
echo "EFI detected, converting to EFI boot..."
mkdir boot/efi || { echo "Making boot/efi directory failed..." ; exit 4 ; }
echo "UUID=$efid /boot/efi vfat umask=0077 0 1" >> etc/fstab
echo "targetdev=\"$targetblkdev\"" >installvar
chroot . <<'EOF'
. installvar
mount /boot/efi
apt update
aptitude install grub-efi grub-pc-
grub-install "$targetblkdev"
efibootmgr
EOF
else
echo "Keeping legacy boot mode."
echo "targetdev=\"$targetdev\"" >installvar
chroot . <<'EOF'
. installvar
grub-install --force "$targetdev"
update-grub
EOF
fi
echo "All done"
}
main "$@"
Merci d’avance si vous pouvez me donner toutes sortes de conseils pour faire ce genre de choses :)
# debian preseed et autres
Posté par NeoX . Évalué à 5.
pour faire des installations automatisées tu as le fichier preseed qui permet de preconfiguré des listes de choses à faire lors de l'installation et de repondre automatiquement au question de l'installeur
si tu passes par la reinstallation de la machine physique à partir du "modele" virtuelle,
et que tu peux arreter la machine virtuelle, tu peux regarder les outils commes clonezilla, qui permette de cloner en reseau (un clonezilla en mode serveur, un clonezilla en mode client)
tu peux aussi regarder l'option cloud-init qui permet de prerenseigner des infos pour la nouvelle machine, et qui sera "agnostique" de la distrib (redhat, debian, etc)
sinon tu peux regarder du coté de ansible et de son interface web (tower/awx) qui va te permettre de scripter des choses comme des "recettes" (les playbook) pour faire plein de choses à distance sur tes machines une fois l'OS et la clef SSH positionnée.
[^] # Re: debian preseed et autres
Posté par freem . Évalué à 3.
Et ça peut s'automatiser via PXE (histoire de compléter) mais ce n'est pas forcément simple à faire à la main, et je ne connais pas d'outils pour le faire autrement.
# Au passage...
Posté par gUI (Mastodon) . Évalué à 5. Dernière modification le 23 février 2023 à 07:39.
Peut être remplacé par :
En effet, avec
-f
il n'y a pas de retour en erreur si le répertoire n'existe pas. Tu peux le vérifier rapidement :En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.