Ubuntu LiveCD sense CDROM i amb mode persistent

Reading time: 4 – 6 minutes

El gener passat vaig escriure sobre com arrencar un LiveCD d’Ubuntu en mode persistent, és a dir, guardant la configuració en un pendrive o disc dur de forma que els ajustos que fem a la configuració del CD no es perdin. Bé doncs, ara del que es tracta és que fem el mateix però sense el LiveCD. M’explico, l’objectiu és tenir una partició de només lectura al nostre disc dur, o en un altre disc dur on hi hagi el LiveCD copiat. Llavors usem una altre partició per guardar les modifiacions que fem sobre el CD, o sigui, la informació persistent. Això ens permet al propi GRUB tenir modes de recuperació sense haver de posar el CD. A més sempre podrem tornar enrera i tenir una configuració bàsica. I podrem treballar exactament igual que si tinguessim un LiveCD però sense tenir-lo físicament.

La solució és ben senzilla, potser el problema més greu esta en que s’ha de modificar un arxiu de configuració que es diu /scripts/casper i que es troba dintre del fitxer /boot-live/initrd.gz cosa que fa una mica entretingut modificar-lo. A continuació faig un petit cookbook de tots els passos a seguir.

  • Arrenquem des del LiveCD.
  • Creem una nova partició al disc de tipus vfat i la formategem.
  • Montem la partició i hi creem el directori /casper.
  • Copiem el contingut del directori /casper del LiveCD d’Ubuntu dins del nou directori que hem creat a la partició.
  • Suposant que a la partició persistent hi tenim instal·lat el GRUB per arrancar des de LiveCD però cridant-lo des del disc dur la configuració seria semblant a aquesta:
  • default 0
    timeout 30
    hiddenmenu
    color cyan/blue white/blue
    # Calling LiveCD from hard drive
    title           mpti
    root            (hd0,0)
    kernel          /boot-live/vmlinuz boot=casper initrd=new-initrd.gz ramdisk_size=1048576 root=/dev/ram rw quiet splash vga=791 -- persistent
    initrd          /boot-live/new-initrd.gz
    boot
    # Calling LiveCD from hard drive in single user and persistent mode
    title           mpti persistent (recovery mode)
    root            (hd0,0)
    kernel          /boot-live/vmlinuz boot=casper initrd=initrd.gz ramdisk_size=1048576 root=/dev/ram ro single persistent
    initrd          /boot-live/new-initrd.gz
    boot
    # Calling LiveCD from hard drive without persistent and single user mode
    title           mpti w/o persistent (recovery mode)
    root            (hd0,0)
    kernel          /boot-live/vmlinuz boot=casper initrd=initrd.gz ramdisk_size=1048576 root=/dev/ram ro single
    initrd          /boot-live/new-initrd.gz
    boot
    
  • Ara toca modificar el fitxer /boot-live/new-initrd.gz que és el que conté la seqüència d’arrencada que ens interessa modificar. Així doncs, anem al directori /boot-live.
  • Per descomprimir el fitxer new-initrd.gz podem fer això:
  • mkdir new-initrd
    cd new-initrd
    gzip -dc /boot-live/new-initrd.gz | cpio -id
    
  • Dintre de /boot-live/new-initrd/scripts hi ha el fitxer casper que hem de modificar, així doncs l’editem.
  • A la línia 257 hi ha la funció is_usb_device que l’hem de deixar com segueix:
  • is_usb_device() {
    #    sysfs_path="${1#/sys}"
    #    if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-usb)"; then
            return 0
    #    fi
    #    return 1
    }
    
  • Guardem el fitxer de configuració i tornem a crear el fitxer new-initrd, així:
  • # Fem una còpia l'antic new-initrd.gz per si les mosques
    cd /boot-live
    cp new-initrd.gz new-initrd.gz.old
    # Creem el nou new-initrd.gz
    cd new-initrd
    find . | cpio --quiet --dereference -o -H newc | gzip -9 > ../new-initrd.gz
    cd ..
    rm -rf new-initrd
    
  • Ara ja podem reiniciar i treure el LiveCD ja que tot hauria d’arrencar com si el tinguessim posat.

Al fitxer casper és on es detecta si hi ha algún LiveCD posat a partir del qual es montarà el sistema de fitxers root. L’script busca a molts llocs si troba una unitat de CD, fins hi tot busca pendrives formatejats en vfat amb el contingut del CD, però abans d’intentar montar-los i buscar dintre seu el directori /casper i algún fitxer anomenat *.squashfs comproba que el dispositiu estigui connectat via USB.

Així doncs, la modificació que jo he fet només força que la comprobació d’USB sempre sigui certa, així també intentarà montar les pariticions dels possibles discs durs connectats o d’altres similars. Així doncs, després l’únic que faig és crear una partició vfat, crear-li el directori que busca i copiar el fitxer *.squashfs que és on hi ha el sistema de fitxers squashfs que conté l’arbre de directoris i fitxers del LiveCD.

Malgrat estic content en el resultat obtingut, m’hagués agradat aconseguir el mateix resultat sense haver de modificar els fitxers del initrd.gz ja que això fa que a l’actualitzar l’Ubuntu si hi ha modificacions en l’script casper hauré de mirar-me què ha canviat per actualitzar el meu sistema.