blob: 4625bd047863202a013610f1e564b980c481e396 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
|