959 lines
29 KiB
Bash
959 lines
29 KiB
Bash
#!/bin/bash
|
||
|
||
|
||
#####################################################################
|
||
####### Algunas funciones útiles de propósito general:
|
||
#####################################################################
|
||
function getDateTime()
|
||
{
|
||
echo `date +%Y%m%d-%H%M%S`
|
||
}
|
||
|
||
# Escribe a fichero y muestra por pantalla
|
||
function echoAndLog()
|
||
{
|
||
echo $1
|
||
FECHAHORA=`getDateTime`
|
||
echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
|
||
}
|
||
|
||
function errorAndLog()
|
||
{
|
||
echo "ERROR: $1"
|
||
FECHAHORA=`getDateTime`
|
||
echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
|
||
}
|
||
|
||
# comprueba si el elemento pasado en $2 esta en el array $1
|
||
function isInArray()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
|
||
local deps
|
||
eval "deps=( \"\${$1[@]}\" )"
|
||
elemento=$2
|
||
|
||
local is_in_array=1
|
||
# copia local del array del parametro 1
|
||
for (( i = 0 ; i < ${#deps[@]} ; i++ ))
|
||
do
|
||
if [ "${deps[$i]}" = "${elemento}" ]; then
|
||
echoAndLog "isInArray(): $elemento found in array"
|
||
is_in_array=0
|
||
fi
|
||
done
|
||
|
||
if [ $is_in_array -ne 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): $elemento NOT found in array"
|
||
fi
|
||
|
||
return $is_in_array
|
||
|
||
}
|
||
|
||
#####################################################################
|
||
####### Funciones de manejo de paquetes Debian
|
||
#####################################################################
|
||
|
||
function checkPackage()
|
||
{
|
||
package=$1
|
||
if [ -z $package ]; then
|
||
errorAndLog "checkPackage(): parameter required"
|
||
exit 1
|
||
fi
|
||
echoAndLog "checkPackage(): checking if package $package exists"
|
||
dpkg -s $package | grep Status | grep -qw install &>/dev/null
|
||
if [ $? -eq 0 ]; then
|
||
echoAndLog "checkPackage(): package $package exists"
|
||
return 0
|
||
else
|
||
echoAndLog "checkPackage(): package $package doesn't exists"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# recibe array con dependencias
|
||
# por referencia deja un array con las dependencias no resueltas
|
||
# devuelve 1 si hay alguna dependencia no resuelta
|
||
function checkDependencies()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "checkDependencies(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
echoAndLog "checkDependencies(): checking dependences"
|
||
uncompletedeps=0
|
||
|
||
# copia local del array del parametro 1
|
||
local deps
|
||
eval "deps=( \"\${$1[@]}\" )"
|
||
|
||
declare -a local_notinstalled
|
||
|
||
for (( i = 0 ; i < ${#deps[@]} ; i++ ))
|
||
do
|
||
checkPackage ${deps[$i]}
|
||
if [ $? -ne 0 ]; then
|
||
local_notinstalled[$uncompletedeps]=$package
|
||
let uncompletedeps=uncompletedeps+1
|
||
fi
|
||
done
|
||
|
||
# relleno el array especificado en $2 por referencia
|
||
for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
|
||
do
|
||
eval "${2}[$i]=${local_notinstalled[$i]}"
|
||
done
|
||
|
||
# retorna el numero de paquetes no resueltos
|
||
echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps"
|
||
return $uncompletedeps
|
||
}
|
||
|
||
# Recibe un array con las dependencias y lo instala
|
||
function installDependencies()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "installDependencies(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
echoAndLog "installDependencies(): installing uncompleted dependencies"
|
||
|
||
# copia local del array del parametro 1
|
||
local deps
|
||
eval "deps=( \"\${$1[@]}\" )"
|
||
|
||
local string_deps=""
|
||
for (( i = 0 ; i < ${#deps[@]} ; i++ ))
|
||
do
|
||
string_deps="$string_deps ${deps[$i]}"
|
||
done
|
||
|
||
if [ -z "${string_deps}" ]; then
|
||
errorAndLog "installDependencies(): array of dependeces is empty"
|
||
exit 1
|
||
fi
|
||
|
||
OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
|
||
export DEBIAN_FRONTEND=noninteractive
|
||
|
||
echoAndLog "installDependencies(): now ${string_deps} will be installed"
|
||
apt-get -y install --force-yes ${string_deps}
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "installDependencies(): error installing dependencies"
|
||
return 1
|
||
fi
|
||
|
||
DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND
|
||
echoAndLog "installDependencies(): dependencies installed"
|
||
}
|
||
|
||
# Hace un backup del fichero pasado por parámetro
|
||
# deja un -last y uno para el dÃa
|
||
function backupFile()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local fichero=$1
|
||
local fecha=`date +%Y%m%d`
|
||
|
||
if [ ! -f $fichero ]; then
|
||
errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
|
||
return 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): realizando backup de $fichero"
|
||
|
||
# realiza una copia de la última configuración como last
|
||
cp -p $fichero "${fichero}-LAST"
|
||
|
||
# si para el dÃa no hay backup lo hace, sino no
|
||
if [ ! -f "${fichero}-${fecha}" ]; then
|
||
cp -p $fichero "${fichero}-${fecha}"
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): backup realizado"
|
||
}
|
||
|
||
#####################################################################
|
||
####### Funciones para el manejo de bases de datos
|
||
#####################################################################
|
||
|
||
# This function set password to root
|
||
function mysqlSetRootPassword()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "mysqlSetRootPassword(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_mysql=$1
|
||
echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server"
|
||
/usr/bin/mysqladmin -u root password ${root_mysql}
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server"
|
||
return 1
|
||
fi
|
||
echoAndLog "mysqlSetRootPassword(): root password saved!"
|
||
return 0
|
||
}
|
||
|
||
# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
|
||
function mysqlGetRootPassword(){
|
||
local pass_mysql
|
||
local pass_mysql2
|
||
# Comprobar si MySQL está instalado con la clave de root por defecto.
|
||
if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
|
||
echoAndLog "${FUNCNAME}(): Using default mysql root password."
|
||
else
|
||
stty -echo
|
||
echo "Existe un servicio mysql ya instalado"
|
||
read -p "Insertar clave de root de Mysql: " pass_mysql
|
||
echo ""
|
||
read -p "Confirmar clave:" pass_mysql2
|
||
echo ""
|
||
stty echo
|
||
if [ "$pass_mysql" == "$pass_mysql2" ] ;then
|
||
MYSQL_ROOT_PASSWORD=$pass_mysql
|
||
echo "La clave es: ${MYSQL_ROOT_PASSWORD}"
|
||
return 0
|
||
else
|
||
echo "Las claves no coinciden no se configura la clave del servidor de base de datos."
|
||
echo "las operaciones con la base de datos daran error"
|
||
return 1
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# comprueba si puede conectar con mysql con el usuario root
|
||
function mysqlTestConnection()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "mysqlTestConnection(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
echoAndLog "mysqlTestConnection(): checking connection to mysql..."
|
||
echo "" | mysql -uroot -p"${root_password}"
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!"
|
||
return 1
|
||
else
|
||
echoAndLog "mysqlTestConnection(): connection success"
|
||
return 0
|
||
fi
|
||
}
|
||
|
||
# comprueba si la base de datos existe
|
||
function mysqlDbExists()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "mysqlDbExists(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
local database=$2
|
||
echoAndLog "mysqlDbExists(): checking if $database exists..."
|
||
echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$"
|
||
if [ $? -ne 0 ]; then
|
||
echoAndLog "mysqlDbExists():database $database doesn't exists"
|
||
return 1
|
||
else
|
||
echoAndLog "mysqlDbExists():database $database exists"
|
||
return 0
|
||
fi
|
||
}
|
||
|
||
function mysqlCheckDbIsEmpty()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
local database=$2
|
||
echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..."
|
||
num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l`
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password"
|
||
exit 1
|
||
fi
|
||
|
||
if [ $num_tablas -eq 0 ]; then
|
||
echoAndLog "mysqlCheckDbIsEmpty():database $database is empty"
|
||
return 0
|
||
else
|
||
echoAndLog "mysqlCheckDbIsEmpty():database $database has tables"
|
||
return 1
|
||
fi
|
||
|
||
}
|
||
|
||
|
||
function mysqlImportSqlFileToDb()
|
||
{
|
||
if [ $# -ne 3 ]; then
|
||
errorAndLog "${FNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
local database=$2
|
||
local sqlfile=$3
|
||
|
||
if [ ! -f $sqlfile ]; then
|
||
errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
|
||
return 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): importing sql file to ${database}..."
|
||
perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile
|
||
mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
|
||
return 1
|
||
fi
|
||
echoAndLog "${FUNCNAME}(): file imported to database $database"
|
||
return 0
|
||
}
|
||
|
||
# Crea la base de datos
|
||
function mysqlCreateDb()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
local database=$2
|
||
|
||
echoAndLog "${FUNCNAME}(): creating database..."
|
||
mysqladmin -u root --password="${root_password}" create $database
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while creating database $database"
|
||
return 1
|
||
fi
|
||
echoAndLog "${FUNCNAME}(): database $database created"
|
||
return 0
|
||
}
|
||
|
||
|
||
function mysqlCheckUserExists()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "mysqlCheckUserExists(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password="${1}"
|
||
local userdb=$2
|
||
|
||
echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..."
|
||
echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user
|
||
if [ $? -ne 0 ]; then
|
||
echoAndLog "mysqlCheckUserExists(): user doesn't exists"
|
||
return 1
|
||
else
|
||
echoAndLog "mysqlCheckUserExists(): user already exists"
|
||
return 0
|
||
fi
|
||
|
||
}
|
||
|
||
# Crea un usuario administrativo para la base de datos
|
||
function mysqlCreateAdminUserToDb()
|
||
{
|
||
if [ $# -ne 4 ]; then
|
||
errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local root_password=$1
|
||
local database=$2
|
||
local userdb=$3
|
||
local passdb=$4
|
||
|
||
echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}"
|
||
|
||
cat > $WORKDIR/create_${database}.sql <<EOF
|
||
GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
|
||
GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
|
||
FLUSH PRIVILEGES ;
|
||
EOF
|
||
mysql -u root --password=${root_password} < $WORKDIR/create_${database}.sql
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "mysqlCreateAdminUserToDb(): error while creating user in mysql"
|
||
rm -f $WORKDIR/create_${database}.sql
|
||
return 1
|
||
else
|
||
echoAndLog "mysqlCreateAdminUserToDb(): user created ok"
|
||
rm -f $WORKDIR/create_${database}.sql
|
||
return 0
|
||
fi
|
||
}
|
||
|
||
|
||
#####################################################################
|
||
####### Funciones para el manejo de Subversion
|
||
#####################################################################
|
||
|
||
function svnExportCode()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local url=$1
|
||
|
||
echoAndLog "${FUNCNAME}(): downloading subversion code..."
|
||
|
||
svn export "${url}" opengnsys
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password"
|
||
return 1
|
||
fi
|
||
echoAndLog "${FUNCNAME}(): subversion code downloaded"
|
||
return 0
|
||
}
|
||
|
||
|
||
############################################################
|
||
### Detectar red
|
||
############################################################
|
||
|
||
function getNetworkSettings()
|
||
{
|
||
# Variables globales definidas:
|
||
# - SERVERIP: IP local del servidor.
|
||
# - NETIP: IP de la red.
|
||
# - NETMASK: máscara de red.
|
||
# - NETBROAD: IP de difusión de la red.
|
||
# - ROUTERIP: IP del router.
|
||
# - DNSIP: IP del servidor DNS.
|
||
|
||
local MAINDEV
|
||
|
||
echoAndLog "${FUNCNAME}(): Detecting default network parameters."
|
||
MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}')
|
||
if [ -z "$MAINDEV" ]; then
|
||
errorAndLog "${FUNCNAME}(): Network device not detected."
|
||
exit 1
|
||
fi
|
||
SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
|
||
NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
|
||
NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}')
|
||
NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {if (n=="") n=$1} END {print n}')
|
||
ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}')
|
||
DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
|
||
if [ -z "$NETIP" -o -z "$NETMASK" ]; then
|
||
errorAndLog "${FUNCNAME}(): Network not detected."
|
||
exit 1
|
||
fi
|
||
|
||
# Variables de ejecución de Apache
|
||
# - APACHE_RUN_USER
|
||
# - APACHE_RUN_GROUP
|
||
if [ -f /etc/apache2/envvars ]; then
|
||
source /etc/apache2/envvars
|
||
fi
|
||
APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
|
||
APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
|
||
}
|
||
|
||
|
||
############################################################
|
||
### Esqueleto para el Servicio pxe y contenedor tftpboot ###
|
||
############################################################
|
||
|
||
function tftpConfigure() {
|
||
echo "Configurando el servicio tftp"
|
||
basetftp=/var/lib/tftpboot
|
||
|
||
# reiniciamos demonio internet ????? porque ????
|
||
/etc/init.d/openbsd-inetd start
|
||
|
||
# preparacion contenedor tftpboot
|
||
cp -pr /usr/lib/syslinux/ ${basetftp}/syslinux
|
||
cp /usr/lib/syslinux/pxelinux.0 ${basetftp}
|
||
# prepamos el directorio de la configuracion de pxe
|
||
mkdir -p ${basetftp}/pxelinux.cfg
|
||
cat > ${basetftp}/pxelinux.cfg/default <<EOF
|
||
DEFAULT pxe
|
||
|
||
LABEL pxe
|
||
KERNEL linux
|
||
APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on
|
||
EOF
|
||
# comprobamos el servicio tftp
|
||
sleep 1
|
||
testPxe
|
||
## damos perfimos de lectura a usuario web.
|
||
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP ${basetftp}
|
||
}
|
||
|
||
function testPxe () {
|
||
cd /tmp
|
||
echo "comprobando servicio pxe ..... Espere"
|
||
tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echo "servidor tftp OK" || echo "servidor tftp KO"
|
||
cd /
|
||
}
|
||
|
||
########################################################################
|
||
## Configuracion servicio NFS
|
||
########################################################################
|
||
|
||
# ADVERTENCIA: usa variables globales NETIP y NETMASK!
|
||
function nfsConfigure()
|
||
{
|
||
echoAndLog "${FUNCNAME}(): Config nfs server."
|
||
|
||
backupFile /etc/exports
|
||
|
||
nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while adding nfs client config"
|
||
return 1
|
||
fi
|
||
|
||
nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while adding nfs images config"
|
||
return 1
|
||
fi
|
||
|
||
nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while adding logging client config"
|
||
return 1
|
||
fi
|
||
|
||
/etc/init.d/nfs-kernel-server restart
|
||
|
||
exportfs -va
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while configure exports"
|
||
return 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
|
||
return 0
|
||
}
|
||
|
||
|
||
# ejemplos:
|
||
#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
|
||
#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
|
||
#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
|
||
function nfsAddExport()
|
||
{
|
||
if [ $# -lt 2 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f /etc/exports ]; then
|
||
errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
|
||
return 1
|
||
fi
|
||
|
||
local export="${1}"
|
||
local contador=0
|
||
local cadenaexport
|
||
|
||
grep "^${export}" /etc/exports > /dev/null
|
||
if [ $? -eq 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
|
||
return 0
|
||
fi
|
||
|
||
cadenaexport="${export}"
|
||
for parametro in $*
|
||
do
|
||
if [ $contador -gt 0 ]
|
||
then
|
||
host=`echo $parametro | awk -F: '{print $1}'`
|
||
options=`echo $parametro | awk -F: '{print $2}'`
|
||
if [ "${host}" == "" ]; then
|
||
errorAndLog "${FUNCNAME}(): host can't be empty"
|
||
return 1
|
||
fi
|
||
cadenaexport="${cadenaexport}\t${host}"
|
||
|
||
if [ "${options}" != "" ]; then
|
||
cadenaexport="${cadenaexport}(${options})"
|
||
fi
|
||
fi
|
||
let contador=contador+1
|
||
done
|
||
|
||
echo -en "$cadenaexport\n" >> /etc/exports
|
||
|
||
echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
|
||
|
||
return 0
|
||
}
|
||
|
||
########################################################################
|
||
## Configuracion servicio DHCP
|
||
########################################################################
|
||
|
||
function dhcpConfigure()
|
||
{
|
||
echoAndLog "${FUNCNAME}(): Sample DHCP Configuration."
|
||
|
||
backupFile /etc/dhcp3/dhcpd.conf
|
||
|
||
sed -e "s/SERVERIP/$SERVERIP/g" \
|
||
-e "s/NETIP/$NETIP/g" \
|
||
-e "s/NETMASK/$NETMASK/g" \
|
||
-e "s/NETBROAD/$NETBROAD/g" \
|
||
-e "s/ROUTERIP/$ROUTERIP/g" \
|
||
-e "s/DNSIP/$DNSIP/g" \
|
||
$WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while configuring dhcp server"
|
||
return 1
|
||
fi
|
||
|
||
/etc/init.d/dhcp3-server restart
|
||
echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"."
|
||
return 0
|
||
}
|
||
|
||
|
||
#####################################################################
|
||
####### Funciones especÃficas de la instalación de Opengnsys
|
||
#####################################################################
|
||
|
||
# Copiar ficheros del OpenGnSys Web Console.
|
||
function installWebFiles()
|
||
{
|
||
echoAndLog "${FUNCNAME}(): Installing web files..."
|
||
cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen
|
||
if [ $? != 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): Error copying web files."
|
||
exit 1
|
||
fi
|
||
find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
|
||
# Cambiar permisos para ficheros especiales.
|
||
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \
|
||
$INSTALL_TARGET/www/includes \
|
||
$INSTALL_TARGET/www/comandos/gestores/filescripts \
|
||
$INSTALL_TARGET/www/images/iconos
|
||
echoAndLog "${FUNCNAME}(): Web files installed successfully."
|
||
}
|
||
|
||
# Configuración especÃfica de Apache.
|
||
function openGnsysInstallWebConsoleApacheConf()
|
||
{
|
||
if [ $# -ne 2 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local path_opengnsys_base=$1
|
||
local path_apache2_confd=$2
|
||
local path_web_console=${path_opengnsys_base}/www
|
||
|
||
if [ ! -d $path_apache2_confd ]; then
|
||
errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
|
||
return 1
|
||
fi
|
||
|
||
mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
|
||
|
||
echoAndLog "${FUNCNAME}(): creating apache2 config file.."
|
||
|
||
|
||
# genera configuración
|
||
cat > $path_opengnsys_base/etc/apache.conf <<EOF
|
||
# OpenGnSys Web Console configuration for Apache
|
||
|
||
Alias /opengnsys ${path_web_console}
|
||
|
||
<Directory ${path_web_console}>
|
||
Options -Indexes FollowSymLinks
|
||
DirectoryIndex acceso.php
|
||
</Directory>
|
||
EOF
|
||
|
||
ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf
|
||
ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
|
||
return 1
|
||
else
|
||
echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
|
||
/etc/init.d/apache2 restart
|
||
return 0
|
||
fi
|
||
}
|
||
|
||
# Crear documentación Doxygen para la consola web.
|
||
function makeDoxygenFiles()
|
||
{
|
||
echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
|
||
$WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
|
||
$WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
|
||
if [ ! -d "$INSTALL_TARGET/www/html" ]; then
|
||
errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
|
||
return 1
|
||
fi
|
||
mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
|
||
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
|
||
echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
|
||
}
|
||
|
||
|
||
# Crea la estructura base de la instalación de opengnsys
|
||
function openGnsysInstallCreateDirs()
|
||
{
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local path_opengnsys_base=$1
|
||
|
||
echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
|
||
|
||
mkdir -p $path_opengnsys_base
|
||
mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios}
|
||
mkdir -p $path_opengnsys_base/bin
|
||
mkdir -p $path_opengnsys_base/client
|
||
mkdir -p $path_opengnsys_base/doc
|
||
mkdir -p $path_opengnsys_base/etc
|
||
mkdir -p $path_opengnsys_base/lib
|
||
mkdir -p $path_opengnsys_base/log/clients
|
||
mkdir -p $path_opengnsys_base/sbin
|
||
mkdir -p $path_opengnsys_base/www
|
||
mkdir -p $path_opengnsys_base/images
|
||
ln -fs /var/lib/tftpboot $path_opengnsys_base
|
||
ln -fs $path_opengnsys_base/log /var/log/opengnsys
|
||
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
|
||
return 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): directory paths created"
|
||
return 0
|
||
}
|
||
|
||
# Copia ficheros de configuración y ejecutables genéricos del servidor.
|
||
function openGnsysCopyServerFiles () {
|
||
if [ $# -ne 1 ]; then
|
||
errorAndLog "${FUNCNAME}(): invalid number of parameters"
|
||
exit 1
|
||
fi
|
||
|
||
local path_opengnsys_base=$1
|
||
|
||
local SOURCES=( client/boot/initrd-generator \
|
||
client/boot/upgrade-clients-udeb.sh \
|
||
client/boot/udeblist.conf \
|
||
client/boot/udeblist-jaunty.conf \
|
||
client/boot/udeblist-karmic.conf \
|
||
client/boot/udeblist-lucid.conf \
|
||
server/PXE/pxelinux.cfg/default \
|
||
doc )
|
||
local TARGETS=( bin/initrd-generator \
|
||
bin/upgrade-clients-udeb.sh \
|
||
etc/udeblist.conf \
|
||
etc/udeblist-jaunty.conf \
|
||
etc/udeblist-karmic.conf \
|
||
etc/udeblist-lucid.conf \
|
||
tftpboot/pxelinux.cfg/default \
|
||
doc )
|
||
|
||
if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
|
||
errorAndLog "${FUNCNAME}(): inconsistent number of array items"
|
||
exit 1
|
||
fi
|
||
|
||
echoAndLog "${FUNCNAME}(): copying files to server directories"
|
||
|
||
pushd $WORKDIR/opengnsys
|
||
local i
|
||
for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
|
||
if [ -f "${SOURCES[$i]}" ]; then
|
||
echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
|
||
cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
|
||
elif [ -d "${SOURCES[$i]}" ]; then
|
||
echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
|
||
cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
|
||
else
|
||
echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
|
||
fi
|
||
done
|
||
popd
|
||
}
|
||
|
||
####################################################################
|
||
### Funciones de compilación de códifo fuente de servicios
|
||
####################################################################
|
||
|
||
# Compilar los servicios de OpenGNsys
|
||
function servicesCompilation ()
|
||
{
|
||
local hayErrores=0
|
||
|
||
# Compilar OpenGnSys Server
|
||
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
|
||
pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer
|
||
make && make install
|
||
if [ $? -ne 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
|
||
hayErrores=1
|
||
fi
|
||
popd
|
||
# Compilar OpenGnSys Repository Manager
|
||
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
|
||
pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo
|
||
make && make install
|
||
if [ $? -ne 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
|
||
hayErrores=1
|
||
fi
|
||
popd
|
||
# Compilar OpenGnSys Client
|
||
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client"
|
||
pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient
|
||
make && mv ogAdmClient ../../../client/nfsexport/bin
|
||
if [ $? -ne 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client"
|
||
hayErrores=1
|
||
fi
|
||
popd
|
||
|
||
return $hayErrores
|
||
}
|
||
|
||
|
||
####################################################################
|
||
### Funciones instalacion cliente opengnsys
|
||
####################################################################
|
||
|
||
function openGnsysClientCreate()
|
||
{
|
||
local OSDISTRIB OSCODENAME
|
||
|
||
local hayErrores=0
|
||
|
||
echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
|
||
cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client
|
||
find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
|
||
echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
|
||
mkdir -p $INSTALL_TARGET/client/lib/engine/bin
|
||
cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while copying engine files"
|
||
hayErrores=1
|
||
fi
|
||
|
||
# Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto).
|
||
OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
|
||
OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
|
||
if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then
|
||
echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME."
|
||
$INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME"
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
|
||
hayErrores=1
|
||
fi
|
||
echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME."
|
||
$INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME"
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
|
||
hayErrores=1
|
||
fi
|
||
else
|
||
echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files."
|
||
$INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
|
||
hayErrores=1
|
||
fi
|
||
echoAndLog "${FUNCNAME}(): Loading default udeb files."
|
||
$INSTALL_TARGET/bin/upgrade-clients-udeb.sh
|
||
if [ $? -ne 0 ]; then
|
||
errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
|
||
hayErrores=1
|
||
fi
|
||
fi
|
||
|
||
if [ $hayErrores -eq 0 ]; then
|
||
echoAndLog "${FUNCNAME}(): Client generation success."
|
||
else
|
||
errorAndLog "${FUNCNAME}(): Client generation with errors"
|
||
fi
|
||
|
||
return $hayErrores
|
||
}
|
||
|
||
|
||
# Configuración básica de servicios de OpenGnSys
|
||
function openGnsysConfigure()
|
||
{
|
||
echoAndLog "openGnsysConfigure(): Copying init files."
|
||
cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys
|
||
cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys
|
||
update-rc.d opengnsys defaults
|
||
echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"."
|
||
perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg
|
||
perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg
|
||
echoAndLog "${FUNCNAME}(): Creating Web Console config file"
|
||
OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys"
|
||
perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php
|
||
sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg
|
||
echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services."
|
||
/etc/init.d/opengnsys start
|
||
}
|
||
|
||
|
||
#####################################################################
|
||
####### Función de resumen informativo de la instalación
|
||
#####################################################################
|
||
|
||
function installationSummary(){
|
||
echo
|
||
echoAndLog "OpenGnSys Installation Summary"
|
||
echo "=============================="
|
||
echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)"
|
||
echoAndLog "Installation directory: $INSTALL_TARGET"
|
||
echoAndLog "Repository directory: $INSTALL_TARGET/images"
|
||
echoAndLog "TFTP configuracion directory: /var/lib/tftpboot"
|
||
echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf"
|
||
echoAndLog "NFS configuracion file: /etc/exports"
|
||
echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL"
|
||
echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER"
|
||
echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD"
|
||
echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER"
|
||
echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD"
|
||
echo
|
||
echoAndLog "Post-Installation Instructions:"
|
||
echo "==============================="
|
||
echoAndLog "Review or edit all configuration files."
|
||
echoAndLog "Insert DHCP configuration data and restart service."
|
||
echoAndLog "Log-in as Web Console admin user."
|
||
echoAndLog " - Review default Organization data and default user."
|
||
echoAndLog "Log-in as Web Console organization user."
|
||
echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)."
|
||
echo
|
||
}
|
||
|