Jumpstart is so 2000

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.

X8DTU-F

X8DTU-F

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é :

  1. Télécharger l’ISO osol-dev-134-x86.iso depuis Genunix
  2. Modifier l’image ISO
  3. Convertir cette nouvelle image ISO en fichier .usb
  4. 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.

Ce contenu a été publié dans Mes docs, OpenSolaris. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.