MultiCD - ¿Cómo Funciona?

 

¿Cómo Funciona? (Arriba)

Última actualización: feb. 10, 2012

Cada plugin tiene su propio archivo en el directorio de plugins. Tomaré como ejemplo austrumi.sh, el plugin para Austrumi Linux.

#!/bin/sh
set -e
. "${MCDDIR}"/functions.sh
#Austrumi plugin for multicd.sh
#version 6.9
#Copyright (c) 2010 Isaac Schemm
#
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#
#The above copyright notice and this permission notice shall be included in
#all copies or substantial portions of the Software.
#
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.

Esta sección contiene el comando "set -e" que ordena al script salir si hay errores el nombre y la versión del plugin, y la licencia MIT. Tmabién tiene el comando . ./functions.sh, el cual carga las funciones mcdmount y umcdmount desde el archivo functions.sh empaquetado con multicd.sh.

if [ $1 = scan ];then
	if [ -f austrumi.iso ];then
		echo "Austrumi"
	fi

multicd.sh invoca esta sección cerca del inicio del script.
Cada plugin hará un escaneo para ver si su respectivo ISO está en el folder y si debe ser incluído.
Para algunos plugins, puede ser más complicado, ej. si dos CDs no pueden estar en el mismo disco.

elif [ $1 = copy ];then
	if [ -f austrumi.iso ];then
		mcdmount austrumi
		cp -r "${MNT}"/austrumi/austrumi "${WORK}"/ #This folder also has the kernel and initrd
		cp "${MNT}"/austrumi/isolinux.cfg "${WORK}"/boot/isolinux/al.menu
		umcdmount austrumi
	fi

Está es la sección de copiado, invocada en la mitad de multicd.sh
Primero, el plugin mira si la ISO está allí (nuevamente, porque no lo recuerda), entonces la función mcdmount crea un punto de montaje temporal para la imagen ISO, asegurandose que nada está montado allí, y luego monta la ISO.
Luego de montarla, los componentes necesarios son copiados en el directorio de trabajo de multicd. Para Astrumi, están todos en un folder. una vez esto se realiza, umcdmount desmonta y remueve el punto de montaje.
NOTA: $MNT y $WORK están definidos en multicd.sh; $MNT es una locación (en /tmp) donde los puntos temporales de montaje son hechos, y $WORK es el directorio que agrupa los futuros contenidos de la ISO (normalmente está configurado com$(pwd)/multicd-working).
Cada ISO tendrá diferentes archivos que necesitan ser copiados. Usualmente serán un kernel, un initrd y un archivo o directorio con una imagen comprimida del sistema de archivos (como el casper de Ubuntu).

elif [ $1 = writecfg ];then
if [ -f austrumi.iso ];then
echo "label austrumilinux
	menu label ^Austrumi
	com32 vesamenu.c32
	append al.menu
" >> "${WORK}"/boot/isolinux/isolinux.cfg
fi

La tercera parte del script del plugin es invocada justo antes que la imagen multicd.iso sea creada.
Esta sección agrega los comandos ISOLINUX de la distribución al nuevo isolinux.cfg.
Revisa si el ISO está allí (nuevamente,) y de ser así, lo agrega texto a isolinux.cfg.
En el caso de Astrumi, la opción menu simplemente carga el submenu, el cual es el isolinux.cfg que fue copiado desde la ISO original. Usualmente, se verá o una larga lista de comandos o algunos comandos sed para modificar los contenidos de submenu copiado. La decisión sobre cuál duirección tomar (escribir código vs copiado y editado) depende en cuantas opciones tenga la distribución y cuan a menudo es actualizada.
Si escoge escribir código en las opciones (lo cual es fácil), revise el isolinux.cfg de la ISO original para ver que poner aquí.
Tenga en cuenta que si los archivos no están en el mismo lugar que en el CD original, tendrá que cambiar algunas cosas (ej. para Feather linux, esto puede ser usando "/boot/feather" en lugar de "/boot/isolinux" y agregando "knoppix_dir=FEATHER".)

else
	echo "Usage: $0 {scan|copy|writecfg}"
	echo "Use only from within multicd.sh or a compatible script!"
	echo "Don't use this plugin script on its own!"
fi

El final es siempre el mismo. Si el script ni es invocado con alguno de los tres argumentos que usa multicd.sh (ej. si un usuario los invoca por serparado), el script le dice al usuario que el script no puede ser usado por su propia cuenta.