[[TOC(heading=Índice)]] = Cliente !OpenGnsys = == Objetivo == 1. 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. 1. Ofrecer la posibilidad de añadir o actualizar software usando los gestores de paquetes estándar. 1. Que el software instalado en el cliente, no afecte a su arranque (especialmente en el modo PXE) 1. Independizar el tiempo de arranque del cliente, independiente del número de estos que se inician simultánemente. == Descripción == 1. 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). 1. 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). 1. 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; 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) # # 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/ === {{{ schroot -c IMGogclient -- /root/ReconfigureLocales.sh ogClientInintrd host }}} === 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. {{{ schroot -c IMGogclient cp /tmp/ficheroOGSERVER.txt /home/opengnsys/ficheroEnOGclient.txt 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 }}} == Parametros usados por el kernel == * http://www.opengnsys.es/browser/trunk/client/boot-tools/kernelParameterOG.es.txt == SVN del código == * http://www.opengnsys.es/browser/trunk/client/boot-tools/ 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. * http://www.opengnsys.es/browser/trunk/client/boot-tools/clientstructure/etc/initramfs-tools/hooks == Notas sobre uso con samba == http://www.opengnsys.es/browser/branches/eac-hidra-uma/Testing/etc/smb.conf.txt