Version 41 (modified by 14 years ago) (diff) | ,
---|
Cliente OpenGnsys
Objetivo
- Ser capaz de inicializarse desde:
- cualquier dispositivo removible (usb, cd, dvd),
- una partición cache, o un espacio no particionado (¿¿¿???)
- y por supuesto por red, utilizando cualquier protocolo.
- Ofrecer la posibilidad de añadir o actualizar software usando los gestores de paquetes estándar.
- Que el software instalado en el cliente, no afecte a su arranque (especialmente en el modo PXE)
- Independizar el tiempo de arranque del cliente, independiente del número de estos que se inician simultánemente.
Descripción
- El "cliente" se compone en:
- Primera etapa: un kernel y un initrd.
- Segunda etapa: el sistema raíz o root(con todas las aplicaciones necesarias).
- Los elementos de la primera etapa se cargan mediante un gestor de arranque, dependiendo del contendor(cd,dvd,usb,particionCache,red) se usuará el más idóneo (p.e isonlinux, grub, grub4dos, gpxe).
- El inicializador de opengnsys ubicado en el initrd (boot=oginit) detectará donde se ubica el sistema raíz (segunda etapa), y lo incluirá como tal.
Mas info sobre "Using UnionFS: BusyBox? and SquashFS together" http://lwn.net/Articles/219827/
Instalación
No realizar el proceso en un sistema en procucción. Se ha testado con éxito en la ubuntu server 32 bits 10.04, 10.04.2 y 10.10
NOTA: el instalador está en "http://www.opengnsys.es/browser/trunk/client/boot-tools/"
mv /opt/opengnsys/tftpboot/ogclient /opt/opengnsys/tftpboot/ogclient-old; svn checkout http://www.opengnsys.es/svn/trunk/client /tmp/opengnsys_installer/opengnsys/client/; find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; /tmp/opengnsys_installer/opengnsys/client/boot-tools/ogClientGeneratorV2.sh;
DEBUG en el proceso de instalación:
Continuar sin instalar grub -> yes Congigura el console-data Introduce la clave pub de nuestro servidor(ejecutor del instalador) en el cliente. En el caso de que ya exista un .pub nos pregunta si generar uno nuevo o mantener (N) Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) -> Y
El proceso que se ha indicado a continuación, genera los elementos del cliente OpenGnsys, basados en la versión de ubuntu que tengamos instalados (mismo kernel y distribución).
/opt/opengnsys/tftpboot/ogclient/
./ogvmlinuz (el kernel) ./oginitrd.img (el initrd) ./ogclient.img (el sistema raiz, accesible como disco virtual usando schroot desde el host que lo generó, para ser actualizado) ./ogclient.sqfs (el sistema raiz, comprimido para ser usado por los clientes OpenGnsys)
Las fases de la instalación
- Fase 1. Instalación en el equipo donde se ejecuta la instalación de software necesario.
- Fase 2. Asignación de valores, como la versión del kernel, basados en los datos del S.O que ejecuta el instalador, que serán utilizados para generar el cliente.
- Fase 3. Creación del sistema raiz (ogclient.img). Primero se crea un disco duro virtual, y se particiona -ogCleint2nFile()-. En la primera partición se genera un sistema operativo con la herramienta deboobstrap -ogClient2ndFs()-, con parametros basados en la fase2.
- Fase 4. Se configura el acceso al sistema raiz (ogclient.img) para ser usado con la herramienta schroot -ogClientSchrootConf()-
- Fase 5. Se configura o se incluyen los elementos especiales de opengnsys (engine, QTEmbbedbed, pci.ids, browser, ogAdmClient). -ogClient2ndSVN()-
- Fase 6. Ampliación del sistema raiz -- instalación de software con apt, compilación de algunas herramientas, importación de la clave ssh desde el SO que lo generó.
- Fase 7. Generación del initrd.
- Fase 8. Generación del sistema raiz en sqfs.
Incorporación del fichero .sqfs (proceso instalación de OpenGnsys) en un fichero .img para su posterior modificación
NOTA: este subapartado no está terminado de documentar
NOTA: este procedimiento se ha comprobado en una ubuntu server 10.04 32bits.
export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/; export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img; export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount; export OGCLIENTSIZEMB=1900; export OGCLIENTLABEL=ogClient; mkdir -p $OGCLIENTMOUNT; dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB; DISKLOOP=$(losetup -f); losetup $DISKLOOP $OGCLIENTFILE; echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP; losetup -d $DISKLOOP ; PARTLOOP=$(losetup -f); losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP; losetup -d $PARTLOOP ; losetup -d $PARTLOOP ; mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256; unsquashfs -d /opt/opengnsys/tftpboot/ogclient/ogclientmount/ -f /opt/opengnsys/tftpboot/ogclient/ogclient.sqfs ; umount $OGCLIENTMOUNT; echo "fin"; cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` cat << EOF > /etc/schroot/schroot.conf [IMGogclient] type=loopback file=/var/lib/tftpboot/ogclient/ogclient.img description=ogclient ubuntu luc IMGi priority=1 users=root groups=root root-groups=root mount-options=-o offset=32256 root-users=root [DIRogclient] type=directory directory=/var/lib/tftpboot/ogclient/ogclientmount description=ogclient ubuntu lucid DIR priority=2 users=root groups=root root-groups=root root-users=root EOF cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` cat << EOF > /etc/schroot/mount-defaults # mount.defaults: static file system information for chroots. # Note that the mount point will be prefixed by the chroot path # (CHROOT_PATH) # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 #procbususb /proc/bus/usb usbfs defaults 0 0 #/dev /dev none rw,bind 0 0 /dev/pts /dev/pts none rw,bind 0 0 /dev/shm /dev/shm none rw,bind 0 0 #/home /home none rw,bind 0 0 /tmp /tmp none rw,bind 0 0 EOF
Modificaciones al cliente
Pasos previos:
mkdir -p /tmp/opengnsys_installer/opengnsys/client/boot-tools; svn checkout http://www.opengnsys.es/svn/trunk/client/boot-tools /tmp/opengnsys_installer/opengnsys/client/boot-tools; source /tmp/opengnsys_installer/opengnsys/client/boot-tools/ogClientManager.lib
Generar un nuevo initrd, con nuestras "locales", y almacenarlos en el /opt/opengnsys/tftpboot/ogclient/
#Solicitamos que se monte el sistema root (img), y configuere los locales. schroot -c IMGogclient -- /root/ReconfigureLocales.sh #Solicitamos que se monte el sistema root (img), y cree el initrd y el kernel ogClientInintrd host #almacenara el kernel y el initrd en /var/lib/tftpboot/ogclient/{ogvmlinuz oginitrd.img}
Copiar nuevos archivos al sistema raiz del cliente (ogclient.img)
Cualquier archivo extra, que queramos añadir al sistema raiz del cliente, tenemos el directorio /tmp compartido entre el SO y el ogclient.
#Accedemos a la consola shell del sistema root del cliente (img) schroot -c IMGogclient #Realizamos todas las modificaciones que queramos. el directorio /tmp es compartido tanto por nuestro ordenador, como por el sistema root del cliente (img) cp /tmp/ficheroOGSERVER.txt /home/opengnsys/ficheroEnOGclient.txt # Salimos del sistema root del cliente (img) exit
Generar un nuevo initrd, con un nuevo proceso de inicio de OpenGnsys
schroot -c IMGogclient #editamos el proceso de inicio vi /etc/initramfs-tools/scripts/oginit #editamos las funciones del proceso de inicio vi /initramfs-tools/scripts/ogfunctions # o copiamos uno actualizado. cp /tmp/oginit /etc/initramfs-tools/scripts/oginit # o añadimos uno inicio alternativo cp /tmp/oginit2 /etc/initramfs-tools/scripts/oginit2 exit ogClientInitrd host
Instalar nuevas herramientas en el sistema raiz del (ogclient.img)
schroot -c IMGogclient apt-get install python3 exit
Generar un nuevo sistema raiz en formato sqfs (ogclient.sqfs)
ogClient2ndSqfs
Integrar drivers de tarjetas de red
http://www.opengnsys.es/wiki/InitrdClienteNetModules
Parametros usados por el kernel
SVN del código
Proceso de inicio:
- http://www.opengnsys.es/browser/trunk/client/boot-tools/clientstructure/etc/initramfs-tools/scripts
- http://www.opengnsys.es/browser/trunk/client/boot-tools/clientstructure/etc/inittab
modificaciones del initrd.
Notas sobre uso con samba
http://www.opengnsys.es/browser/branches/eac-hidra-uma/Testing/etc/smb.conf.txt