diff options
author | ramon <ramongomez@us.es> | 2015-12-03 13:30:27 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2015-12-03 13:30:27 +0000 |
commit | af1e516a9f376701db38591b22609c6e1fdcd8a3 (patch) | |
tree | 268f955a06796e298334f71844353d7754b0fb0c /server/bin | |
parent | 6a25c5d9fef1d3cc37dbcdbbb85956088829a0e6 (diff) |
#709: Integrar código del ticket:709 en versión 1.1 y mover a directorio de tickets integrados.
git-svn-id: https://opengnsys.es/svn/branches/version1.1@4751 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'server/bin')
-rwxr-xr-x | server/bin/installmodule | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/server/bin/installmodule b/server/bin/installmodule new file mode 100755 index 00000000..4625bd04 --- /dev/null +++ b/server/bin/installmodule @@ -0,0 +1,97 @@ +#!/bin/bash +# isntallmodule - instalar módulo de kernel en Initrd de cliente ogLive. +# Uso: installmodule tarfile +# Nota: tarfile es un fichero tar.gz con el fichero .ko del módulo y un fichero "module.conf" +# para configuración de instalación (debe incluir nombre, fichero y camino del módulo). +# Autor: Ramón M. Gómez +# Fecha: 2015-12-03 + + +# Variables. +PROG=$(basename $0) +OPENGNSYS=/opt/opengnsys +INITRD=$OPENGNSYS/tftpboot/ogclient/oginitrd.img +TARFILE=$(realpath $1 2>/dev/null) +tmpmod=/tmp/module$$ +tmpinit=/tmp/initrd$$ + +# Comprobar errores. +if [ $# -ne 1 ]; then + echo "$PROG: Incorrect operand. Format: $PROG moduletarfile" >&2 + exit 1 +fi +if [ "$USER" != "root" ]; then + echo "$PROG: Need to be root." >&2 + exit 1 +fi + +# Mostrar ayuda. +if [ "$1" == "help" ]; then + cat << EOT + +$PROG: installs kernel module into ogLive image (initrd). + +Format: $PROG moduletarfile + +moduletarfile must be a tar.gz archive with 2 files: + - *.ko: compiled module + - module.conf: configuration file + +Configuration file format: + module=ModuleName + file=ModuleFile + path=ModulePath + +ModuleName must be a single word. +ModuleFile must be a kernel compiled module file (*.ko). +ModulePath must be the kernel target directory, started by "kernel/". + +EOT + exit 0 +fi + +# Comprobar acceso al fichero de módulos. +if [ ! -r "$TARFILE" ]; then + echo "$PROG: Cannot access module file." >&2 + exit 1 +fi + +pushd /tmp >/dev/null + +# Borrar al salir del programa. +trap "popd 2>/dev/null; rm -fr $tmpmod $tmpinit" 0 1 2 3 6 9 15 + +# Descompresión de módulos para el ogLive actual. +mkdir -p $tmpmod +cd $tmpmod +tar xvzf $TARFILE >/dev/null || exit + +# Fichero de configuración. +source module.conf || exit +[ -z "$module" ] && echo "Module not detected." && exit 1 + +# Descomprimir Initrd. +mkdir -p $tmpinit +cd $tmpinit +gzip -dc $INITRD | cpio -im 2>/dev/null + +# Versión del Kernel del Initrd. +KERNEL=$(ls -d lib/modules/[0-9]* | head -1) +[ -z "$KERNEL" ] && echo "Kernel not detected." && exit 1 +# Avisar si el Kernel del módulo es distinto del del Initred. +echo "$(basename $KERNEL) $(modinfo -F vermagic $tmpmod/$file | cut -f1 -d' ')" | awk '$1!=$2 {print "WARNING: installing module for Kernel",$1,"on Kernel",$2}' + +# Copiar módulo y reconstruir dependencias. +echo "Installing module: $module" +cp -a $tmpmod/$file $KERNEL/$path +depmod -b . -a $(basename $KERNEL) + +# Recomponer el Initrd. +find . | cpio -H newc -oa | gzip -9c >$INITRD +md5sum $INITRD | cut -f1 -d" " > $INITRD.sum +cp -a $INITRD $INITRD.sum $OPENGNSYS/tftpboot + +# Limpiar. +popd >/dev/null +rm -fr $tmpmod $tmpinit + |