2019/04/17

Rehacer una imagen live

El otro día el ProfMatías preguntó en el chat de CaFeLUG como no montar los discos rígidos en una máquina arrancada con puppy linux pues tenía el requerimiento institucional de que los alumnos no puedan tocar el windows presente.

Una idea propuesta fue virtualizar, pero también tenía la restricción de hardware incapaz.

Otra usar una distro de tipo forense, que no monta por default los discos.

Otra modifar la imagen, desde poner un script al arranque que desmonte hasta que ni siquiera pueda montarlos, pasando por que no los monte.


Esto es lo que hice para preparar el terreno para lo último. Asumo que algo sabés de administración linux y que tenés mucha curiosidad e iniciativa, así que no entro en detalles menores como por ejemplo cómo y qué editar de syslinux.conf, ni explico nada que puedas hallar en man xxx y entiendo que cuando ejecutes unsquashfs y te diga que no está, llames a tu gestor de software y te lo instales.

Si incluyo los pasos concretos obvios como el wget, es para que esto sirva como base para un script genérico que en algún momento githubearé.


Los programas necesarios

  • wget
  • mount
  • mkisofs
  • unsquashfs
  • mksquashfs
  • editor de texto preferido

La estructura de directorios

  • old/
  • rebuild/
    • puppy_xenialpup64_7.5/
    • zdrv_xenialpup64_7.5/
  • new/
  • xenialpup64-7.5-uefi.iso
  • xenialpup64-7.5-uefi-new.iso

Los pasos a seguir

  • Copiar todos los archivos de la imagen original a la nueva imagen
  • Descomprimir los squashfs presentes
  • Modificar los archivos deseados
  • Reconstruir los squashfs
  • Rehacer la imagen

Manos a la obra


Crear estructura de directorios

Una carpetita para el live original, otra para el que queremos como resultado

mkdir old new

Obtener imagen


wget  \
http://distro.ibiblio.org/puppylinux/puppy-xenial/64/xenialpup64-7.5-uefi.iso \
-o xenialpup64-7.5-uefi.iso

Montar la imagen


Para poder acceder a los elementos de la imagen.

sudo mount -t iso9660 -o loop xenialpup64-7.5-uefi.iso old


Terminar de crear los directorios faltantes

 

Es que hasta este momento no los conocíamos, son los que hay en old/*.sfs sin la extensión.


mkdir -p rebuild/puppy_xenialpup64_7.5 rebuild/zdrv_xenialpup64_7.5



Copiar todo de la iso a la nueva imagen


Para tener lo mismo que tiene la live original

sudo cp -a old/* new

Luego los *.sfs serán actualizados.


Desplegar los squashsfs


Hay que tomar cada *.sfs y descomprimirlo para poder hacer modificaciones en el sistema de archivo que será montado cuando inicie la live.


cd rebuild

cd puppy_xenialpup64_7.5/
unsquashfs ../../old/puppy_xenialpup64_7.5.sfs 


cd ..

cd zdrv_xenialpup64_7.5/
unsquashfs ../../old/zdrv_xenialpup64_7.5.sfs 

cd ..




Acciones incrementales




Primera iteración


Modifiqué syslinux.conf para que ofrezca una sola opción de boot. Los squashfs se rehacen sin modificarlos, en este momento sólo nos interesa que funcione el proceso.

Antes...

...despues


Segunda iteración


Recomprimí los squashfs agregando un archivito testigo con touch.

Charly was there...


Tercera iteración


Poniendo en isolinux.cfg:

prompt 0
NOESCAPE 1


desactiva el acceso al boot prompt, lo que permitiría arrancar en single mode y nos jodería todas la demás medidas que tomemos.

De todos modos puppy arranca con el usuario root, haría falta un poco de hardening, quizas sea más fácil usar otra distro.


Pendiente


Lo que dejo sin hacer es:

  • Desactivar automount
    • Hallar y desactivar el automount, obvio.
    • Poner el driver de los discos en /etc/modprobe.d/blacklist.conf, mmmh, puede llevarse algo que haga falta.
    • un script al incio desmontando todo, mmh, sucio, sucio, ProfMatías.
  • Poner los permisos correctos
    • La verdad es que ni me fijé, quizás haciendo todo como root.
    • Sigo sin fijarme, hice todo como root.
  • Ver por que mi  puppy_xenialpup64_7.5.sfs queda tanto más grande que la original.
    • Me imagino que debe ser alguna opción de compresión.
Quizás lo haga uno de estos días.


Reconstruir imagen

 

Borrar y reconstruir los squashfs, pero sólo los que hayan sido modificados.



rm new/puppy_xenialpup64_7.5.sfs

mksquashfs \
    rebuild/puppy_xenialpup64_7.5/squashfs-root \
    new/puppy_xenialpup64_7.5.sfs

rm new/zdrv_xenialpup64_7.5.sfs

mksquashfs \
    rebuild/zdrv_xenialpup64_7.5/squashfs-root \
    new/zdrv_xenialpup64_7.5.sfs


cd new

sudo mkisofs -o ../xenialpup64-7.5-uefi-new.iso \
        -r -J -no-emul-boot -boot-load-size 4 \
        -b isolinux.bin -c boot.catalog \
        -boot-info-table .

sudo umount mnt

Y listo, arrancar con la vm y repetir todo hasta que salga lo que queremos.

 

No hay comentarios:

Publicar un comentario