Il est devenu courant d’installer sa distribution Linux à partir d’une clé USB. (Ubuntu fournit sa méthode, et il existe aussi lili, pour ne citer qu’eux). En ce moment je joue avec de l’OpenSolaris pour en faire des SAN (zfs rocks) sur du matériel SuperMicro (chassis et carte-mère).
Notre souci est l’installation rapide de SAN en cas de crash.
Même si ce type de serveur offre de l’IPMI, l’installation via le virtual cdrom est assez longue…et par le réseau c’est lourd. Or ces carte-mères ont des ports USB internes (sur le bord, en bas à gauche de la photo). Il est possible de télécharger un fichier .usb et d’en faire une clé USB boutable contenant OpenSolaris. D’où l’idée de mettre une clé USB OpenSolaris dedans, et de commander le boot sur le disque USB dans le BIOS en cas de réinstallation.
L’autre idée était d’ajouter quelques scripts shell de post-installation, et quelques fichiers ZIP contenant des pilotes et/ou utilitaires non intégrés dans la distribution OpenSolaris, de manière a pouvoir les appeler via le déport KVM de la console IPMI.
Pour cela il nous faut, dans un environnement OpenSolaris installé :
- Télécharger l’ISO osol-dev-134-x86.iso depuis Genunix
- Modifier l’image ISO
- Convertir cette nouvelle image ISO en fichier .usb
- Créer notre clé USB (1Go suffit)
La partie qui requière un poil soyeux et abondant, est celle de la modification de l’image ISO. Heureusement il y a des wookies en Chine. Le script modifié que voici (bash, x86 only) vous permettra de créer une image ISO modifiée de oso-dev-134-x86.iso.
#!/usr/bin/bash # # Author : mishuang # URL : http://blogold.chinaunix.net/u/23177/showart_2182517.html # Updated by Hugues Lepesant # LOFIADM=/usr/sbin/lofiadm AWK=/usr/gnu/bin/awk GSED=/usr/bin/gsed UMOUNT=/usr/sbin/umount MOUNT=/usr/sbin/mount GREP=/usr/gnu/bin/grep GZIP=/usr/bin/gzip MKDIR=/usr/gnu/bin/mkdir FIND=/usr/gnu/bin/find CPIO=/usr/bin/cpio MKISOFS=/usr/bin/mkisofs ISO_FILE="/export/home/hugues/iso/osol-dev-134-x86.iso" ISO_NEW_FILE=$(printf "%s/%s" $(dirname ${ISO_FILE}) "osol-dev-134-x86_custom.iso") ISO_MNT_DIR="/mnt/osol" ISO_TMP_DIR="/var/tmp/osol" BA_MNT_DIR="/mnt/boot_archive" BA_FILE="/var/tmp/boot_archive" CP='/bin/cp -f' RM='/bin/rm -rf' function clear_lofi { lofis=$(${LOFIADM} | ${AWK} '/\/dev\/lofi/{print $1}') for lofi in ${lofis} do ${LOFIADM} -d ${lofi} done } function set_kbd_lang { ${GSED} -i -e 's/kbd -s/& US-English/' -e 's/set_lang/& default/' $1/lib/svc/method/media-fs-root } function create_x86_iso { ${UMOUNT} ${ISO_MNT_DIR} ${UMOUNT} ${BA_MNT_DIR} clear_lofi ${RM} ${ISO_TMP_DIR} ${BA_FILE} ${RM} ${ISO_NEW_FILE} ${MKDIR} -p ${ISO_MNT_DIR} ${ISO_TMP_DIR} ${BA_MNT_DIR} iso_lofi=$(${LOFIADM} -a ${ISO_FILE}) ${MOUNT} -F hsfs ${iso_lofi} ${ISO_MNT_DIR} cd ${ISO_MNT_DIR} ${FIND} . -depth -print | ${CPIO} -pdum ${ISO_TMP_DIR} cd - for dir in "" "amd64" do ${GZIP} -cd ${ISO_TMP_DIR}/platform/i86pc/${dir}/boot_archive > ${BA_FILE} ba_lofi=$(${LOFIADM} -a ${BA_FILE}) sleep 5 ${MOUNT} ${ba_lofi} ${BA_MNT_DIR} ${CP} /export/home/hugues/2.00.15_Solaris_MegaCLI.zip ${BA_MNT_DIR}/root ${CP} /export/home/hugues/postinstall.sh ${BA_MNT_DIR}/root set_kbd_lang ${BA_MNT_DIR} sleep 5 ${UMOUNT} ${BA_MNT_DIR} ${GZIP} -c ${BA_FILE} > ${ISO_TMP_DIR}/platform/i86pc/${dir}/boot_archive sleep 5 ${LOFIADM} -d ${ba_lofi} done ${MKISOFS} -o ${ISO_NEW_FILE} \ -b boot/grub/stage2_eltorito \ -c .catalog \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -N -l -R -U -allow-multidot \ -no-iso-translate \ -cache-inodes -d -D \ -V "OpenSolaris" \ ${ISO_TMP_DIR} ${UMOUNT} ${ISO_MNT_DIR} ${LOFIADM} -d ${iso_lofi} ${RM} ${ISO_TMP_DIR} ${BA_FILE} } create_x86_iso
Cette image iso pourra ensuite être convertie en fichier .usb et servir de matrice à la création d’une clé boutable.
pfexec pkg install SUNWdistro-const pfexec usbgen osol-dev-134-x86_custom.iso osol.usb /tmp/osol pfexec usbcopy osol.usb
ou si vous êtes sous Windows avec l’outil OpenSolaris Live USB Creator.