git-svn-id: https://opengnsys.es/svn/branches/version1.0@1763 a21b9725-9963-47de-94b9-378ad31fedc9

remotes/github/debian-pkg
Antonio Doblas Viso 2011-04-08 13:56:46 +00:00
parent 931b78d12e
commit 58828de331
152 changed files with 10952 additions and 0 deletions

View File

@ -0,0 +1,46 @@
########## INSTALACION ##################################
### NOTA principal: utilizar el usuario root para este proceso ####
1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado.
1. Descargar del subversion la estrucutura del cliente.
# reubicacion al trunk/client/boot
Proceso:
0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso.
1. Descargar del subversion la rama ogClient.
3. Ejecutar el instalador:
mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk;
svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient;
svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared;
svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine;
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh;
NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias.
NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient
NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria.
NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs
NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log
NOTA A RECORDAR:
NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff}
################## Descripcion de la estrucutra de ogClient.
los directorios old y serverstrucutre son antiguos, pero no borrarlos.
INSTALL.es.txt : este mismo archivo.
ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion.
ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh)
ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador.
############ ERROR PRINCIPAL 2 #######
necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client
sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient

View File

@ -0,0 +1,4 @@
deb http://ftp.us.debian.org/debian lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

View File

@ -0,0 +1,56 @@
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse
deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse
## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse
# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu OSCODENAME partner
# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner
deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted
deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted
deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe
deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe
deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse
deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse
deb http://archive.ubuntu.com/ubuntu OSCODENAME main
deb http://free.nchc.org.tw/drbl-core drbl stable
deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse
deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main
deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main
deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main

View File

@ -0,0 +1,4 @@
LC_TYPE=es_ES@euro
LC_ALL=es_ES@euro
LANG=es_ES@euro
LANGUAGE=es_ES@euro

View File

@ -0,0 +1,13 @@
# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc 0 0
/dev/sda1 ext3 errors=remount-ro 0 1

View File

@ -0,0 +1,58 @@
#!/bin/sh -e
# initramfs hook for OpenGnsys
#@file oghooks
#@brief configuración initrd para OpenGnSys
#@warning
#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros
#@author Antonio J. Doblas Viso.
#@date 2010/05/24
#*/
PREREQ="og"
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
mkdir -p ${DESTDIR}/scripts/og-top
mkdir -p ${DESTDIR}/scripts/og-premount
mkdir -p ${DESTDIR}/scripts/og-bottom
mkdir -p ${DESTDIR}/mnt/
mkdir -p ${DESTDIR}/net/
mkdir -p ${DESTDIR}/usr
mkdir -p ${DESTDIR}/var/lock
mkdir -p ${DESTDIR}/var/log
mkdir -p ${DESTDIR}/opt/opengnsys;
mkdir -p ${DESTDIR}/ogboot;
mkdir -p ${DESTDIR}/boot;
# Insert basic binaries
copy_exec /bin/bash-static /bin/bash
copy_exec /usr/bin/unionfs-fuse
copy_exec /sbin/mount.cifs
# Insert OpenGnsys Engine
#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine
rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl*
manual_add_modules cifs
manual_add_modules smbfs
manual_add_modules atl1e
manual_add_modules squashfs

View File

@ -0,0 +1,14 @@
# List of modules that you want to include in your initramfs.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
vga16b
vesafb
fbcon

View File

@ -0,0 +1,427 @@
#@file ogfunctions.lib
#@brief Librería o clase para la generación del 1erFS
#@class client
#@brief Funciones para la generación del primers sistema (initrd)
#@version 0.91
#@warning License: GNU GPLv3+
ogExportKernelParameters ()
{
GLOBAL="cat /proc/cmdline"
for i in `${GLOBAL}`
do
echo $i | grep "=" > /dev/null && export $i
done
return 0
}
ogExportVarEnvironment ()
{
#puntos de accesos al servidor ogprotocol=nfs
export NFSROOTBOOT="/var/lib/tftpboot"
export NFSCLIENTDIR="/opt/opengnsys/client"
export NFSLOGDIR="/opt/opengnsys/log/clients"
export NFSIMGDIR="/opt/opengnsys/images"
#puntos de accesos al servidor ogprotocol=smb
export SMBROOTBOOT="tftpboot"
export SMBCLIENTDIR="ogclient"
export SMBLOGDIR="oglog"
export SMBIMGDIR="ogimages"
#puntos de montaje local ram o cache
export LOCALCLIENTDIR="/opt/opengnsys"
export LOCALLOGDIR="/opt/opengnsys/log"
export LOCALIMGDIR="/opt/opengnsys/images"
export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot
export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop
export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs
export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES.
#ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd.
#IPV4DDR
#IPV4BROADCAST
#IPV4NETMASK
#IPV4GATEWAY
#DNS0 DNS1
#HOSTNAME
#ROOTSERVER #ip del servidor pxe que ha servido el kernel
#REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios.
return 0
}
ogConfigureRamfs ()
{
mkdir -p $LOCALROOTBOOT
mkdir -p $LOCALROOTIMG
mkdir -p $LOCALROOTRAM
mkdir -p $LOCALROOTUNION
}
ogLoadNetModule ()
{
#cargando netmodule
if [ -n "$ognetmodule" ]
then
echo "Cargando modulo de red $netmodule"
insmod `find /lib/modules/ -name ${netmodule}*`
fi
}
ogPostConfigureFS()
{
# configuramos el /etc/hostname.
echo $HOSTNAME > /etc/hostname
#configuramos el /etc/hosts
echo "127.0.0.1 localhost" > /etc/hosts
echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
#configuramos el host.conf
echo "order hosts,bind" > /etc/host.conf
echo "multi on" >> /etc/host.conf
# configuramos el /etc/networks
#read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
echo "default 0.0.0.0" > /etc/networks
echo "loopback 127.0.0.0" >> /etc/networks
echo "link-local 169.254.0.0" >> /etc/networks
echo "localnet $NETIP" >> /etc/networks
#route
}
ogGetROOTSERVER ()
{
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
# check if server ip is part of dhcp root-path
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
else
NFSROOT=${ROOTPATH}
fi
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
NFSOPTS="-o ${NFSROOT#*,}"
fi
NFSROOT=${NFSROOT%%,*}
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
NFSROOT=${ROOTSERVER}:${NFSROOT}
fi
fi
export ROOTSERVER
return 0
}
ogConectROOTSERVER ()
{
local OPTIONS
#params a detectar
if [ $ogrepo ]
then
# Validar si la ip es correcta
ROOTREPO=$ogrepo
else
ROOTREPO=$ROOTSERVER
fi
case "$ogprotocol" in
cdrom)
echo "Montar imagen de CD-ROM"
blkid /dev/s*
mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT
;;
httfs)
echo "protocolo httfs aun no soportado"
;;
sshfs)
echo "protocolo sshfs aun no soportado"
;;
smb)
echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
OPTIONS=" -o user=opengnsys,pass=og"
mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS
mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS
mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS
mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro
;;
nfs)
echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR
nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR
nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT
nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR
;;
esac
}
ogMerge2ndFile()
{
if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ]
then
cat /proc/mounts > /tmp/mtab.preunion
if [ "$og2nd" == "img" ]
then
#para acceder al img
losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256
mount /dev/loop0 $LOCALROOTIMG
else
## para acceder al squashfs
mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop
fi
for i in etc var lib bin sbin usr root boot; do
unionmount $i
done
cat /tmp/mtab.preunion > /etc/mtab
else
echo "Fichero imagen del cliente no encontrado"
return 1
fi
}
unionmount()
{
tmpdir=/$1 #dir
FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
UNION_OPT="-o cow -o noinitgroups"
UBIN="unionfs-fuse"
#UPATH="/unionfs"
#LOCALROOTIMG="/opt/og2fs/2ndfs"
#LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs
#LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
#mkdir -p $LOCALROOTRAM #/unionfs/host
#mkdir -p $LOCALROOTUNION #/unionfs/union
mkdir -p $LOCALROOTRAM$tmpdir
#mount --bind /$tmpdir $LOCALROOTRAM$tmpdir
U1STDIR="${LOCALROOTRAM}${tmpdir}=RW"
U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO"
UNIONDIR=$LOCALROOTUNION$tmpdir
mkdir -p $UNIONDIR
$UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
mount --bind $UNIONDIR $tmpdir
}
unionmountOLD()
{
FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
UNION_OPT="-o cow -o noinitgroups"
UPATH="/unionfs"
UBIN="unionfs-fuse"
mkdir -p /unionfs/host
mkdir -p /unionfs/union
dir=$1
mkdir -p /unionfs/host/$dir
#mount --bind /$dir /unionfs/host/$dir
mkdir -p /unionfs/union/$dir
host="/unionfs/host/${dir}=RW"
common="/opt/og2fs/${dir}=RO"
$UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir
mount --bind /unionfs/union/$dir /$dir
}
ogconfigure_lo()
{
# for the portmapper we need localhost
ifconfig lo 127.0.0.1
#/etc/init.d/portmap start
}
ogconfigure_networking()
{
IP=$IPOPTS
# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000
if [ -n "${BOOTIF}" ]; then
# pxelinux sets BOOTIF to a value based on the mac address of the
# network card used to PXE boot, so use this value for DEVICE rather
# than a hard-coded device name from initramfs.conf. this facilitates
# network booting when machines may have multiple network cards.
# pxelinux sets BOOTIF to 01-$mac_address
# strip off the leading "01-", which isn't part of the mac
# address
temp_mac=${BOOTIF#*-}
# convert to typical mac address format by replacing "-" with ":"
bootif_mac=""
IFS='-'
for x in $temp_mac ; do
if [ -z "$bootif_mac" ]; then
bootif_mac="$x"
else
bootif_mac="$x:$bootif_mac"
fi
done
unset IFS
# look for devices with matching mac address, and set DEVICE to
# appropriate value if match is found.
for device in /sys/class/net/* ; do
if [ -f "$device/address" ]; then
current_mac=$(cat "$device/address")
if [ "$bootif_mac" = "$current_mac" ]; then
DEVICE=${device##*/}
break
fi
fi
done
fi
# networking already configured thus bail out
[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
# support ip options see linux sources
# Documentation/filesystems/nfsroot.txt
# Documentation/frv/booting.txt
for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
# The NIC is to be configured if this file does not exist.
# Ip-Config tries to create this file and when it succeds
# creating the file, ipconfig is not run again.
if [ -e /tmp/net-"${DEVICE}".conf ]; then
break;
fi
case ${IP} in
none|off)
# Do nothing
;;
""|on|any)
# Bring up device
echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
ipconfig -t ${ROUNDTTT} ${DEVICE}
;;
dhcp|bootp|rarp|both)
echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
;;
*)
echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP "
ipconfig -t ${ROUNDTTT} -d $IP
# grab device entry from ip option
NEW_DEVICE=${IP#*:*:*:*:*:*}
if [ "${NEW_DEVICE}" != "${IP}" ]; then
NEW_DEVICE=${NEW_DEVICE%:*}
else
# wrong parse, possibly only a partial string
NEW_DEVICE=
fi
if [ -n "${NEW_DEVICE}" ]; then
DEVICE="${NEW_DEVICE}"
fi
;;
esac
done
# source ipconfig output
if [ -n "${DEVICE}" ]; then
# source specific bootdevice
. /tmp/net-${DEVICE}.conf
else
# source any interface as not exaclty specified
. /tmp/net-*.conf
fi
}
#####################################################################
# Ask yesno question.
#
# Usage: yesno OPTIONS QUESTION
#
# Options:
# --timeout N Timeout if no input seen in N seconds.
# --default ANS Use ANS as the default answer on timeout or
# if an empty answer is provided.
#
# Exit status is the answer. 0=yes 1=no
ogYesNo()
{
local ans
local ok=0
local timeout=0
local default
local t
while [[ "$1" ]]
do
case "$1" in
--default)
shift
default=$1
if [[ ! "$default" ]]; then error "Missing default value"; fi
t=$(echo $default | tr '[:upper:]' '[:lower:]')
if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then
error "Illegal default answer: $default"
fi
default=$t
shift
;;
--timeout)
shift
timeout=$1
if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
#if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
shift
;;
-*)
error "Unrecognized option: $1"
;;
*)
break
;;
esac
done
if [[ $timeout -ne 0 && ! "$default" ]]; then
error "Non-zero timeout requires a default answer"
fi
if [[ ! "$*" ]]; then error "Missing question"; fi
while [[ $ok -eq 0 ]]
do
if [[ $timeout -ne 0 ]]; then
if ! read -t $timeout -p "$*" ans; then
ans=$default
else
# Turn off timeout if answer entered.
timeout=0
if [[ ! "$ans" ]]; then ans=$default; fi
fi
else
read -p "$*" ans
if [[ ! "$ans" ]]; then
ans=$default
else
ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
fi
fi
if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then
ok=1
fi
if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
done
[[ "$ans" = "y" || "$ans" == "yes" ]]
}

View File

@ -0,0 +1,111 @@
# OpenGnsys oginit -*- shell-script -*-
#@file oginit
#@brief Guion modificador inicio initrd para OpenGnSys
#@warning
#@version 0.1 - basado en ROOTfs
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009/00/00
#@version 0.2 - basado en el instalador de ubunto
#@author Alejandro Castillo
#@author Ramón Gómez
#@author Irina
#@author Antonio Doblas
#@date 2010/00/00
#@version 0.7 - Generación limpia con mkinitrd, busybox
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/05/24
#@version 0.8 - Integración con FileSystem externo
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/06/24
#@version 0.8.1 - UnionFS + squasfs
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/06/29
#*/
# Parameter: Where to mount the filesystem
mountroot ()
{
[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
run_scripts /scripts/og-top
[ "$quiet" != "y" ] && log_end_msg
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
. /scripts/functions
. /scripts/ogfunctions
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N "
[ $? == 0 ] && sh || echo " "
set -a
log_success_msg "Checking kernel parameters"
ogExportKernelParameters
log_success_msg "Checking Opengnys Environmnet"
ogExportVarEnvironment
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N "
[ $? == 0 ] && sh || echo " "
ogConfigureRamfs
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N "
[ $? == 0 ] && sh || echo " "
ogLoadNetModule
#[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
#run_scripts /scripts/og-premount
#[ "$quiet" != "y" ] && log_end_msg
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
[ $? == 0 ] && sh || echo " "
ogconfigure_networking
log_success_msg "config networking"
ogconfigure_lo
log_success_msg "config loopback"
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N "
[ $? == 0 ] && sh || echo " "
ogGetROOTSERVER && log_success_msg "Get Info from pxe server"
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N "
[ $? == 0 ] && sh || echo " "
ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh
# ogConectROOTMEDIA
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N "
[ $? == 0 ] && sh || echo " "
ogMerge2ndFile && log_success_msg "Merge onto Second File System"
#[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom"
#run_scripts /scripts/og-bottom
#[ "$quiet" != "y" ] && log_end_msg
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N "
[ $? == 0 ] && sh || echo " "
ogPostConfigureFS
setupcon -k
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N "
[ $? == 0 ] && sh || echo " "
if [ "$oginit" ]
then
exec $oginit
else
exec init
fi
}

View File

@ -0,0 +1,14 @@
# This is run first except when booting in single-user mode
#
#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh
# /bin/sh invocations on selected ttys
#
# Start an "askfirst" shell on the console (whatever that may be)
#::askfirst:/bin/sh
# Start an "askfirst" shell on /dev/tty2-4
#tty1::respawn:/sbin/getty 38400 tty1
tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5

View File

@ -0,0 +1,30 @@
# Framebuffer drivers are generally buggy and poorly-supported, and cause
# suspend failures, kernel panics and general mayhem. For this reason we
# never load them automatically.
blacklist aty128fb
blacklist atyfb
#blacklist radeonfb
blacklist cirrusfb
blacklist cyber2000fb
blacklist cyblafb
blacklist gx1fb
blacklist hgafb
blacklist i810fb
blacklist intelfb
blacklist kyrofb
blacklist lxfb
blacklist matroxfb_base
blacklist neofb
blacklist nvidiafb
blacklist pm2fb
blacklist rivafb
blacklist s1d13xxxfb
blacklist savagefb
blacklist sisfb
blacklist sstfb
blacklist tdfxfb
blacklist tridentfb
#blacklist vesafb
blacklist vfb
blacklist viafb
blacklist vt8623fb

View File

@ -0,0 +1,4 @@
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

View File

@ -0,0 +1,84 @@
#!/bin/bash
#/**
#@file loadenviron.sh
#@brief Script de carga de la API de funciones de OpenGNSys.
#@warning License: GNU GPLv3+
#@version 0.9
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-10
#*/
GLOBAL="cat /proc/cmdline"
for i in `${GLOBAL}`
do
echo $i | grep "=" > /dev/null && export $i
done
# FIXME Temporal
export LANG="${LANG:-es_ES}"
#/// Directorios del projecto OpenGNSys.
export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}"
if [ -d $OPENGNSYS ]; then
export OGBIN=$OPENGNSYS/bin
export OGETC=$OPENGNSYS/etc
export OGLIB=$OPENGNSYS/lib
export OGAPI=$OGLIB/engine/bin
export OGSCRIPTS=$OPENGNSYS/scripts
export OGIMG=$OPENGNSYS/images
export OGCAC=$OPENGNSYS/cache
export OGLOG=$OPENGNSYS/log
# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH
# export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH
#/// Cargar fichero de idioma.
LANGFILE=$OGETC/lang.$LANG.conf
if [ -f $LANGFILE ]; then
source $LANGFILE
#for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do
for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do
export $i
done
fi
#/// Cargar API de funciones.
echo "$MSG_LOADAPI"
for i in $OGAPI/*.lib; do
source $i
done
for i in $(typeset -F | cut -f3 -d" "); do
export -f $i
done
# Carga de las API testing
if [ "$engine" = "testing" ]
then
for i in $OGAPI/*.testing; do
source $i
done
fi
# Añadir dependencia de arquitectura
ARCH=$(ogGetArch)
if [ -n "$ARCH" ]; then
# export PATH=$OGBIN/$ARCH:$PATH
# export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin
export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH
fi
# Fichero de registros.
export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
# FIXME Pruebas para grupos de ordenadores
#export OGGROUP=$(ogGetGroup)
export OGGROUP=aula3
fi
#/// Declaración de códigos de error.
export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto.
export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado.
export OG_ERR_PARTITION=3 # Error en partición de disco.
export OG_ERR_LOCKED=4 # Partición o fichero bloqueado.
export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen.
export OG_ERR_NOTOS=6 # Sin sistema operativo.
export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable.

View File

@ -0,0 +1,56 @@
# This is the ssh client system-wide configuration file. See
# ssh_config(5) for more information. This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.
# Configuration data is parsed as follows:
# 1. command line options
# 2. user-specific file
# 3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.
# Site-wide defaults for some commonly used options. For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.
Host *
# ForwardAgent no
# ForwardX11 no
# ForwardX11Trusted yes
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# Port 22
# Protocol 2,1
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
SendEnv LANG LC_*
# HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

View File

@ -0,0 +1,86 @@
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

View File

@ -0,0 +1,30 @@
#!/bin/bash
################################################################
##################### SOFTWARE #####################
################################################################
export LANGUAGE=C
export LC_ALL=C
export LANG=C
#dpkg-divert --local --rename --add /sbin/initctl
#ln -s /bin/true /sbin/initctl
apt-get -y update
# software to compile code
apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk
source /opt/opengnsys/lib/engine/bin/ToolsGNU.c
ctorrent install
udpcast install
#ntfs-3g install
ms-sys install
wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh
gdebi -n partclone_0.2.16_i386.deb
cd /tmp
wget http://damien.guibouret.free.fr/savepart.zip
unzip savepart.zip -d /sbin/

View File

@ -0,0 +1,24 @@
#!/bin/bash
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
#mv /etc/fstab /etc/fstab.original 2>/dev/null
#mv /etc/mtab /etc/mtab.original 2>/dev/null
#TODO: fichero etc/hosts
#TODO: fichero etc/resolv.conf
echo "ogClient" > /etc/hostname
#export PASSROOT=og
#dpkg-reconfigure passwd
#echo "root:$PASSROOT" | chpasswd
#for i in pts/0 pts/1 pts/2 pts/3 do
#
#
#done
#TODO: introducir mas consoluas para el acceso como root.
echo "pts/0" >> /etc/securetty
echo "pts/1" >> /etc/securetty
echo "pts/2" >> /etc/securetty
echo "pts/3" >> /etc/securetty

View File

@ -0,0 +1,16 @@
#!/bin/bash
export 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
export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
export OSRELEASE=$(uname -a | awk '{print $3}')
uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
cd /usr/lib/initramfs-tools/bin/
rm *
cp /bin/busybox ./
cd /tmp/
mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE
cp /boot/vmlinuz-$OSRELEASE /tmp

View File

@ -0,0 +1,62 @@
#!/bin/bash
################################################################
##################### SOFTWARE #####################
################################################################
export LANGUAGE=C
export LC_ALL=C
export LANG=C
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
apt-get clean
apt-get -y update
# software system
apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static
apt-get -y --force-yes install console-data locales
# sofware networking
apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils
apt-get clean
# software services
apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub
# software disk and filesystem
apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools
apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools
apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils
# software cloning
apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools
apt-get -y --force-yes install mbuffer
apt-get clean
## software postconf
apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk
# software compressor
apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip
apt-get -y --force-yes remove busybox
apt-get -y --force-yes install busybox-static bash-static
apt-get clean
#apt-get -y --force-yes xorg-dev xorg lxde roxterm
#
####################################################################
###################### Reconfigurando paquetes ######################
###################################################################
#dpkg-reconfigure console-data
#dpkg-reconfigure console-setup
#dpkg-reconfigure locales
apt-get clean
##TODO################# Borrar algunos binarios del mkinitramfs

View File

@ -0,0 +1,4 @@
#!/bin/bash
dpkg-reconfigure console-data
dpkg-reconfigure console-setup
dpkg-reconfigure locales

View File

@ -0,0 +1,23 @@
#!/bin/bash
echo "comprobando directorio .ssh del root"
if [ ! -d /root/.ssh ]
then
echo "creando directorio .ssh 600"
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
echo "comprobando el fichero authorized_keys .ssh del root"
if [ ! -f /root/.ssh/authorized_keys ]
then
echo "creando el fichero authorized_keys"
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
fi
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
## TODO: exportamos la publica a los repos
cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub

View File

@ -0,0 +1,17 @@
#!/bin/bash
echo "comprobando directorio .ssh del root"
if [ ! -d /root/.ssh ]
then
echo "creando directorio .ssh 600"
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
echo "creando el fichero authorized_keys"
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
echo "importando la clave publica del servidor OG"
cat /tmp/id_rsa.pub
[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og"

View File

@ -0,0 +1,9 @@
#/bin/bash
mount -o rw,remount /
mount proc /proc -t proc
export PATH=$PATH dpkg -i *.deb
modprobe 8139too
modprobe 8139cp
dhclient
/etc/init.d/ssh restart

View File

@ -0,0 +1,5 @@
es_ES ISO-8859-1
es_ES@euro ISO-8859-15
es_ES.UTF-8 UTF-8
es_ES.UTF-8@euro UTF-8
en_US.UTF-8 UTF-8

View File

@ -0,0 +1,29 @@
KERNEL ogclient/ogvmlinuz
initrd=ogclient/oginitrd.img
boot=oginit
oginit=init|/bin/bash
ogrepo=ip del repositorio
og2nd=sqfs|img
ogprotocol=smb|nfs
ogactiveadmin=true|false
ogdebug=true|false
vga=788
irqpoll
acpi=on
FIXME: en la version actual
repo=iprepoman
IP
TODO: en la proxima version
ogrepo
ip

View File

@ -0,0 +1,166 @@
#!/bin/bash
#@file ogClientGenerator.sh
#@brief Script generación del cliente OpenGnSys
#@warning
#@version 0.9 -
#@author Antonio J. Doblas Viso.
#@date 2010/05/24
#*/
#$1 OSCONENAME lucid karmic
#if [ $# -ne 1 ]; then
# echo ": invalid number of parameters"
# echo " host | lucid | karmic | jaunty | lenny | squeeze "
# exit 1
#fi
TYPECLIENT=host
# Solo ejecutable por usuario root
if [ "$(whoami)" != 'root' ]
then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
#FIXME: variables del instalador oficial.
WORKDIR=/tmp/opengnsys_installer
INSTALL_TARGET=/opt/opengnsys
LOG_FILE=/tmp/opengnsys_installation.log
PROGRAMDIR=$(readlink -e $(dirname "$0"))
#funciones especificas del cliente.
source $PROGRAMDIR/ogClientManager.lib
#funciones incluidas dentro del scritps general de instalacion.
source $PROGRAMDIR/ogInstaller.lib
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
##########################################################################
## FASE 1 - Instalación de software adicional.
##TO DO Integrar en el instaldor. Actualizar repositorios
# Datos para la generación del cliente.
DEPENDENCIES=( debootstrap subversion schroot squashfs-tools)
apt-get update
# Instalación de dependencias (paquetes de sistema operativo).
declare -a notinstalled
checkDependencies DEPENDENCIES notinstalled
if [ $? -ne 0 ]; then
installDependencies notinstalled
if [ $? -ne 0 ]; then
echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
exit 1
fi
fi
############## FIN DEL TO DO
############################################## FIN FASE 1
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
############## FASE 2 - Asignación de variables
#obtenemos las variables necesarias.
ogClientVar
#obtenemos la información del host.
ogClientOsInfo
######################## FIN fase 2
############# FASE 3: Segundo Sistema archivos (img) Creación.
#TODO comprobacion de que el fichero esta creado.
file $OGCLIENTFILE | grep "partition 1: ID=0x83"
if [ $? == 1 ]
then
##3.1 creación y formateo del disco virtual. generamos el dispositivo loop.
ogClient2ndFile || exit 1
fi
#3.2 generamos el Sistema de archivos con debootstrap
# Comprobamos que ya tenemos alguno.
schroot -p -c IMGogclient -- touch /tmp/ogclientOK
if [ -f /tmp/ogclientOK ]
then
rm /tmp/ogclientOK
else
ogClient2ndFs $TYPECLIENT || exit
fi
############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot
cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf
############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys
ogClient2ndSVN $TYPECLIENT || exit
############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot
### 6.1 instalacion de software con apt-get
schroot -p -c IMGogclient -- /root/InstallSoftware.sh
echo "saltando"
if [ $? -ne 0 ]; then
errorAndLog "Instalando sofware adicional OG : ERROR"
exit
else
echoAndLog "Instalando sofware adicional OG: OK"
fi
#### 6.2 compilación de software.
cd /
schroot -p -c IMGogclient -- /root/CompileSoftware.sh
cd -
### 6.3 configuracion hostname passroot securety
cd /
schroot -c IMGogclient -- /root/ConfFS.sh
cd -
#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root
# schroot -c IMGogclient -- passwd root | echo "root"
### 6.4 incorporamos la clave publica del servidor
cd /
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
cp /root/.ssh/id_rsa.pub /tmp
schroot -p -c IMGogclient -- /root/importSshKeys.sh
cd -
############ y la del propio cliente.
schroot -c IMGogclient -- /root/generateSshKeysClient.sh
## configuramos los locales.
schroot -c IMGogclient -- /root/ReconfigureLocales.sh
################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img)
################## FASE 7. Generamos el 1er sistema de archivos. INITRD
#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host
#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd.
#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot
ogClientInitrd $TYPECLIENT
################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
# generamos el 2sistema de archivos en squashfs
ogClient2ndSqfs
################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
##################### FASE 9. algunos detallas del pxe
#dejamos ficheros de ejemplo para el pxe y el nfs
ogClientConfpxe
##################### FIN FASE 9. algunos detallas del pxe
# Mostrar sumario de la instalación e instrucciones de post-instalación.
installationSummary
echoAndLog "OpenGnSys installation finished at $(date)"

View File

@ -0,0 +1,607 @@
ogClientVar()
{
export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient
export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/
export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img
export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount
# tamaño maximo limitado por schroot 2GB
export OGCLIENTSIZEMB=1900
#export OGCLIENTSIZEMB=1000
# export OGCLIENTSIZEKB=500
export OGCLIENTLABEL=ogClient
#export OGLIB=/opt/opengnsys/client/lib
}
function ogClientOsInfo ()
{
#TODO según host, un OSHHTP u otro OSARCH
#1 OSCODENAME jaunty|karmic|lucid
#devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT
case $1 in
host | HOST)
export 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
export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
export OSRELEASE=$(uname -a | awk '{print $3}')
uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
;;
jaunty|JAUNTY)
export OSDISTRIB=ubuntu
export OSCODENAME=jaunty
export OSRELEASE="2.6.28-11-generic"
export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
;;
lenny|LENNY)
export OSDISTRIB=debian
export OSCODENAME=lenny
export OSRELEASE="2.6.28-11-generic"
export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
;;
squeeze|SQUEEZE)
export OSDISTRIB=debian
export OSCODENAME=squeeze
export OSRELEASE="2.6.28-11-generic"
export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
;;
karmic|KARMIC)
export OSDISTRIB=ubuntu
export OSCODENAME=karmic
export OSRELEASE="2.6.31-14-generic"
export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
;;
lucid|LUCID)
export OSDISTRIB=ubuntu
export OSCODENAME=lucid
export OSRELEASE="2.6.32-21-generic-pae"
export OSARCH=i386
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
;;
*)
return 1
;;
esac
echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
}
#creación y formateo del disco virtual.
ogClient2ndFile ()
{
local RERROR DISKLOOP PARTLOOP #return code error
echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB "
#Desmontamos por si acaso el dispositivo virtual
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT"
mkdir -p $OGCLIENTMOUNT
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR"
return 1
fi
echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos"
dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB
#qemu-img create $OGCLIENTFILE 3G
#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR"
return 1
fi
DISKLOOP=$(losetup -f)
losetup $DISKLOOP $OGCLIENTFILE
echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria"
echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP
#echo $?
# da error, porque no puede actualizar el kernel.
#if [ $? -ne 0 ]
#then
# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR"
# return 1
#fi
echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado "
losetup -d $DISKLOOP
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR"
return 1
fi
#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
PARTLOOP=$(losetup -f)
echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP"
losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR"
return 1
fi
echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo "
losetup -d $PARTLOOP
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR"
return 1
else
echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK"
fi
}
ogClient2ndFs ()
{
ogClientOsInfo $1
echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos "
#Montamos el dispositivo virtual en su punto de montaje.
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE "
#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
if [ $? -ne 0 ]; then
errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP
: ha fallado!"
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
return 1
else
echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP
: ok"
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
return 0
fi
sleep 5
##preubas revisar OSRELEASE
#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
}
########## configura el segundo sistema de archivos
########### parametro: "host"
function ogClient2ndSVN()
{
ogClientOsInfo $1
#1 la salida de ogClientOsInfo
local LERROR
LERROR=TRUE
echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN "
# comprobar que está montado $OGCLIENTMOUNT
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
# parseamos del apt.source
sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Parsing apt.sources : ERROR"
return 1
fi
#parseamos el script de generación del initrd.
sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR"
return 1
fi
#damos permiso al directorio de scripts
chmod 775 ${SVNCLIENTDIR}/clientstructure/root/*
# los copiamos
cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT
mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/
cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Copying client data : ERROR"
return 1
fi
# copiamos algunas cosas del nfsexport
#### Tipos de letra para el Browser.
cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts
#### Crear enlaces para compatibilidad con las distintas versiones del Browser.
mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/
mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/
ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.2/lib/fonts
ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.3/lib/fonts
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Linking Browser fonts : ERROR"
return 1
fi
# B ########################################################
cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Copying pci.ids : ERROR"
return 1
fi
cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Copying Browser : ERROR"
return 1
fi
cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Copying ogAdmClient : ERROR"
return 1
else
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
echoAndLog "$FUNCNAME: Finalizado: OK "
return 0
fi
}
ogClientSchrootConf()
{
echoAndLog "$FUNCNAME: Iniciando la configuración del schroot "
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)
#
# <file system> <mount point> <type> <options> <dump> <pass>
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
echoAndLog "$FUNCNAME: Finalizado: OK "
return 0
}
########### param1 "host"
ogClientInitrd()
{
ogClientVar
cd /
ogClientOsInfo $1
schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh
echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR"
cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR
cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img
cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz
cd -
}
ogClient2ndSqfs()
{
ogClientVar
echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
# si ya existe un sqfs lo renombramos
[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S`
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs
chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
}
ogClientSshkeys()
{
echo comprobamos clave rsa en el host REPO OG.
if [ ! -f /root/.ssh/id_rsa.pub ]
then
echo "creando claves rsa"
ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys"
else
echo "la claves ya estan creadas"
fi
echo "copiamos la clave publica a /tmp"
cp /root/.ssh/id_dsa.pub /tmp
cat /tmp/id_dsa.pub
echo "schroot con instrucciones."
schroot -c IMGogclient -- /root/importSshKeys.sh
echo "limpiando"
rm /tmp/id_dsa.pub
## copiamos ssh rsa del host al guest como authorized-key2
##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT
}
ogClientConfpxe()
{
################## DEJAMOS FICHERO DE EJEMPLOS PARA:
#default
cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient
LABEL pxe-${OGRELEASE}
KERNEL ogclient/vmlinuz-$OGRELEASE
APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=
LABEL pxe-2.6.32-21-generic-pae
KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae
APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs
LABEL cache
KERNEL grub.exe
APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img"
LABEL net
KERNEL grub.exe
APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae"
LABEL IfNOTcacheGOnet
KERNEL grub.exe
APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot"
#LABEL pxe-2.6.32-21-generic-pae
#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae
#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242
#LABEL grub
#KERNEL grub.exe
#APPEND keeppxe
FIN
#/etc/hosts
echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient
/etc/init.d/nfs-kernel-server restart
#####################################################################
}
############### No usados en el instalador, solo en actualizaciones.
#/**
# ogClientMount [str_program]
#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
#@return Si no hay parametros: login de acceso.
#@return con un parametro: La salida del programa ejecutado
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientMount ()
{
#TODO comprobar que OGFILE y OGFILEMOUNT existe.
mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc
mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys
mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp
mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev
mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts
[ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`)
[ $# = 1 ] && chroot $OGCLIENTMOUNT $1
}
#/**
# ogClientUnmount
#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
#@param
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientUnmount ()
{
cd /tmp
echo "desmontando cliente espere"
sleep 5
mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount
mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount
mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount
mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount
mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount
mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount
#-d -f -l
}
############################ hasta el final del archivo antiguos
############################# ANTIGUOS
function ogClientGetRelease ()
{
#1 OSCODENAME jaunty|karmic|lucid
case $1 in
jaunty|JAUNTY)
OSCODENAME=jaunty
OGRELEASE="2.6.28-11-generic"
echo $OGRELEASE
;;
lenny|LENNY)
OSCODENAME=lenny
OGRELEASE="2.6.28-11-generic"
echo $OGRELEASE
;;
squeeze|SQUEEZE)
OSCODENAME=squeeze
OGRELEASE="2.6.28-11-generic"
echo $OGRELEASE
;;
karmic|KARMIC)
OSCODENAME=karmic
OGRELEASE="2.6.31-14-generic"
echo $OGRELEASE
;;
lucid|LUCID)
OSCODENAME=lucid
OGRELEASE="2.6.32-21-generic-pae"
echo $OGRELEASE
;;
*)
return 1
;;
esac
}
#/**
# ogClientGenerator str_versionUbuntu str_release
#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Versión de ubuntu a generar, jaunty karmic
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientGeneratorDebootstrap ()
{
if [ $# != 2 ]
then
echo Debes introducir como argumento1: jaunty karmic lucid
echo Debes introducir como argumento2: la release
echo utiliza como entrada ogClientCheckVersion
return
fi
OSCODENAME=$1
OGRELEASE=$2
# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema
#apt-get install gdebi-core
#wget $LASTDEBOOTSTRAP
#gdebi -n debootstrap_1.0.20_all.deb
#Desmontamos por si acaso el dispositivo virtual
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
#Creamos el directorio donde montaremos el disco virtual
mkdir -p $OGCLIENTMOUNT
#Creamos el disco virtual con el filesystem del cliente.
dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB
#qemu-img create $OGCLIENTFILE 3G
#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
#particionamos el disco virtual
losetup /dev/loop0 $OGCLIENTFILE
echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0
losetup -d /dev/loop0
#formateamos la particion principal.
losetup -o 32256 /dev/loop1 $OGCLIENTFILE
mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1
#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
losetup -d /dev/loop1
#Montamos el dispositivo virtual en su punto de montaje.
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
#TODO Comprobar arquitectura
#Iniciamos la creación del sistema en el directorio de clientes.
#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
##preubas
#debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
if [ $? -ne 0 ]; then
errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!"
return 1
else
echoAndLog "ogClientGeneratorDebootstrap(): ok"
return 0
fi
sleep 5
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE
cat << EOF > /etc/schroot/schroot.conf
[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
}

View File

@ -0,0 +1,958 @@
#!/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
}

View File

@ -0,0 +1,77 @@
#!/bin/bash
#/**
#@file Net.lib
#@brief Librería o clase Net
#@class Net
#@brief Funciones básicas de red.
#@version 1.0
#@warning License: GNU GPLv3+
#*/
#/**
# ogGetHostname
#@brief Muestra el nombre del cliente.
#@return str_host - nombre de máquina
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetHostname ()
{
local HOST NETFILE
# Tomar nombre de la variable HOSTNAME
HOST="$HOSTNAME"
# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen)
[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2}
END {print host}
' /var/lib/dhcp3/dhclient.leases)
# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */
[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="}
$1~/hostname/ {print $2}' /proc/cmdline)
[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST"
echo $HOST
}
#/**
# ogGetIpAddress
#@brief Muestra la dirección IP del sistema
#@return str_ip - Dirección IP
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetIpAddress ()
{
local IP
#Version og2ndFS
NETFILE="/tmp/net-eth0.conf"
[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=)
# Obtener direcciones IP. /* (comentario para Doxygen)
[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}')
# Mostrar sólo la primera. (comentario para Doxygen) */
echo ${IP%% *}
}
#/**
# ogGetMacAddress
#@brief Muestra la dirección Ethernet del cliente.
#@return str_ether - Dirección Ethernet
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetMacAddress ()
{
local MAC
# Obtener direcciones Ethernet.
MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}')
# Mostrar sólo la primera.
echo ${MAC%% *}
}

View File

@ -0,0 +1,27 @@
Moverse al etc del cliente.
cd /opt/opengnsys/client/etc
preinit/default
modificamos el sha-bang a /bin/bash
eliminamos enlace del bash
Ejecute solo el loadmodules del for
preinit/loaenviron
comentamos el LD_PATH
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin
dejar en bin solo el browser y el ogadmcliente
/var/lib/tftboot/pxelinux.cfg/default
DEFAULT pxe2
LABEL pxe
KERNEL linux
APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin
LABEL pxe2
KERNEL vmlinuz-2.6.32-21-generic-pae
APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788
parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN
temporalmente: init/default.sh => export boot=admin

View File

@ -0,0 +1,77 @@
#!/bin/bash
#/**
#@file Net.lib
#@brief Librería o clase Net
#@class Net
#@brief Funciones básicas de red.
#@version 1.0
#@warning License: GNU GPLv3+
#*/
#/**
# ogGetHostname
#@brief Muestra el nombre del cliente.
#@return str_host - nombre de máquina
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetHostname ()
{
local HOST NETFILE
# Tomar nombre de la variable HOSTNAME
HOST="$HOSTNAME"
# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen)
[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2}
END {print host}
' /var/lib/dhcp3/dhclient.leases)
# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */
[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="}
$1~/hostname/ {print $2}' /proc/cmdline)
[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST"
echo $HOST
}
#/**
# ogGetIpAddress
#@brief Muestra la dirección IP del sistema
#@return str_ip - Dirección IP
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetIpAddress ()
{
local IP
#Version og2ndFS
NETFILE="/tmp/net-eth0.conf"
[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=)
# Obtener direcciones IP. /* (comentario para Doxygen)
[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}')
# Mostrar sólo la primera. (comentario para Doxygen) */
echo ${IP%% *}
}
#/**
# ogGetMacAddress
#@brief Muestra la dirección Ethernet del cliente.
#@return str_ether - Dirección Ethernet
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetMacAddress ()
{
local MAC
# Obtener direcciones Ethernet.
MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}')
# Mostrar sólo la primera.
echo ${MAC%% *}
}

View File

@ -0,0 +1,23 @@
#!/opt/opengnsys/bin/bash
set -a
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys}
OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log}
#### FIXME EN PRUEBAS
OGLOGFILE=/var/log/opengnsys.log
/opt/opengnsys/etc/init/load2fs.sh
source /opt/opengnsys/etc/preinit/loadenviron.sh
export PATH=/opt/og2fs/bin:$PATH
export PATH=/opt/og2fs/sbin:$PATH
export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then
echo "$MSG_LAUNCHCLIENT"
$OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE
fi
bash
# FIXME Arranque Browser
#browser -qws $OGSTARTPAGE

View File

@ -0,0 +1,19 @@
#!/bin/bash
#/**
#@file load2fs.sh
#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys.
#@warning License: GNU GPLv3+
#@version 0.9
#@author Antonio J. Doblas Viso, Unviersidad de Malaga.
#@date 2010-02-15
#*/
mkdir -p /opt/og2fs
mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro
cp -R /opt/og2fs/etc/* /etc/ # */
mount /opt/og2fs/usr /usr
mount /opt/og2fs/lib /lib
export PATH=/opt/og2fs/sbin:$PATH
export PATH=/opt/og2fs/bin:$PATH
export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# meter aqui el reboot del Boot.lib

View File

@ -0,0 +1,34 @@
#!/bin/bash
#/**
#@file conframfs.sh
#@brief Script de inicio para configurar el 2º FileSystem linkado.
#@version 1.0
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2010-06-02
#*/
#sustituido por la funcion ogPostConfigureFS
MSG_LOADMODULES=${MSG_CONFRAMFS:-"."}
echo "$MSG_CONFRAMFS"
# configuramos el /etc/hostname.
HOSTNAME=$(ogGetHostname)
echo $HOSTNAME > /etc/hostname
#configuramos el /etc/hosts
IP=$(ogGetIpAddress)
echo "127.0.0.1 localhost" > /etc/hosts
echo "$IP $HOSTNAME" >> /etc/hosts
### conft net
echo "auto lo " > /etc/network/interfaces
echo "iface lo inet loopback" >> /etc/network/interfaces
mkdir -p /var/run/network
cd /var/run/network
touch ifstate
/etc/init.d/networking restart
ifup lo

View File

@ -0,0 +1,461 @@
# -*- shell-script -*-
catenate_cpiogz() {
# Sanity check
if [ ! -e "${1}" ]; then
echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2
return
fi
cat "${1}" >>"${__TMPCPIOGZ}"
}
force_load()
{
manual_add_modules ${@}
echo "${@}" >>"${DESTDIR}/conf/modules"
}
# Takes a file containing a list of modules to be added as an
# argument, figures out dependancies, and adds them.
#
# Input file syntax:
#
# # comment
# modprobe_module_name [args ...]
# [...]
#
add_modules_from_file()
{
# Sanity check
if [ ! -e "${1}" ]; then
echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2
return
fi
sed -e '/^#/d' ${1} | while read module rest; do
force_load "${module}" "${rest}"
done
}
# Is this module available?
have_module()
{
modprobe --set-version="${version}" --ignore-install \
--show-depends "${1}" >/dev/null 2>&1
}
# Add dependent modules + eventual firmware
manual_add_modules()
{
local mam_x firmwares firmware
for mam_x in $(modprobe --set-version="${version}" --ignore-install \
--show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do
# Prune duplicates
if [ -e "${DESTDIR}/${mam_x}" ]; then
continue
fi
mkdir -p "${DESTDIR}/$(dirname "${mam_x}")"
ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")"
if [ "${verbose}" = "y" ]; then
echo "Adding module ${mam_x}"
fi
# Add firmware files if necessary
firmwares=$(modinfo -F firmware "${mam_x}")
if [ -z "${firmwares}" ]; then
continue
fi
for firmware in $firmwares; do
if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \
|| [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then
continue
fi
# Only print warning for missing fw of loaded module
# or forced loaded module
if [ ! -e "/lib/firmware/${firmware}" ] \
&& [ ! -e "/lib/firmware/${version}/${firmware}" ]; then
if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \
/proc/modules \
|| grep -q "^$(basename "${mam_x}" .ko)" \
"${CONFDIR}/modules"; then
echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2
fi
continue
fi
if [ -e "/lib/firmware/${version}/${firmware}" ]; then
copy_exec "/lib/firmware/${version}/${firmware}"
else
copy_exec "/lib/firmware/${firmware}"
fi
if [ "${verbose}" = "y" ]; then
echo "Adding firmware ${firmware}"
fi
done
done
}
# $1 is the source path (e.g. /usr/bin/time)
# $2 is the relative destination (e.g. /usr or /usr/time)
#
# The destination is interpreted in the same way "cp" would, meaning
# (assuming /bin is a directory):
#
# "copy_exec /usr/bin/time /bin" -> /bin/time
# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime
#
# If $2 is left out, the same destination path as for the source arg will
# be used and directories will be created as needed, so:
#
# "copy_exec /usr/bin/time" -> /usr/bin/time
#
copy_exec() {
local source target destination final_destination x nonoptlib
local libname dirname
source="${1}"
if [ -n "${2}" ]; then
target="${2}"
else
if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then
mkdir -p "${DESTDIR}/$(dirname "${1}")"
fi
target="${1}"
fi
if [ -d "${DESTDIR}/${target}" ]; then
destination="${target}/$(basename "${source}")"
else
destination="${target}"
fi
final_destination="${DESTDIR}/${destination}"
if [ -L "$final_destination" ]; then
if [ $(readlink "${final_destination}") != "${source}" ]; then
echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2
return
fi
else
ln -s ${source} ${DESTDIR}/${destination}
if [ "${verbose}" = "y" ]; then
echo "Adding binary ${source}"
fi
fi
# Copy the dependant libraries
for x in $(ldd ${source} 2>/dev/null | sed -e '
/\//!d;
/linux-gate/d;
/=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/};
s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do
# Try to use non-optimised libraries where possible.
# We assume that all HWCAP libraries will be in tls,
# sse2, vfp or neon
nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#')
if [ -e "${nonoptlib}" ]; then
x="${nonoptlib}"
fi
libname=$(basename "${x}")
dirname=$(dirname "${x}")
mkdir -p "${DESTDIR}/${dirname}"
if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then
ln -s "${x}" "${DESTDIR}/${dirname}"
if [ "${verbose}" = "y" ]; then
echo "Adding library ${x}"
fi
fi
done
}
# Copy entire subtrees to the initramfs
copy_modules_dir()
{
local x_mod
if ! [ -d "${MODULESDIR}/${1}" ]; then
return;
fi
if [ "${verbose}" = "y" ]; then
echo "Copying module directory ${1}"
fi
for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do
manual_add_modules $(basename ${x_mod} .ko)
done
}
# walk /sys for relevant modules
sys_walk_mod_add()
{
local driver_path module
device_path="$1"
while [ "${device_path}" != "/sys" ]; do
driver_path="$(readlink -f ${device_path}/driver)"
if [ -e "$driver_path" ]; then
module="$(basename $(readlink -f $driver_path))"
if [ -n "${module}" ]; then
force_load "${module}"
fi
fi
device_path="$(dirname ${device_path})"
done
}
# walk /sys for relevant modalias
sys_walk_modalias()
{
local device_path modalias
device_path="$(dirname "${1}")"
device_path="$(dirname "${device_path}")"
if [ -e "${device_path}/modalias" ]; then
modalias=$(cat "${device_path}/modalias")
fi
if [ -n "${modalias}" ]; then
force_load "${modalias}"
fi
}
# find and only copy root relevant modules
dep_add_modules()
{
local block minor root FSTYPE root_dev_path x
# findout root block device + fstype
eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')"
if [ "${root}" = "/dev/root" ] ; then
root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null
fi
root="$(readlink -f ${root})"
# find out real rootfs on auto type
if [ "${FSTYPE}" = "auto" ]; then
eval "$(/usr/lib/klibc/bin/fstype ${root})"
fi
# check that fstype rootfs recognition
if [ "${FSTYPE}" = "unknown" ]; then
echo "mkinitramfs: unknown fstype on root ${root}"
echo "mkinitramfs: workaround is MODULES=most"
echo "mkinitramfs: Error please report bug on initramfs-tools"
exit 1
fi
# Add rootfs
manual_add_modules "${FSTYPE}"
# lvm luks root
if [ "${root#/dev/mapper/}" != "${root}" ]; then
minor=$((0x$(stat --format "%T" ${root}) % 256))
block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1)
if [ "${block#dm-}" != "${block}" ]; then
block=$(ls -1 /sys/block/${block}/slaves | head -n 1)
fi
block=${block%%[0-9]*}
# md root new naming scheme /dev/md/X
elif [ "${root#/dev/md/}" != "${root}" ]; then
root=${root#/dev/md/}
block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \
/proc/mdstat)
# md root /dev/mdX
elif [ "${root#/dev/md}" != "${root}" ]; then
root=${root#/dev/}
block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \
/proc/mdstat)
# mmc always uses numbering in the devicename (mmcblk[0-9])
elif [ "${root#/dev/mmc}" != "${root}" ]; then
block=${root#/dev/}
block=${block%%p[0-9]*}
# classical root device
else
block=${root#/dev/}
block=${block%%[0-9]*}
fi
# Error out if /sys lack block dev
if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then
echo "mkinitramfs: missing ${block} root ${root} /sys entry"
echo "mkinitramfs: workaround is MODULES=most"
echo "mkinitramfs: Error please report the bug"
exit 1
fi
# sys walk ATA
root_dev_path=$(readlink -f /sys/block/${block}/device)
sys_walk_mod_add ${root_dev_path}
# catch old-style IDE
if [ -e /sys/bus/ide/devices/ ]; then
sys_walk_modalias ${root_dev_path}
manual_add_modules ide-disk
manual_add_modules ide-cd
fi
if [ -e /sys/bus/scsi/devices/ ]; then
manual_add_modules sd_mod
fi
if [ -e /sys/bus/i2o/devices/ ]; then
force_load i2o_block
force_load i2o_config
fi
if [ -e /sys/bus/ps3_system_bus/ ]; then
for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do
manual_add_modules "${x}"
done
fi
if [ -e /sys/bus/vio/ ]; then
for x in sunvnet sunvdc; do
manual_add_modules "${x}"
done
fi
}
# The modules "most" classes added per default to the initramfs
auto_add_modules()
{
case "$1" in
base)
for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \
hid_apple hid_belkin hid_bright hid_cherry hid_chicony \
hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \
hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \
hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \
ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \
virtio_pci vfat nls_cp437 nls_iso8859-1; do
manual_add_modules "${x}"
done
;;
net)
for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \
cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \
ep93xx_eth eql fealnx famachi forcedeth gelic_net \
hp100 igb ipg mace mv643xx_eth myri10ge \
natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \
r8169 s2io sis900 skge sky2 slhc smc911x starfire \
sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \
de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \
typhon via-rhine via-velocity virtio_net yellowfin; do
manual_add_modules "${x}"
done
;;
ide)
copy_modules_dir kernel/drivers/ide
;;
scsi)
copy_modules_dir kernel/drivers/scsi
for x in mptfc mptsas mptscsih mptspi; do
manual_add_modules "${x}"
done
;;
ata)
copy_modules_dir kernel/drivers/ata
;;
block)
copy_modules_dir kernel/drivers/block
copy_modules_dir kernel/drivers/usb/storage
;;
# FIXME: can be removed after Lenny release
ieee1394)
for x in ohci1394 sbp2; do
manual_add_modules "${x}"
done
;;
firewire)
for x in firewire-ohci firewire-sbp2; do
manual_add_modules "${x}"
done
;;
i2o)
for x in i2o_block; do
manual_add_modules "${x}"
done
;;
dasd)
for x in dasd_eckd_mod dasd_fba_mod; do
manual_add_modules "${x}"
done
;;
*)
auto_add_modules base
auto_add_modules net
auto_add_modules ide
auto_add_modules scsi
auto_add_modules block
auto_add_modules ata
auto_add_modules i2o
auto_add_modules dasd
auto_add_modules ieee1394
auto_add_modules firewire
;;
esac
}
usage()
{
cat >&2 << EOF
Usage: ${0} [OPTION]... <-o outfile> [version]
Options:
-d confdir Specify an alternative configuration directory.
-k Keep temporary directory used to make the image.
-o outfile Write to outfile.
-r root Override ROOT setting in mkinitrd.conf.
See mkinitramfs(8) for further details.
EOF
exit 1
}
# minimal supported kernel version
check_minkver()
{
local curversion initdir DPKG_ARCH minversion cm_x tmp
curversion="${1}"
initdir="${2}"
if [ -z "${initdir}" ]; then
DPKG_ARCH=$(dpkg --print-architecture)
case ${DPKG_ARCH} in
ia64|hppa)
minversion="2.6.15"
;;
*)
minversion="2.6.12"
;;
esac
if dpkg --compare-versions "${curversion}" lt "${minversion}"; then
echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2
echo "W: not generating requested initramfs for kernel ${curversion}" >&2
exit 2
fi
return 0
fi
set_initlist
for cm_x in ${initlist}; do
# sed: keep last line starting with MINKVER=,
# remove MINKVER= and trailing space
minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}")
if [ -z "${tmp}" ]; then
continue
elif dpkg --compare-versions "${curversion}" lt "${minver}"; then
echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2
echo "W: not generating requested initramfs for kernel ${curversion}" >&2
exit 2
fi
done
}

View File

@ -0,0 +1,95 @@
#!/bin/sh
set -e
if [ "$1" = prereqs ]; then
exit 0
fi
. /usr/share/initramfs-tools/hook-functions
number=
suffix=
eval $(printf "%s" "$COMPCACHE_SIZE" | \
sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p')
if [ -z "$number" ] || [ -z "$suffix" ]; then
exit 0
fi
if have_module ramzswap; then
name=ramzswap
manual_add_modules ramzswap
elif have_module compcache; then
name=compcache
manual_add_modules compcache
else
exit 0
fi
copy_exec /sbin/swapon
mkdir -p "$DESTDIR"/etc/udev/rules.d
cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <<EOF
KERNEL=="ramzswap0", ACTION=="add", \\
RUN+="/sbin/swapon -p 100 /dev/ramzswap0 2>/dev/null"
EOF
mem_total="\$(sed -nre 's/^MemTotal:\\s*([0-9]+) kB\$/\\1/p' /proc/meminfo)"
case "$suffix" in
%) kbytes="\$(($mem_total * $number / 100))" ;;
K) kbytes=$(($number)) ;;
M) kbytes=$(($number * 1024)) ;;
G) kbytes=$(($number * 1024 * 1024)) ;;
T) kbytes=$(($number * 1024 * 1024 * 1024)) ;;
esac
cat >"$DESTDIR"/scripts/init-top/compcache <<EOF
#!/bin/sh
PREREQ=""
prereqs()
{
echo "\$PREREQ"
}
case \$1 in
prereqs)
prereqs
exit 0
;;
esac
# find total amount of available ram
TOTAL_RAM=\$( grep MemTotal /proc/meminfo |tr -d ': [A-Z][a-z]')
# Do not use compcache on the liveCD if we have more than 512M
if [ "\${BOOT}" = "casper" ]; then
if [ "\${TOTAL_RAM}" -gt 524288 ]; then
exit 0
fi
fi
for x in \$(cat /proc/cmdline); do
case \${x} in
nocompcache)
exit 0
;;
esac
done
EOF
if [ "$name" = ramzswap ]; then
cat >>"$DESTDIR"/scripts/init-top/compcache <<EOF
modprobe -q --ignore-install ramzswap disksize_kb="$kbytes"
EOF
else
cat >>"$DESTDIR"/scripts/init-top/compcache <<EOF
modprobe -q --ignore-install compcache compcache_size_kbytes="$kbytes"
EOF
fi
chmod 0755 "$DESTDIR"/scripts/init-top/compcache
# vim:set et sw=2 sts=2:

View File

@ -0,0 +1,50 @@
#! /bin/sh -e
PREREQ="kbd|console_tools"
prereqs () {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
. /etc/default/console-setup
# Copy console-setup configuration
mkdir -p "$DESTDIR/etc/default"
cp -p /etc/default/console-setup "$DESTDIR/etc/default"
# Assume setupcon --save has been run
if [ -f "$FONT" ]; then
FONT="/etc/console-setup/${FONT##*/}"
FONT="${FONT%.gz}"
else
FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf"
fi
if [ -f "$FONT" ]; then
mkdir -p "$DESTDIR${FONT%/*}"
cp -p "$FONT" "$DESTDIR$FONT"
fi
if [ -f "$ACM" ]; then
ACM="/etc/console-setup/${ACM##*/}"
ACM="${ACM%.gz}"
else
ACM="/etc/console-setup/$CHARMAP.acm"
fi
if [ -f "$ACM" ]; then
mkdir -p "$DESTDIR${ACM%/*}"
cp -p "$ACM" "$DESTDIR$ACM"
fi
if [ -f /etc/console-setup/cached.kmap.gz ]; then
mkdir -p "$DESTDIR/etc/console-setup"
cp -p /etc/console-setup/cached.kmap.gz \
"$DESTDIR/etc/console-setup/cached.kmap.gz"
fi
exit 0

View File

@ -0,0 +1,23 @@
#!/bin/sh
case $1 in
prereqs)
echo "udev"
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
mkdir -p $DESTDIR/lib/udev/rules.d/
for rules in 55-dm.rules 60-persistent-storage-dm.rules; do
if [ -e /etc/udev/rules.d/$rules ]; then
cp -p /etc/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
elif [ -e /lib/udev/rules.d/$rules ]; then
cp -p /lib/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
fi
done
copy_exec /sbin/dmsetup
manual_add_modules dm_mod

View File

@ -0,0 +1,26 @@
#!/bin/sh -e
# initramfs hook for fixing broken rtc clock
# without battery
MINKVER="2.6.24"
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# We use date, hwclock and dumpe2fs
copy_exec /bin/date /bin
copy_exec /sbin/hwclock /sbin
copy_exec /sbin/dumpe2fs /sbin

View File

@ -0,0 +1,41 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_modules_dir kernel/drivers/char/agp
copy_modules_dir kernel/drivers/gpu
manual_add_modules fbcon
manual_add_modules vesafb
manual_add_modules vga16fb
for x in ${MODULESDIR}/initrd/*; do
x=${x##*/}
x=${x%.*}
case ${x} in
'*')
break
;;
*fb)
fbcon=y
;;
esac
manual_add_modules ${x}
done

View File

@ -0,0 +1,15 @@
#! /bin/sh -e
case $1 in
prereqs)
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.fuse /sbin
manual_add_modules fuse
exit 0

View File

@ -0,0 +1,23 @@
#! /bin/sh -e
PREREQ="kernelextras"
prereqs () {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Console utilities needed for console-setup
copy_exec /bin/setfont /bin
copy_exec /bin/kbd_mode /bin
copy_exec /bin/loadkeys /bin
exit 0

View File

@ -0,0 +1,43 @@
#!/bin/sh
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
if [ ! -x /sbin/lvm ]; then
exit 0
fi
. /usr/share/initramfs-tools/hook-functions
if [ -e /etc/lvm/lvm.conf ]; then
mkdir -p ${DESTDIR}/etc/lvm
cp /etc/lvm/lvm.conf ${DESTDIR}/etc/lvm/
fi
mkdir -p $DESTDIR/lib/udev/rules.d/
for rules in 56-lvm.rules 60-persistent-storage-lvm.rules 85-lvm2.rules; do
if [ -e /etc/udev/rules.d/$rules ]; then
cp -p /etc/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
elif [ -e /lib/udev/rules.d/$rules ]; then
cp -p /lib/udev/rules.d/$rules $DESTDIR/lib/udev/rules.d/
fi
done
copy_exec /sbin/dmsetup
copy_exec /sbin/lvm
ln -s lvm ${DESTDIR}/sbin/vgchange
for x in dm_mod dm_snapshot dm_mirror; do
manual_add_modules ${x}
done

View File

@ -0,0 +1,22 @@
#! /bin/sh -e
PREREQ="fuse_utils"
prereqs () {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /bin/ntfs-3g /bin
ln -s /bin/ntfs-3g "$DESTDIR/sbin/mount.ntfs-3g"
ln -s /bin/ntfs-3g "$DESTDIR/sbin/mount.ntfs"
exit 0

View File

@ -0,0 +1,69 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ="framebuffer"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
[ -x /sbin/plymouthd ] || exit 0
. /usr/share/initramfs-tools/hook-functions
mkdir -p ${DESTDIR}/lib/plymouth
mkdir -p ${DESTDIR}/lib/plymouth/renderers
mkdir -p ${DESTDIR}/lib/plymouth/themes
copy_exec /sbin/plymouthd /sbin
copy_exec /bin/plymouth /bin
# plugin that is always required
copy_exec /lib/plymouth/details.so /lib/plymouth/
# copy the default themes
cp -a /lib/plymouth/themes/details ${DESTDIR}/lib/plymouth/themes/
TEXT_THEME=$(readlink -f /lib/plymouth/themes/text.plymouth)
if [ -e "$TEXT_THEME" ]; then
ln -s $TEXT_THEME ${DESTDIR}/lib/plymouth/themes/text.plymouth
cp -a $(dirname $TEXT_THEME) ${DESTDIR}/lib/plymouth/themes/
MODULE=$(grep "ModuleName *= *" ${TEXT_THEME} | sed 's/ModuleName *= *//')
copy_exec /lib/plymouth/$MODULE.so /lib/plymouth/
fi
THEME=$(readlink -f /lib/plymouth/themes/default.plymouth)
if [ -e "$THEME" ]; then
ln -s $THEME ${DESTDIR}/lib/plymouth/themes/default.plymouth
cp -a $(dirname $THEME) ${DESTDIR}/lib/plymouth/themes/
MODULE=$(grep "ModuleName *= *" ${THEME} | sed 's/ModuleName *= *//')
copy_exec /lib/plymouth/$MODULE.so /lib/plymouth/
# if we have a non-text theme, make sure we copy all the support libs
copy_exec /lib/plymouth/label.so /lib/plymouth/
# output renderers
copy_exec /lib/plymouth/renderers/frame-buffer.so /lib/plymouth/renderers/
copy_exec /lib/plymouth/renderers/drm.so /lib/plymouth/renderers/
copy_exec /lib/plymouth/renderers/vga16fb.so /lib/plymouth/renderers/
cp /lib/plymouth/ubuntu-logo.png ${DESTDIR}/lib/plymouth
# and copy the font support files needed in order to actually display
# any text
mkdir -p ${DESTDIR}/usr/share/fonts/truetype/ttf-dejavu
mkdir -p ${DESTDIR}/etc/fonts/conf.d
mkdir -p ${DESTDIR}/usr/lib/pango/1.6.0/module-files.d
mkdir -p ${DESTDIR}/usr/lib/pango/1.6.0/modules
cp /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf ${DESTDIR}/usr/share/fonts/truetype/ttf-dejavu/
cp /etc/fonts/fonts.conf ${DESTDIR}/etc/fonts/fonts.conf
cp -L /etc/fonts/conf.d/60-latin.conf ${DESTDIR}/etc/fonts/conf.d
cp /usr/lib/pango/1.6.0/module-files.d/libpango1.0-0.modules ${DESTDIR}/usr/lib/pango/1.6.0/module-files.d/
cp /usr/lib/pango/1.6.0/modules/pango-basic-fc.so ${DESTDIR}/usr/lib/pango/1.6.0/modules/pango-basic-fc.so
fi

View File

@ -0,0 +1,46 @@
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# Hooks for loading thermal bits into the initramfs
. /usr/share/initramfs-tools/hook-functions
case "$DPKG_ARCH" in
# copy the right modules
powerpc|ppc64)
# Add thermal control of Macintosh if the system is not a PS3
if [ ! -e /sys/bus/ps3_system_bus/ ]; then
force_load therm_pm72
force_load windfarm_core
force_load windfarm_cpufreq_clamp
force_load windfarm_lm75_sensor
force_load windfarm_max6690_sensor
force_load windfarm_pid
force_load windfarm_pm112
force_load windfarm_pm81
force_load windfarm_pm91
force_load windfarm_smu_controls
force_load windfarm_smu_sat
force_load windfarm_smu_sensors
force_load i2c-powermac
fi
;;
i386|amd64|ia64|lpia)
manual_add_modules fan
manual_add_modules thermal
;;
esac

View File

@ -0,0 +1,52 @@
#!/bin/sh -e
# initramfs hook for udev
MINKVER="2.6.24"
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# We use pkill
copy_exec /usr/bin/pkill /sbin
# Copy across the udev binaries
copy_exec /sbin/udevd /sbin
copy_exec /sbin/udevadm /sbin
# Copy udev configuration
mkdir -p ${DESTDIR}/etc/udev
cp -p /etc/udev/udev.conf ${DESTDIR}/etc/udev
# Only copy across relevant rules
mkdir -p ${DESTDIR}/lib/udev/rules.d
for rules in 50-udev-default.rules 50-firmware.rules 60-persistent-storage.rules 61-persistent-storage-edd.rules 64-device-mapper.rules 80-drivers.rules 95-udev-late.rules; do
cp -p /lib/udev/rules.d/$rules ${DESTDIR}/lib/udev/rules.d
done
# Copy across helpers the rules need
mkdir -p ${DESTDIR}/lib/udev
# 50-udev-default.rules
# 50-firmware.rules
copy_exec /lib/udev/firmware /lib/udev
# 60-persistent-storage.rules
copy_exec /lib/udev/ata_id /lib/udev
copy_exec /lib/udev/usb_id /lib/udev
copy_exec /sbin/blkid /lib/udev
copy_exec /lib/udev/scsi_id /lib/udev
copy_exec /lib/udev/path_id /lib/udev
# 61-persistent-storage-edd.rules
copy_exec /lib/udev/edd_id /lib/udev

View File

@ -0,0 +1,25 @@
#!/bin/sh -e
# initramfs hook for watershed
PREREQ="udev"
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# default statedir
mkdir -p ${DESTDIR}/var/run/watershed
copy_exec /lib/udev/watershed /lib/udev

View File

@ -0,0 +1,272 @@
#!/bin/sh
[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir -m 0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
mkdir -p /var/lock
mount -t sysfs -o nodev,noexec,nosuid none /sys
mount -t proc -o nodev,noexec,nosuid none /proc
grep -q '\<quiet\>' /proc/cmdline || echo "Loading, please wait..."
# Note that this only becomes /dev on the real filesystem if udev's scripts
# are used; which they will be, but it's worth pointing out
if ! mount -t devtmpfs -o mode=0755 none /dev; then
mount -t tmpfs -o mode=0755 none /dev
mknod -m 0600 /dev/console c 5 1
mknod /dev/null c 1 3
fi
mkdir /dev/pts
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true
> /dev/.initramfs-tools
mkdir /dev/.initramfs
# Export the dpkg architecture
export DPKG_ARCH=
. /conf/arch.conf
# Set modprobe env
export MODPROBE_OPTIONS="-qb"
# Export relevant variables
export ROOT=
export ROOTDELAY=
export ROOTFLAGS=
export ROOTFSTYPE=
export IPOPTS=
export HWADDR=
export break=
export init=/sbin/init
export quiet=n
export readonly=y
export rootmnt=/root
export debug=
export panic=
export blacklist=
export resume_offset=
# Bring in the main config
. /conf/initramfs.conf
for conf in conf/conf.d/*; do
[ -f ${conf} ] && . ${conf}
done
. /scripts/functions
# Parse command line options
for x in $(cat /proc/cmdline); do
case $x in
init=*)
init=${x#init=}
;;
root=*)
ROOT=${x#root=}
case $ROOT in
LABEL=*)
ROOT="${ROOT#LABEL=}"
# support / in LABEL= paths (escape to \x2f)
case "${ROOT}" in
*[/]*)
if [ -x "$(command -v sed)" ]; then
ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')"
else
if [ "${ROOT}" != "${ROOT#/}" ]; then
ROOT="\x2f${ROOT#/}"
fi
if [ "${ROOT}" != "${ROOT%/}" ]; then
ROOT="${ROOT%/}\x2f"
fi
IFS='/'
newroot=
for s in $ROOT; do
if [ -z "${newroot}" ]; then
newroot="${s}"
else
newroot="${newroot}\\x2f${s}"
fi
done
unset IFS
ROOT="${newroot}"
fi
esac
ROOT="/dev/disk/by-label/${ROOT}"
;;
UUID=*)
ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
;;
/dev/nfs)
[ -z "${BOOT}" ] && BOOT=nfs
;;
esac
;;
rootflags=*)
ROOTFLAGS="-o ${x#rootflags=}"
;;
rootfstype=*)
ROOTFSTYPE="${x#rootfstype=}"
;;
rootdelay=*)
ROOTDELAY="${x#rootdelay=}"
case ${ROOTDELAY} in
*[![:digit:].]*)
ROOTDELAY=
;;
esac
;;
resumedelay=*)
RESUMEDELAY="${x#resumedelay=}"
;;
loop=*)
LOOP="${x#loop=}"
;;
loopflags=*)
LOOPFLAGS="-o ${x#loopflags=}"
;;
loopfstype=*)
LOOPFSTYPE="${x#loopfstype=}"
;;
cryptopts=*)
cryptopts="${x#cryptopts=}"
;;
nfsroot=*)
NFSROOT="${x#nfsroot=}"
;;
netboot=*)
NETBOOT="${x#netboot=}"
;;
ip=*)
IPOPTS="${x#ip=}"
;;
hwaddr=*)
HWADDR="${x#hwaddr=}"
;;
boot=*)
BOOT=${x#boot=}
;;
resume=*)
RESUME="${x#resume=}"
;;
resume_offset=*)
resume_offset="${x#resume_offset=}"
;;
noresume)
noresume=y
;;
panic=*)
panic="${x#panic=}"
case ${panic} in
*[![:digit:].]*)
panic=
;;
esac
;;
quiet)
quiet=y
;;
ro)
readonly=y
;;
rw)
readonly=n
;;
debug)
debug=y
quiet=n
exec >/dev/.initramfs/initramfs.debug 2>&1
set -x
;;
debug=*)
debug=y
quiet=n
set -x
;;
break=*)
break=${x#break=}
;;
break)
break=premount
;;
blacklist=*)
blacklist=${x#blacklist=}
;;
netconsole=*)
netconsole=${x#netconsole=}
;;
esac
done
if [ -z "${noresume}" ]; then
export resume=${RESUME}
else
export noresume
fi
[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole}
maybe_break top
# export BOOT variable value for compcache,
# so we know if we run from casper
export BOOT
# Don't do log messages here to avoid confusing usplash
run_scripts /scripts/init-top
maybe_break modules
log_begin_msg "Loading essential drivers..."
load_modules
log_end_msg
maybe_break premount
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
run_scripts /scripts/init-premount
[ "$quiet" != "y" ] && log_end_msg
maybe_break mount
log_begin_msg "Mounting root file system..."
. /scripts/${BOOT}
parse_numeric ${ROOT}
mountroot
log_end_msg
maybe_break bottom
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
run_scripts /scripts/init-bottom
[ "$quiet" != "y" ] && log_end_msg
# Move virtual filesystems over to the real filesystem
mount -n -o move /sys ${rootmnt}/sys
mount -n -o move /proc ${rootmnt}/proc
# Check init bootarg
if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then
echo "Target filesystem doesn't have ${init}."
init=
fi
# Search for valid init
if [ -z "${init}" ] ; then
for init in /sbin/init /etc/init /bin/init /bin/sh; do
if [ ! -x "${rootmnt}${init}" ]; then
continue
fi
break
done
fi
# No init on rootmount
if [ ! -x "${rootmnt}${init}" ]; then
panic "No init found. Try passing init= bootarg."
fi
# Confuses /etc/init.d/rc
if [ -n ${debug} ]; then
unset debug
fi
# Chain to real filesystem
maybe_break init
exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
panic "Could not execute run-init."

View File

@ -0,0 +1,10 @@
# List of modules that you want to include in your initramfs.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod

View File

@ -0,0 +1,420 @@
# -*- shell-script -*-
_log_msg()
{
if [ "$quiet" = "y" ]; then return; fi
echo "$@"
}
log_success_msg()
{
_log_msg "Success: $@"
}
log_failure_msg()
{
_log_msg "Failure: $@"
}
log_warning_msg()
{
_log_msg "Warning: $@"
}
log_begin_msg()
{
if [ -x /sbin/usplash_write ]; then
/sbin/usplash_write "TEXT $@"
fi
_log_msg "Begin: $@ ..."
}
log_end_msg()
{
if [ -x /sbin/usplash_write ]; then
/sbin/usplash_write "SUCCESS ok"
fi
_log_msg "Done."
}
# Add failure hook
add_mountroot_fail_hook()
{
mkdir -p /tmp/mountroot-fail-hooks.d
ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1"
}
# Run failure hooks.
# When a failure hook exits "1", it has not done anything to correct the
# system. Exiting "0" means that something has been attempted to resolve
# the lack of a root filesystem.
# Hooks are run in lexigraphical order, and are responsible for removing
# themselves if they should not re-run in a later cycle. When one exits
# "0", the stack is stopped, so the caller can return to the main rootfs
# wait loop.
try_failure_hooks()
{
local hook
# Disable usplash so text from hooks can be seen
if [ -x /sbin/usplash_write ]; then
/sbin/usplash_write "QUIT"
fi
chvt 1
for hook in /tmp/mountroot-fail-hooks.d/*; do
if [ -x ${hook} ] && ${hook} mountfail; then
return 0
fi
done
return 1
}
panic()
{
if [ -x /sbin/usplash_write ]; then
/sbin/usplash_write "QUIT"
fi
chvt 1
# Disallow console access
if [ -n "${panic}" ]; then
sleep ${panic}
reboot
fi
modprobe i8042
modprobe atkbd
run_scripts /scripts/panic
echo $@
PS1='(initramfs) ' /bin/sh -i </dev/console >/dev/console 2>&1
}
maybe_break()
{
if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then
panic "Spawning shell within the initramfs"
fi
}
render()
{
eval "echo -n \${$@}"
}
set_initlist()
{
unset initlist
for si_x in ${initdir}/*; do
# skip empty dirs without warning
[ "${si_x}" = "${initdir}/*" ] && return
# only allow variable name chars
case ${si_x#${initdir}/} in
*[![:alnum:]_]*)
[ "${verbose}" = "y" ] \
&& echo "$si_x ignored: not alphanumeric or '_' file"
continue
;;
esac
# skip non executable scripts
if [ ! -x ${si_x} ]; then
[ "${verbose}" = "y" ] \
&& echo "$si_x ignored: not executable"
continue
fi
# skip directories
if [ -d ${si_x} ]; then
[ "${verbose}" = "y" ] \
&& echo "$si_x ignored: a directory"
continue
fi
initlist="${initlist} ${si_x#${initdir}/}"
done
}
reduce_satisfied()
{
deplist="$(render array_${1})"
unset tmpdeplist
for rs_y in ${deplist}; do
# check if there are alternatives
case ${rs_y} in
*\|*)
OLD_IFS="$IFS"
IFS="|"
for rs_z in ${rs_y}; do
IFS="$OLD_IFS"
# only allow variable name chars
case ${rs_z} in
*[![:alnum:]_]*)
IFS="|"
continue
;;
esac
# skip non executable scripts
if [ ! -x ${initdir}/${rs_z} ]; then
IFS="|"
continue
fi
# skip directories
if [ -d ${initdir}/${rs_z} ]; then
IFS="|"
continue
fi
tmpdeplist="${tmpdeplist} ${rs_z}"
break
done
IFS="$OLD_IFS"
;;
*)
case ${rs_y} in
*[![:alnum:]_]*)
continue
;;
esac
if [ ! -x ${initdir}/${rs_y} ]; then
continue
fi
if [ -d ${initdir}/${rs_y} ]; then
continue
fi
tmpdeplist="${tmpdeplist} ${rs_y}"
;;
esac
done
deplist=${tmpdeplist}
for rs_x in ${runlist}; do
pop_list_item ${rs_x} ${deplist}
deplist=${tmppop}
done
eval array_${1}=\"${deplist}\"
}
get_prereqs()
{
set_initlist
for gp_x in ${initlist}; do
tmp=$(${initdir}/${gp_x} prereqs)
eval array_${gp_x}=\"${tmp}\"
done
}
count_unsatisfied()
{
set -- ${@}
return ${#}
}
# Removes $1 from initlist
pop_list_item()
{
item=${1}
shift
set -- ${@}
unset tmppop
# Iterate
for pop in ${@}; do
if [ ${pop} = ${item} ]; then
continue
fi
tmppop="${tmppop} ${pop}"
done
}
# This function generates the runlist, so we clear it first.
reduce_prereqs()
{
unset runlist
set -- ${initlist}
i=$#
# Loop until there's no more in the queue to loop through
while [ ${i} -ne 0 ]; do
oldi=${i}
for rp_x in ${initlist}; do
reduce_satisfied ${rp_x}
count_unsatisfied $(render array_${rp_x})
cnt=${?}
if [ ${cnt} -eq 0 ]; then
runlist="${runlist} ${rp_x}"
pop_list_item ${rp_x} ${initlist}
initlist=${tmppop}
i=$((${i} - 1))
fi
done
if [ ${i} -eq ${oldi} ]; then
panic "PANIC: Circular dependancy. Exiting."
fi
done
}
get_prereq_pairs()
{
set_initlist
for gp_x in ${initlist}; do
echo ${gp_x} ${gp_x}
prereqs=$(${initdir}/${gp_x} prereqs)
for prereq in ${prereqs}; do
echo ${prereq} ${gp_x}
done
done
}
call_scripts()
{
for cs_x in ${runlist}; do
[ -f ${initdir}/${cs_x} ] || continue
if [ x"$1" = "xoptional" ]; then
option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}")
[ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue
fi
# mkinitramfs verbose output
if [ "${verbose}" = "y" ]; then
echo "Calling hook ${cs_x}"
fi
${initdir}/${cs_x}
# allow boot scripts to modify exported boot paramaters
if [ -e /conf/param.conf ]; then
. /conf/param.conf
fi
done
}
run_scripts()
{
initdir=${1}
[ ! -d ${initdir} ] && return
if [ -f ${initdir}/ORDER ]; then
. ${initdir}/ORDER
elif [ -x /usr/bin/tsort ]; then
runlist=$(get_prereq_pairs | tsort)
call_scripts $2
else
get_prereqs
reduce_prereqs
call_scripts $2
fi
}
cache_run_scripts()
{
DESTDIR=${1}
scriptdir=${2}
initdir=${DESTDIR}${scriptdir}
[ ! -d ${initdir} ] && return
runlist=$(get_prereq_pairs | tsort)
for crs_x in ${runlist}; do
[ -f ${initdir}/${crs_x} ] || continue
echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER
echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER
done
}
# Load custom modules first
load_modules()
{
if [ -e /conf/modules ]; then
cat /conf/modules | while read m; do
# Skip empty lines
if [ -z "$m" ]; then
continue
fi
# Skip comments - d?ash removes whitespace prefix
com=$(printf "%.1s" "${m}")
if [ "$com" = "#" ]; then
continue
fi
modprobe $m
done
fi
}
# lilo compatibility
parse_numeric() {
case $1 in
"")
return
;;
/*)
return
;;
*:*)
minor=${1#*:}
major=${1%:*}
;;
*)
value=$(( 0x${1} ))
minor=$(( ${value} % 256 ))
major=$(( ${value} / 256 ))
;;
esac
mknod -m 600 /dev/root b ${major} ${minor}
ROOT=/dev/root
}
configure_networking()
{
# networking already configured thus bail out
[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
if [ "${HWADDR}" ]; then
# select interface by MAC address
HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)"
local iface
for iface in /sys/class/net/*; do
[ -f "$iface/address" ] || continue
if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then
DEVICE="${iface#/sys/class/net/}"
fi
done
fi
# support ip options see linux sources
# Documentation/filesystems/nfsroot.txt
case ${IPOPTS} in
none|off)
# Do nothing
;;
""|on|any)
# Bring up device
ipconfig -t 60 ${DEVICE}
;;
dhcp|bootp|rarp|both)
ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE}
;;
*)
ipconfig -t 60 -d $IPOPTS
# grab device entry from ip option
NEW_DEVICE=${IPOPTS#*:*:*:*:*:*}
if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then
NEW_DEVICE=${NEW_DEVICE%:*}
else
# wrong parse, possibly only a partial string
NEW_DEVICE=
fi
if [ -n "${NEW_DEVICE}" ]; then
DEVICE="${NEW_DEVICE}"
fi
;;
esac
# source ipconfig output
if [ -n "${DEVICE}" ]; then
# source specific bootdevice
. /tmp/net-${DEVICE}.conf
else
# source any interface as not exaclty specified
. /tmp/net-*.conf
fi
}

View File

@ -0,0 +1,21 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ]
then
/bin/plymouth update-root-fs --new-root-dir=${rootmnt}
fi

View File

@ -0,0 +1,24 @@
#!/bin/sh -e
# initramfs init-bottom script for udev
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
# Stop udevd, we'll miss a few events while we run init, but we catch up
pkill udevd
# Move /dev to the real filesystem
mount -n -o move /dev ${rootmnt}/dev

View File

@ -0,0 +1,41 @@
#!/bin/sh
# init-premount script for lvm2.
PREREQS="udev mdadm"
prereqs()
{
echo $PREREQS
}
mountroot_fail()
{
if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then
cat <<EOF
There appears to be one or more degraded LVM volumes, and your root device may
depend on the LVM volumes being online. One or more of the following LVM volumes
are degraded:
EOF
/sbin/lvm vgscan
fi
# Nothing has been fixed on the system, so "fail" our recovery attempt.
exit 1
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
mountfail)
mountroot_fail
exit 0
;;
esac
. /scripts/functions
add_mountroot_fail_hook "20-lvm2"
exit 0

View File

@ -0,0 +1,18 @@
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
if grep all_generic_ide /proc/cmdline 2>/dev/null; then
modprobe ata_generic all_generic_ide=1
fi

View File

@ -0,0 +1,34 @@
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# blacklist vga16fb when vga= or video= given
for x in $(cat /proc/cmdline); do
case ${x} in
vga=*|video=*)
echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs
;;
esac
done
# sanity check
[ -z "${blacklist}" ] && exit 0
# write blacklist to modprobe.d
IFS=','
for b in ${blacklist}; do
echo "blacklist $b" >> /etc/modprobe.d/initramfs
done

View File

@ -0,0 +1,83 @@
#! /bin/sh
# A crude much-simplified clone of setupcon for use in the initramfs.
OPTION=FRAMEBUFFER
PREREQ="framebuffer"
prereqs () {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /etc/default/console-setup
[ "$ACTIVE_CONSOLES" ] || exit 0
if [ "$VERBOSE_OUTPUT" = yes ]; then
verbose=
else
verbose='>/dev/null 2>&1'
fi
for i in 1 2 3 4 5 6; do
[ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i
done
for console in $ACTIVE_CONSOLES; do
[ -w $console ] || continue
if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then
printf '\033%%G' >$console
else
printf '\033%%@' >$console
fi
if [ "$FONT" ]; then
FONT="/etc/console-setup/${FONT##*/}"
FONT="${FONT%.gz}"
else
FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf"
fi
if [ -f "$FONT" ]; then
if type consolechars >/dev/null 2>&1; then
eval consolechars -v --tty=$console -f "$FONT" $verbose
elif type setfont >/dev/null 2>&1; then
eval setfont -v -C $console "$FONT" $verbose
fi
fi
if [ "$ACM" ]; then
ACM="/etc/console-setup/${ACM##*/}"
ACM="${ACM%.gz}"
else
ACM="/etc/console-setup/$CHARMAP.acm"
fi
if [ -f "$ACM" ]; then
if type consolechars >/dev/null 2>&1; then
eval consolechars -v --tty=$console --acm "$ACM" \
$verbose
elif type setfont >/dev/null 2>&1; then
eval setfont -v -C "$console" -m "$ACM" $verbose
fi
fi
if type kbd_mode >/dev/null 2>&1; then
if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then
kbd_mode -u <$console
else
kbd_mode -a <$console
fi
fi
done
if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then
eval loadkeys /etc/console-setup/cached.kmap.gz $verbose
fi
exit 0

View File

@ -0,0 +1,104 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# The options part of the kernel "video=" argument (i.e. everyting
# after "video=<fbdriver>:") has very inconsistent rules.
#
# Generally the following applies:
# 1) options are comma-separated
# 2) options can be in either of these three forms:
# <arg>=<value>, <arg>:<value>, <boolean-arg>.
# 3) the "mode" option has the form <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m]
# and may or may not start with "mode="
#
# When the options are used with modules, they need to be space-separated
# and the following conversions are needed:
# <arg>:<value> -> <arg>=<value>
# <boolean-arg> -> <boolean-arg>=1
# <modevalue> -> mode=<modevalue>
parse_video_opts()
{
local OPTS="$1"
local IFS=","
# Must be a line like video=<fbdriver>:<opt1>,[opt2]...
if [ "${OPTS}" = "${OPTS%%:*}" ]; then
return
fi
OPTS="${OPTS#*:}"
for opt in ${OPTS}; do
# Already in the "<arg>=<value>" form
if [ "${opt}" != "${opt#*=}" ]; then
echo -n "$opt "
# In the "<arg>:<value>" form
elif [ "${opt}" != "${opt#*:}" ]; then
echo -n "${opt%:*}=${opt#*:} "
# Presumably a modevalue without the "mode=" prefix
elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then
echo -n "mode=$opt "
# Presumably a boolean
else
echo -n "${opt}=1 "
fi
done
}
FB=""
OPTS=""
for x in $(cat /proc/cmdline); do
case ${x} in
vga=*)
FB="vesafb";
OPTS="";
;;
video=*)
FB=${x#*=}
FB="${FB%%:*}"
OPTS="$(parse_video_opts "${x}")"
esac
done
# Map command line name to module name
case ${FB} in
matroxfb)
FB=matroxfb_base
;;
esac
if [ -n "${FB}" ]; then
# Some framebuffer devices need character devices :-/
udevadm settle
MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS}
# Wait for the framebuffer devices to be ready
udevadm settle
else
# If we have no graphics devices yet, wait for udev to settle
[ -d /sys/class/graphics/fbcon ] || udevadm settle
[ -d /sys/class/graphics/fb0 ] || udevadm settle
[ -d /sys/class/drm/card0 ] || udevadm settle
fi
# Force fb mode via /sys interface
for x in $(cat /proc/cmdline); do
case ${x} in
fbmode=*)
MODE=${x#*=}
echo "$MODE" > /sys/class/graphics/fb0/mode
;;
esac
done

View File

@ -0,0 +1,28 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
OPTS="-q"
# Should terminal be in UTF8 mode?
if [ -x /bin/kbd_mode ]; then
/bin/kbd_mode -u
OPTS="${OPTS} -u"
fi
# Load custom keymap
if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then
loadkeys ${OPTS} /etc/boottime.kmap.gz
fi

View File

@ -0,0 +1,20 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ="framebuffer console_setup brltty"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
printf '\033[?25l' > /dev/tty7
/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid
/bin/plymouth show-splash

View File

@ -0,0 +1,30 @@
#!/bin/sh -e
# initramfs init-top script for udev
PREREQ="all_generic_ide blacklist"
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
# It's all over netlink now
echo "" > /proc/sys/kernel/hotplug
# Start the udev daemon to process events
/sbin/udevd --daemon --resolve-names=never
# Iterate sysfs and fire off everything; if we include a rule for it then
# it'll get handled; otherwise it'll get handled later when we do this again
# in the main boot sequence.
( /sbin/udevadm trigger --subsystem-match=block; \
/sbin/udevadm trigger --subsystem-nomatch=block; ) &

View File

@ -0,0 +1,131 @@
# Local filesystem mounting -*- shell-script -*-
# Parameter: Where to mount the filesystem
mountroot ()
{
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top"
run_scripts /scripts/local-top
[ "$quiet" != "y" ] && log_end_msg
while [ -z "${FSTYPE}" ]; do
FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30})
# Run failure hooks, hoping one of them can fix up the system
# and we can restart the wait loop. If they all fail, abort
# and move on to the panic handler and shell.
if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then
break
fi
done
# We've given up, but we'll let the user fix matters if they can
while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do
# give hint about renamed root
case "${ROOT}" in
/dev/hd*)
suffix="${ROOT#/dev/hd}"
major="${suffix%[[:digit:]]}"
major="${major%[[:digit:]]}"
if [ -d "/sys/block/sd${major}" ]; then
echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}"
fi
;;
/dev/sd*)
suffix="${ROOT#/dev/sd}"
major="${suffix%[[:digit:]]}"
major="${major%[[:digit:]]}"
if [ -d "/sys/block/hd${major}" ]; then
echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}"
fi
;;
esac
echo "Gave up waiting for root device. Common problems:"
echo " - Boot args (cat /proc/cmdline)"
echo " - Check rootdelay= (did the system wait long enough?)"
echo " - Check root= (did the system wait for the right device?)"
echo " - Missing modules (cat /proc/modules; ls /dev)"
panic "ALERT! ${ROOT} does not exist. Dropping to a shell!"
done
# Get the root filesystem type if not set
if [ -z "${ROOTFSTYPE}" ]; then
[ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}")
ROOTFSTYPE="${FSTYPE}"
else
FSTYPE="${ROOTFSTYPE}"
fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount"
run_scripts /scripts/local-premount
[ "$quiet" != "y" ] && log_end_msg
if [ ${readonly} = y ] && \
[ -z "$LOOP" ]; then
roflag=-r
else
roflag=-w
fi
# FIXME This has no error checking
[ -n "${FSTYPE}" ] && modprobe ${FSTYPE}
# FIXME This has no error checking
# Mount root
mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
mountroot_status="$?"
if [ "$LOOP" ]; then
if [ "$mountroot_status" != 0 ]; then
if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
panic "
Could not mount the partition ${ROOT}.
This could also happen if the file system is not clean because of an operating
system crash, an interrupted boot process, an improper shutdown, or unplugging
of a removable device without first unmounting or ejecting it. To fix this,
simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then
gracefully shut down and reboot back into Windows. After this you should be
able to reboot again and resume the installation.
(filesystem = ${FSTYPE}, error code = $mountroot_status)
"
fi
fi
mkdir -p /host
mount -o move ${rootmnt} /host
while [ ! -e "/host/${LOOP#/}" ]; do
panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!"
done
# Get the loop filesystem type if not set
if [ -z "${LOOPFSTYPE}" ]; then
eval $(fstype < "/host/${LOOP#/}")
else
FSTYPE="${LOOPFSTYPE}"
fi
if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}")
[ -z "$FSTYPE" ] && FSTYPE="unknown"
fi
if [ ${readonly} = y ]; then
roflag=-r
else
roflag=-w
fi
# FIXME This has no error checking
modprobe loop
modprobe ${FSTYPE}
# FIXME This has no error checking
mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt}
if [ -d ${rootmnt}/host ]; then
mount -o move /host ${rootmnt}/host
fi
fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
run_scripts /scripts/local-bottom
[ "$quiet" != "y" ] && log_end_msg
}

View File

@ -0,0 +1,16 @@
#! /bin/sh
case $1 in
prereqs)
exit 0
;;
esac
if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \
[ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then
mkdir -p /dev/.initramfs/varrun
pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit
pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit
fi
exit 0

View File

@ -0,0 +1,64 @@
#!/bin/sh -e
# initramfs local-premount script for fixrtc
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
# use the fixrtc cmdline option in your bootloader to
# automatically set the hardware clock to the date of
# the last mount of your root filesystem to avoid fsck
# to get confused by the superblock being in the future
BROKEN_CLOCK=""
ROOTDEV=""
for x in $(cat /proc/cmdline); do
case ${x} in
root=*)
value=${x#*=}
# Find the device node path depending on the form of root= :
case ${value} in
UUID=*)
ROOTDEV=/dev/disk/by-uuid/${value#UUID=}
;;
LABEL=*)
ROOTDEV=/dev/disk/by-label/${value#LABEL=}
;;
*)
ROOTDEV=${value}
;;
esac
;;
fixrtc)
BROKEN_CLOCK=1
;;
esac
done
if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then
ROOTDISK=$(readlink -f "$ROOTDEV") &&
TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") &&
TIME=${TIMESTR#*:} &&
date --set="${TIME} 1 minute" >/dev/null 2>&1
fi
# This script is best-effort. If we couldn't fudge the clock as desired,
# just try to carry on boot anyway:
# It will probably fail, but we won't have made the situation any worse.
exit 0

View File

@ -0,0 +1,14 @@
#! /bin/sh
case $1 in
prereqs)
exit 0
;;
esac
if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \
[ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then
modprobe fuse
fi
exit 0

View File

@ -0,0 +1,75 @@
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
. ./scripts/functions
if [ -z "${resume}" ]; then
exit 0
fi
case $resume in
LABEL=*)
resume="${resume#LABEL=}"
# support any / in LABEL= path (escape to \x2f)
case "${resume}" in
*[/]*)
if [ -x "$(command -v sed)" ]; then
resume="$(echo ${resume} | sed 's,/,\\x2f,g')"
else
if [ "${resume}" != "${resume#/}" ]; then
resume="\x2f${resume#/}"
fi
if [ "${resume}" != "${resume%/}" ]; then
resume="${resume%/}\x2f"
fi
IFS='/'
newresume=
for s in $resume; do
if [ -z "${newresume}" ]; then
newresume="${s}"
else
newresume="${newresume}\\x2f${s}"
fi
done
unset IFS
resume="${newresume}"
fi
esac
resume="/dev/disk/by-label/${resume}"
;;
UUID=*)
resume="/dev/disk/by-uuid/${resume#UUID=}"
;;
esac
SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5})
case "${SWAPTYPE}" in
swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice)
if [ -x /bin/plymouth ] && plymouth --ping; then
plymouth message --text="Resuming from $resume"
fi
# hardcode path, uswsusp ships an resume binary too
if [ -n "${resume_offset}" ]; then
/bin/resume ${resume} ${resume_offset} >/dev/null 2>&1
else
/bin/resume ${resume} >/dev/null 2>&1
fi
;;
esac

View File

@ -0,0 +1,83 @@
# NFS filesystem mounting -*- shell-script -*-
# FIXME This needs error checking
retry_nr=0
# parse nfs bootargs and mount nfs
do_nfsmount()
{
configure_networking
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
# check if server ip is part of dhcp root-path
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
else
NFSROOT=${ROOTPATH}
fi
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
NFSOPTS="-o ${NFSROOT#*,}"
fi
NFSROOT=${NFSROOT%%,*}
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
NFSROOT=${ROOTSERVER}:${NFSROOT}
fi
fi
if [ -z "${NFSOPTS}" ]; then
NFSOPTS="-o retrans=10"
fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount"
run_scripts /scripts/nfs-premount
[ "$quiet" != "y" ] && log_end_msg
if [ ${readonly} = y ]; then
roflag="-o ro"
else
roflag="-o rw"
fi
nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
}
# NFS root mounting
mountroot()
{
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top"
run_scripts /scripts/nfs-top
[ "$quiet" != "y" ] && log_end_msg
modprobe nfs
# For DHCP
modprobe af_packet
# Default delay is around 180s
# FIXME: add usplash_write info
if [ -z "${ROOTDELAY}" ]; then
delay=180
else
delay=${ROOTDELAY}
fi
# loop until nfsmount succeds
while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do
[ ${retry_nr} -gt 0 ] && \
[ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount"
do_nfsmount
retry_nr=$(( ${retry_nr} + 1 ))
[ ! -e ${rootmnt}${init} ] && /bin/sleep 1
[ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg
done
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom"
run_scripts /scripts/nfs-bottom
[ "$quiet" != "y" ] && log_end_msg
}

View File

@ -0,0 +1,27 @@
#!/bin/sh -e
# initramfs nfs-top script for udev
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
# Each call to udevsettle can take up to three minutes
if [ -x /sbin/usplash_write ]; then
/sbin/usplash_write "TIMEOUT 360"
trap "/sbin/usplash_write 'TIMEOUT 15'" 0
fi
# We need to wait for the network card drivers to be loaded
/sbin/udevadm settle

View File

@ -0,0 +1,82 @@
#! /bin/sh
# A crude much-simplified clone of setupcon for use in the initramfs.
PREREQ="framebuffer"
prereqs () {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /etc/default/console-setup
[ "$ACTIVE_CONSOLES" ] || exit 0
if [ "$VERBOSE_OUTPUT" = yes ]; then
verbose=
else
verbose='>/dev/null 2>&1'
fi
for i in 1 2 3 4 5 6; do
[ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i
done
for console in $ACTIVE_CONSOLES; do
[ -w $console ] || continue
if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then
printf '\033%%G' >$console
else
printf '\033%%@' >$console
fi
if [ "$FONT" ]; then
FONT="/etc/console-setup/${FONT##*/}"
FONT="${FONT%.gz}"
else
FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf"
fi
if [ -f "$FONT" ]; then
if type consolechars >/dev/null 2>&1; then
eval consolechars -v --tty=$console -f "$FONT" $verbose
elif type setfont >/dev/null 2>&1; then
eval setfont -v -C $console "$FONT" $verbose
fi
fi
if [ "$ACM" ]; then
ACM="/etc/console-setup/${ACM##*/}"
ACM="${ACM%.gz}"
else
ACM="/etc/console-setup/$CHARMAP.acm"
fi
if [ -f "$ACM" ]; then
if type consolechars >/dev/null 2>&1; then
eval consolechars -v --tty=$console --acm "$ACM" \
$verbose
elif type setfont >/dev/null 2>&1; then
eval setfont -v -C "$console" -m "$ACM" $verbose
fi
fi
if type kbd_mode >/dev/null 2>&1; then
if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then
kbd_mode -u <$console
else
kbd_mode -a <$console
fi
fi
done
if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then
eval loadkeys /etc/console-setup/cached.kmap.gz $verbose
fi
exit 0

View File

@ -0,0 +1,27 @@
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
OPTS="-q"
# Should terminal be in UTF8 mode?
if [ -x /bin/kbd_mode ]; then
/bin/kbd_mode -u
OPTS="${OPTS} -u"
fi
# Load custom keymap
if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then
loadkeys ${OPTS} /etc/boottime.kmap.gz
fi

View File

@ -0,0 +1,18 @@
#!/bin/sh
OPTION=FRAMEBUFFER
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
/bin/plymouth quit

View File

@ -0,0 +1,18 @@
# mdadm boot_degraded configuration
#
# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if
# you want. You can also change the values here and changes will be preserved.
# Do note that only the values are preserved; the rest of the file is
# rewritten.
#
# BOOT_DEGRADED:
# Do you want to boot your system if a RAID providing your root filesystem
# becomes degraded?
#
# Running a system with a degraded RAID could result in permanent data loss
# if it suffers another hardware fault.
#
# However, you might answer "yes" if this system is a server, expected to
# tolerate hardware faults and boot unattended.
BOOT_DEGRADED=false

View File

@ -0,0 +1 @@
RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12

View File

@ -0,0 +1,40 @@
#!/bin/sh -e
# initramfs hook for OpenGnsys
PREREQ="og"
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
mkdir -p ${DESTDIR}/scripts/og-top
mkdir -p ${DESTDIR}/scripts/og-premount
mkdir -p ${DESTDIR}/scripts/og-bottom
mkdir -p ${DESTDIR}/mnt/
mkdir -p ${DESTDIR}/net/
mkdir -p ${DESTDIR}/usr
mkdir -p ${DESTDIR}/var/lock
mkdir -p ${DESTDIR}/var/log
mkdir -p ${DESTDIR}/opt/opengnsys;
# Insert basic binaries
copy_exec /bin/bash-static /bin/bash
# Insert OpenGnsys Engine
mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine

View File

@ -0,0 +1,72 @@
#
# initramfs.conf
# Configuration file for mkinitramfs(8). See initramfs.conf(5).
#
#
# MODULES: [ most | netboot | dep | list ]
#
# most - Add all framebuffer, acpi, filesystem, and harddrive drivers.
#
# dep - Try and guess which modules to load.
#
# netboot - Add the base modules, network modules, but skip block devices.
#
# list - Only include modules from the 'additional modules' list
#
MODULES=most
#
# BUSYBOX: [ y | n ]
#
# Use busybox if available.
#
BUSYBOX=y
#
# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ]
#
# Amount of RAM to use for RAM-based compressed swap space.
#
# An empty value - compcache isn't used, or added to the initramfs at all.
# An integer and K (e.g. 65536 K) - use a number of kilobytes.
# An integer and M (e.g. 256 M) - use a number of megabytes.
# An integer and G (e.g. 1 G) - use a number of gigabytes.
# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM.
#
# You can optionally install the compcache package to configure this setting
# via debconf and have userspace scripts to load and unload compcache.
#
COMPCACHE_SIZE=""
#
# NFS Section of the config.
#
#
# BOOT: [ local | nfs ]
#
# local - Boot off of local media (harddrive, USB stick).
#
# nfs - Boot using an NFS drive as the root of the drive.
#
BOOT=local
#
# DEVICE: ...
#
# Specify the network interface, like eth0
#
DEVICE=eth0
#
# NFSROOT: [ auto | HOST:MOUNT ]
#
NFSROOT=auto

View File

@ -0,0 +1,13 @@
# List of modules that you want to include in your initramfs.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
fbcon
vesafb
vga16b

View File

@ -0,0 +1,140 @@
# OpenGnsys Local filesystem mounting -*- shell-script -*-
ogLinkBusybox ()
{
for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do
ln -f /bin/busybox /bin/$n
done
ln -f /bin/busybox /bin/sh
}
ogConfigureRamfs ()
{
mkdir -p /tmp/og2ndFStmp/
touch /tmp/og2ndFStmp/modules.dep.temp
touch /tmp/og2ndFStmp/modules.dep
}
ogExportKernelParameters ()
{
GLOBAL="cat /proc/cmdline"
for i in `${GLOBAL}`
do
echo $i | grep "=" > /dev/null && export $i
done
}
ogCheckPointBreak ()
{
# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd
if [ "$firstshell" = "0" ]
then
echo "entrando en sh antes de configurar la red"
sh
fi
if [ "$firstshell" = "1" ]
then
echo "entrando en sh despues de configurar la red"
sh
fi
# firstrunt=sh Arranque en modo depuracion para el cliente intrd
if [ "$firstrun" = "9" ]
then
sh
fi
}
ogLoadNetModule ()
{
#cargando netmodule
if [ -n "$netmodule" ]
then
echo "Cargando modulo de red $netmodule"
insmod `find /lib/modules/ -name ${netmodule}*`
fi
}
ogGetROOTSERVER ()
{
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
# check if server ip is part of dhcp root-path
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
else
NFSROOT=${ROOTPATH}
fi
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
NFSOPTS="-o ${NFSROOT#*,}"
fi
NFSROOT=${NFSROOT%%,*}
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
NFSROOT=${ROOTSERVER}:${NFSROOT}
fi
fi
export ROOTSERVER
}
ogConectROOTSERVER ()
{
echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS
## Montamos el resto de cosas necesarias
#printf "$MSG_MOUNTREPO\n" $BOOTMODE;
mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys;
mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log;
#mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images;
#mount -t tmpfs none /opt/opengnsys/images -o size=5m
}
# Parameter: Where to mount the filesystem
mountroot ()
{
[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
run_scripts /scripts/og-top
[ "$quiet" != "y" ] && log_end_msg
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
ogConfigureRamfs
ogExportKernelParameters
ogCheckPointBreak
ogLoadNetModule
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
run_scripts /scripts/og-premount
[ "$quiet" != "y" ] && log_end_msg
configure_networking
ogGetROOTSERVER
ogCheckPointBreak
ogConectROOTSERVER
# ogConectROOTMEDIA
ogCheckPointBreak
set -a
trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15
/opt/opengnsys/etc/preinit/default.sh
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom"
run_scripts /scripts/og-bottom
[ "$quiet" != "y" ] && log_end_msg
}

View File

@ -0,0 +1,20 @@
#
# Configuration file for update-initramfs(8)
#
#
# update_initramfs [ yes | all | no ]
#
# Default is yes
# If set to all update-initramfs will update all initramfs
# If set to no disables any update to initramfs beside kernel upgrade
update_initramfs=yes
#
# backup_initramfs [ yes | no ]
#
# Default is no
# If set to no leaves no .bak backup files.
backup_initramfs=no

View File

@ -0,0 +1,255 @@
#!/bin/bash
#Definicion de variables
# TODO: Pendiente Definir directorio base del 2FS
OGBASEDIR=/var/lib/tftpboot/ogclient/
OGFSFILE=${OGBASEDIR}ogclient.img
OGFSMOUNT=${OGBASEDIR}ogclientmount
OGLIB=/opt/opengnsys/client/lib
FSCLIENTSIZEMB=1000
PASSROOT=og
SCRIPT=/root/configure.sh
RUNME=$OGFSMOUNT$SCRIPT
LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb
OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c"
OGFSLABEL=ogClient
#/**
# ogClientMount [str_program]
#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
#@return Si no hay parametros: login de acceso.
#@return con un parametro: La salida del programa ejecutado
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientMount ()
{
#TODO comprobar que OGFILE y OGFILEMOUNT existe.
mount $OGFSFILE $OGFSMOUNT -o loop
mount --bind /proc $OGFSMOUNT/proc
mount --bind /sys $OGFSMOUNT/sys
mount --bind /tmp $OGFSMOUNT/tmp
mount --bind /dev $OGFSMOUNT/dev
mount --bind /dev/pts $OGFSMOUNT/dev/pts
[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`)
[ $# = 1 ] && chroot $OGFSMOUNT $1
}
#/**
# ogClientUnmount
#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
#@param
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientUnmount ()
{
cd /tmp
umount -d -f -l $OGFSMOUNT/proc
umount -d -f -l $OGFSMOUNT/sys
umount -d -f -l $OGFSMOUNT/tmp
umount -d -f -l $OGFSMOUNT/dev
umount -d -f -l $OGFSMOUNT/dev/pts
umount -d -f -l $OGFSMOUNT
}
function ogClientCheckVersion ()
{
#TODO: configurar la version lucid
#TODO: introducir un nuevo case para la vesion
case $1 in
jaunty|JAUNTY)
export OGVERSION=jaunty
exort OGRELEASE=2.6.28-11-generic
;;
karmic|KARMIC)
export OGVERSION=karmic
export OGRELEASE=2.6.31-14-generic
;;
lucid|LUCID)
export OGVERSION=lucid
export OGRELEASE=2.6.32-21-generic-pae
;;
esac
echo $OGVERSION $OGRELEASE
}
#/**
# ogClientGenerator str_versionUbuntu str_release
#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Versión de ubuntu a generar, jaunty karmic
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogClientGeneratorDebootstrap ()
{
if [ $# != 2 ]
then
echo Debes introducir como argumento1: jaunty karmic lucid
echo Debes introducir como argumento2: la release
echo utiliza como entrada ogClientCheckVersion
return
fi
OGVERSION=`echo $1`
OGRELEASE=`echo $2`
echo $OGVERSION $OGRELEASE
pause
# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema
apt-get install gdebi-core
wget $LASTDEBOOTSTRAP
gdebi -n debootstrap_1.0.20_all.deb
#Creamos el directorio donde montaremos el disco virtual
mkdir -p $OGFSMOUNT
#Creamos el disco virtual con el filesystem del cliente.
dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB
mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F
#Montamos el dispositivo virtual en su punto de montaje.
mount $OGFSFILE $OGFSMOUNT -o loop
#TODO Comprobar arquitectura
#Iniciamos la creación del sistema en el directorio de clientes.
echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/
debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/
}
###### Funciones para los clientes offline
function agregarOG {
cd $NEWROOT
mkdir -p opt/opengnsys
cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys
echo "agregando OG al newinitrd"
}
function finalizarISO
{
cd $ANTERIORPWD
mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz
if [ $LINUX ] ; then
mv $TMPINITRD/linux $DEST/linuxISO
fi
}
function CrearISO {
mkdir -p tmp/iso/isolinux
#cd tmp/iso/
cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/
cp -prv /usr/share/gpxe/* tmp/iso/isolinux/
cp -prv /tmp/linux tmp/iso/isolinux/linuxISO
cp -prv /tmp/initrd.gz tmp/iso/isolinux/
cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/
cat << FIN > tmp/iso/isolinux/isolinux.cfg
DEFAULT menu.c32
PROMPT 0
ALLOWOPTIONS 1
MENU TITLE FuTuR3 Live Collection
LABEL gpxe
MENU LABEL gpxe
KERNEL /clonezilla/live/vmlinuz1
APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
#default 0
#prompt 1
#timeout 100
#display mensaje.txt
LABEL 0
MENU LABEL ogClient
KERNEL linuxISO
APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline
LABEL 1
MENU LABEL ogClient1 sin vga
KERNEL linuxISO
APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline
LABEL 2
MENU LABEL ogClient2 sin irqpoll
KERNEL linuxISO
APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline
LABEL 3
MENU LABEL ogClient3 acpi=off
KERNEL linuxISO
APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline
#LABEL ogclient
#KERNEL /ogclient/linuxISO
#APPEND initrd=/ogclient/initrdISO.img
#KERNEL linuxISO
#APPEND initrd=initrdISO.img
LABEL 4
MENU LABEL local
localboot 0x80
append -
label 5
MENU LABEL Network boot via gPXE lkrn
KERNEL gpxe.lkrn
label 5
MENU LABEL Network boot via gPXE usb
KERNEL gpxe.usb
label 5
MENU LABEL Network boot via gPXE pxe
KERNEL gpxe.pxe
label 5
MENU LABEL Network boot via gPXE iso
KERNEL gpxe.iso
FIN
#### /tmp/iso#
mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso
}
function probarISO {
#/tmp/iso
qemu -m 256 -boot d -cdrom ogClient.iso
}

View File

@ -0,0 +1,306 @@
#!/bin/bash
#@file ogClientGenerator.sh
#@brief Script generación del cliente OpenGnSys
#@warning
#@version 0.9 -
#@author Antonio J. Doblas Viso.
#@date 2010/05/24
#*/
if [ $# -ne 1 ]; then
echo ": invalid number of parameters"
echo " host | lucid | karmic | jaunty | lenny | squeeze "
exit 1
fi
# Soo ejecutable por usuario root
if [ "$(whoami)" != 'root' ]
then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
PROGRAMDIR=$(readlink -e $(dirname "$0"))
if [ -d "$PROGRAMDIR/../installer" ]; then
USESVN=0
else
USESVN=1
SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient
#directorio donde se almacenará el codigo temporalmente.
SVN_DIR="./opengnsys/installer/ogClient"
fi
WORKDIR=/tmp/opengnsys_installer
mkdir -p $WORKDIR
INSTALL_TARGET=/opt/opengnsys
LOG_FILE=/tmp/opengnsys_installation.log
###############################################
pushd $WORKDIR
source `dirname $0`/ogInstaller.lib
if [ "$1" == "host" ]
then
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
OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
OGRELEASE=$(uname -a | awk '{print $3}')
else
OSCODENAME=`echo $1`
OGRELEASE=`ogClientGetRelease $OSCODENAME`
fi
OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/
OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img
OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount
OGLIB=/opt/opengnsys/client/lib
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
# Datos para la generación del cliente.
DEPENDENCIES=( debootstrap subversion schroot)
## Actualizar repositorios
apt-get update
# Instalación de dependencias (paquetes de sistema operativo).
declare -a notinstalled
checkDependencies DEPENDENCIES notinstalled
if [ $? -ne 0 ]; then
installDependencies notinstalled
if [ $? -ne 0 ]; then
echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
exit 1
fi
fi
# Si es necesario, descarga el repositorio especifico de la instalación del cliente
if [ $USESVN -eq 1 ]; then
#svnExportCode $SVN_URL
echo svn export "$SVN_URL" $SVN_DIR
#svn export "$SVN_URL" $SVN_DIR
#####debug boorrar el cp
#mkdir -p $SVN_DIR
#cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR
find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null
###TODO si ya esta descargado da error ???
###if [ $? -ne 0 ]; then
### errorAndLog "Error while getting code from svn"
### exit 1
###fi
else
ln -fs "$(dirname $PROGRAMDIR)" opengnsys
fi
#### Parseo de ficheros descargados del svn.
# parseamos del apt.source
if [ "$1" == host ]
then
cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list
else
sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list
#rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic
fi
if [ $? -ne 0 ]; then
errorAndLog "parseando el fichero apt.source: ERROR"
else
echoAndLog "parseando el fichero apt.source: OK"
fi
#parseamos el scripts de generación del initrd.
sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh
#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh
if [ $? -ne 0 ]; then
errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR"
else
echoAndLog "parseando el fichero de cliente GenerateInitrd: OK"
fi
#damos permiso al directorio de scripts
chmod 775 ${SVN_DIR}/clientstructure/root/*
if [ $? -ne 0 ]; then
errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR"
else
echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK"
fi
#####PASO 1. Generamos el 2º sistema de archivos.
echo "generamos el sistema base con debootstrap"
if [ "$1" == host ]
then
echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE
# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE
else
echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE
ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE
fi
if [ $? -ne 0 ]; then
errorAndLog "Generando 2nd FileSystem: ERROR"
else
echoAndLog "Generando 2nd FileSystem: OK"
fi
##########################################
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
####PASO 2 Insertamos datos en el 2º sistema de archivos
#2.1 montamos para insertar los ficheros necesarios.
mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
if [ $? -ne 0 ]; then
errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR"
exit 1
else
echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK"
fi
#2.2 copiamos la estrucutra descargada al fichero imagen.
echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT "
cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT
if [ $? -ne 0 ]; then
errorAndLog "Copiando los elementos del cliente svn: ERROR"
exit 1
else
echoAndLog "Copiando los elementos del cliente svn: OK"
fi
#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib
# copiamos algunas cosas del nfsexport
echo "Linking fonts for browser1 $OGLIB"
mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
echo "Linking fonts for browser2 $OGLIB"
mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/
cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts
echo "Coping pci.ids"
cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc
#copiamos el browser y el ogADMcline al bin
cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin
cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin
if [ $? -ne 0 ]; then
errorAndLog "Copiando qt pci.ids fonts: ERROR"
exit 1
else
echoAndLog "Copiando qt pci.ids fonts: OK"
fi
## final desmontamos.
mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
if [ $? -ne 0 ]; then
errorAndLog "Desmontando cliente : ERROR"
exit 1
else
echoAndLog "desmontando cliente: OK"
fi
################## Fin paso 2
popd
######## instalamos software adicional.
#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE`
cd /
schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE`
if [ $? -ne 0 ]; then
errorAndLog "Instalando sofware adicional OG : ERROR"
#exit 1
else
echoAndLog "Instalando sofware adicional OG: OK"
fi
cd -
#cd /
#schroot -c IMGogclient -- /root/CompileSoftware.sh
#cd -
### configuracion hostname passroot securety
cd /
schroot -c IMGogclient -- /root/ConfFS.sh
cd -
##2.4 claves ssh
sshkeys()
{
##montamos
mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
##comprobamos clave rsa en el host,.
if [ ! -f /root/.ssh/id_rsa.pub ]
then
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
fi
## copiamos ssh rsa del host al guest como authorized-key2
rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT
}
### Generamos el 1er sistema de archivos.
cd /
schroot -c IMGogclient -- /root/GenerateInitrd.sh
cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR
cd -
################## DEJAMOS FICHERO DE EJEMPLOS PARA:
#default
cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient
LABEL pxe-${OGRELEASE}
KERNEL ogclient/vmlinuz-$OGRELEASE
APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=
FIN
#/etc/hosts
echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient
/etc/init.d/nfs-kernel-server restart
#####################################################################
# Mostrar sumario de la instalación e instrucciones de post-instalación.
installationSummary
#rm -rf $WORKDIR
echoAndLog "OpenGnSys installation finished at $(date)"

View File

@ -0,0 +1,77 @@
#!/bin/bash
#/**
#@file Net.lib
#@brief Librería o clase Net
#@class Net
#@brief Funciones básicas de red.
#@version 1.0
#@warning License: GNU GPLv3+
#*/
#/**
# ogGetHostname
#@brief Muestra el nombre del cliente.
#@return str_host - nombre de máquina
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetHostname ()
{
local HOST NETFILE
# Tomar nombre de la variable HOSTNAME
HOST="$HOSTNAME"
# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen)
[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2}
END {print host}
' /var/lib/dhcp3/dhclient.leases)
# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */
[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="}
$1~/hostname/ {print $2}' /proc/cmdline)
[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST"
echo $HOST
}
#/**
# ogGetIpAddress
#@brief Muestra la dirección IP del sistema
#@return str_ip - Dirección IP
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetIpAddress ()
{
local IP
#Version og2ndFS
NETFILE="/tmp/net-eth0.conf"
[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=)
# Obtener direcciones IP. /* (comentario para Doxygen)
[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}')
# Mostrar sólo la primera. (comentario para Doxygen) */
echo ${IP%% *}
}
#/**
# ogGetMacAddress
#@brief Muestra la dirección Ethernet del cliente.
#@return str_ether - Dirección Ethernet
#@version 1.0 - Integración en OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
#*/ ##
function ogGetMacAddress ()
{
local MAC
# Obtener direcciones Ethernet.
MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}')
# Mostrar sólo la primera.
echo ${MAC%% *}
}

View File

@ -0,0 +1,20 @@
preinit/default
eliminamos enlace del bash
Ejecute solo el loadmodules del for
preinit/loaenviron
comentamos el LD_PATH
/var/lib/tftboot/pxelinux.cfg/default
DEFAULT pxe2
LABEL pxe
KERNEL linux
APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin
LABEL pxe2
KERNEL vmlinuz-2.6.32-21-generic-pae
APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788
parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN
temporalmente: init/default.sh => export boot=admin

View File

@ -0,0 +1,23 @@
#!/opt/opengnsys/bin/bash
set -a
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys}
OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log}
#### FIXME EN PRUEBAS
OGLOGFILE=/var/log/opengnsys.log
/opt/opengnsys/etc/init/load2fs.sh
source /opt/opengnsys/etc/preinit/loadenviron.sh
export PATH=/opt/og2fs/bin:$PATH
export PATH=/opt/og2fs/sbin:$PATH
export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then
echo "$MSG_LAUNCHCLIENT"
$OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE
fi
bash
# FIXME Arranque Browser
#browser -qws $OGSTARTPAGE

View File

@ -0,0 +1,19 @@
#!/bin/bash
#/**
#@file load2fs.sh
#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys.
#@warning License: GNU GPLv3+
#@version 0.9
#@author Antonio J. Doblas Viso, Unviersidad de Malaga.
#@date 2010-02-15
#*/
mkdir -p /opt/og2fs
mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro
cp -R /opt/og2fs/etc/* /etc/ # */
mount /opt/og2fs/usr /usr
mount /opt/og2fs/lib /lib
export PATH=/opt/og2fs/sbin:$PATH
export PATH=/opt/og2fs/bin:$PATH
export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# meter aqui el reboot del Boot.lib

View File

@ -0,0 +1,395 @@
#!/bin/bash
#Definicion de variables
# TODO: Pendiente Definir directorio base del 2FS
OGBASEDIR=/opt/opengnsys/client/
OGFSFILE=${OGBASEDIR}og2ndFS
OGFSMOUNT=${OGBASEDIR}ogfsmount
OGLIB=/opt/opengnsys/client/lib
#/**
# ogFSHMount [str_program]
#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
#@return Si no hay parametros: login de acceso.
#@return con un parametro: La salida del programa ejecutado
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogFSHMount ()
{
mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop
mount --bind /proc $OGFSMOUNT/proc
mount --bind /sys $OGFSMOUNT/sys
mount --bind /tmp $OGFSMOUNT/tmp
mount --bind /dev $OGFSMOUNT/dev
mount --bind /dev/pts $OGFSMOUNT/dev/pts
[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`)
[ $# = 1 ] && chroot $OGFSMOUNT $1
}
#/**
# ogFSHUnmount
#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
#@param
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogFSHUnmount ()
{
cd /tmp
umount -d -f -l $OGFSMOUNT/proc
umount -d -f -l $OGFSMOUNT/sys
umount -d -f -l $OGFSMOUNT/tmp
umount -d -f -l $OGFSMOUNT/dev
umount -d -f -l $OGFSMOUNT/dev/pts
umount -d -f -l $OGFSMOUNT
}
#/**
# ogFSHCreate str_versionUbuntu
#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys
#@param 1 Versión de ubuntu a generar, jaunty karmic
#@return
#@exception
#@note
#@todo
#@version 0.9 - Primera versión para OpenGnSys
#@author Antonio J. Doblas Viso, Universidad de Málaga
#@date 2010/02/15
#*/ ##
function ogFSHCreate ()
{
#Definicion de variables.
local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL
FSCLIENTSIZEMB=1000
PASSROOT=og
SCRIPT=/root/configure.sh
RUNME=$OGFSMOUNT$SCRIPT
LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb
OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c"
OGFSLABEL=og2FS
#TODO comprobar la compatibilidad del SO host
if [ $# != 1 ]
then
echo Debes introducir como argumento: jaunty karmic lucid
return
fi
#TODO: configurar la version lucid
#TODO: introducir un nuevo case para la vesion
case $1 in
jaunty|JAUNTY)
VERSION=jaunty
RELEASE=2.6.28-11-generic
;;
karmic|KARMIC)
VERSION=karmic
RELEASE=2.6.31-14-generic
;;
lucid|LUCID)
VERSION=lucid
#RELEASE=2.6.32-19-generic
RELEASE=2.6.32-21-generic-pae
;;
esac
# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema
apt-get install gdebi-core
wget $LASTDEBOOTSTRAP
gdebi -n debootstrap_1.0.20_all.deb
#Creamos el disco virtual con el filesystem del cliente.
dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB
mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F
#Creamos el directorio donde montaremos el disco virtual
mkdir -p $OGFSMOUNT
#Montamos el dispositivo virtual en su punto de montaje.
mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop
#TODO Comprobar arquitectura
#Iniciamos la creación del sistema en el directorio de clientes.
echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/
debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/
# preparamos el etc.sources.
cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse
deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse
## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse
# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu $VERSION partner
# deb-src http://archive.canonical.com/ubuntu $VERSION partner
deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted
deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted
deb http://security.ubuntu.com/ubuntu $VERSION-security universe
deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe
deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse
deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse
deb http://archive.ubuntu.com/ubuntu $VERSION main
deb http://free.nchc.org.tw/drbl-core drbl stable
deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse
deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main
deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main
deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main
FIN
#TODO: fichero etc/hosts
#TODO: fichero etc/resolv.conf
echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname
#TODO: introducir mas consoluas para el acceso como root.
echo "pts/0" >> ${OGFSMOUNT}/etc/securetty
echo "pts/1" >> ${OGFSMOUNT}/etc/securetty
echo "pts/2" >> ${OGFSMOUNT}/etc/securetty
echo "pts/3" >> ${OGFSMOUNT}/etc/securetty
# copiamos algunas cosas del nfsexport
echo "Linking fonts for browser1 $OGLIB"
mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
echo "Linking fonts for browser2 $OGLIB"
mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/
cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts
echo "Coping pci.ids"
cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc
# Guión de ejecución y personalización final.
cat << FIN > $RUNME
#!/bin/bash
################################################################
##################### SOFTWARE #####################
################################################################
export LANGUAGE=C
export LC_ALL=C
export LANG=C
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
apt-get -y update
# software system
apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop
#
# software to compile code
apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk
wget $OGMUSTCOMPILE
source /root/ToolsGNU.c
#
# sofware networking
apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2
ctorrent install
udpcast install
#
# software services
apt-get -y --force-yes install openssh-server bittornado trickle
#
# software disk and filesystem
apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted
apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools
ntfs-3g install
#
# software cloning
apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools
wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh
gdebi -n partclone_0.2.8_i386.deb
mbuffer install
#
## software postconf
apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk
ms-sys install
#
# software compressor
apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop
apt-get -y --force-yes remove busybox
apt-get -y --force-yes install busybox-static bash-static
#
####################################################################
###################### Preparando el entorno ######################
###################################################################
mkdir -p /var/lock
dpkg-reconfigure passwd
echo "root:$PASSROOT" | chpasswd
mv /etc/fstab /etc/fstab.original 2>/dev/null
mv /etc/mtab /etc/mtab.original 2>/dev/null
FIN
chmod +x $RUNME
#chroot hacia el punto de montaje.
ogFSHMount $SCRIPT
### Desmontamos y salimos.
ogFSHUnmount 2>/dev/null
ogFSHUnmount 2>/dev/null
ogFSHUnmount 2>/dev/null
}
###### Funciones para los clientes offline
function agregarOG {
cd $NEWROOT
mkdir -p opt/opengnsys
cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys
echo "agregando OG al newinitrd"
}
function finalizarISO
{
cd $ANTERIORPWD
mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz
if [ $LINUX ] ; then
mv $TMPINITRD/linux $DEST/linuxISO
fi
}
function CrearISO {
mkdir -p tmp/iso/isolinux
#cd tmp/iso/
cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/
cp -prv /usr/share/gpxe/* tmp/iso/isolinux/
cp -prv /tmp/linux tmp/iso/isolinux/linuxISO
cp -prv /tmp/initrd.gz tmp/iso/isolinux/
cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/
cat << FIN > tmp/iso/isolinux/isolinux.cfg
DEFAULT menu.c32
PROMPT 0
ALLOWOPTIONS 1
MENU TITLE FuTuR3 Live Collection
LABEL gpxe
MENU LABEL gpxe
KERNEL /clonezilla/live/vmlinuz1
APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
#default 0
#prompt 1
#timeout 100
#display mensaje.txt
LABEL 0
MENU LABEL ogClient
KERNEL linuxISO
APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline
LABEL 1
MENU LABEL ogClient1 sin vga
KERNEL linuxISO
APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline
LABEL 2
MENU LABEL ogClient2 sin irqpoll
KERNEL linuxISO
APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline
LABEL 3
MENU LABEL ogClient3 acpi=off
KERNEL linuxISO
APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline
#LABEL ogclient
#KERNEL /ogclient/linuxISO
#APPEND initrd=/ogclient/initrdISO.img
#KERNEL linuxISO
#APPEND initrd=initrdISO.img
LABEL 4
MENU LABEL local
localboot 0x80
append -
label 5
MENU LABEL Network boot via gPXE lkrn
KERNEL gpxe.lkrn
label 5
MENU LABEL Network boot via gPXE usb
KERNEL gpxe.usb
label 5
MENU LABEL Network boot via gPXE pxe
KERNEL gpxe.pxe
label 5
MENU LABEL Network boot via gPXE iso
KERNEL gpxe.iso
FIN
#### /tmp/iso#
mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso
}
function probarISO {
#/tmp/iso
qemu -m 256 -boot d -cdrom ogClient.iso
}

View File

@ -0,0 +1,137 @@
#/bin/sh
ogConfigureRamfs ()
{
mkdir -p /tmp/og2ndFStmp/
touch /tmp/og2ndFStmp/modules.dep.temp
touch /tmp/og2ndFStmp/modules.dep
}
ogExportKernelParameters ()
{
GLOBAL="cat /proc/cmdline"
for i in `${GLOBAL}`
do
echo $i | grep "=" > /dev/null && export $i
done
}
ogCheckPointBreak ()
{
# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd
if [ "$firstshell" = "0" ]
then
echo "entrando en sh antes de configurar la red"
sh
fi
if [ "$firstshell" = "1" ]
then
echo "entrando en sh despues de configurar la red"
sh
fi
# firstrunt=sh Arranque en modo depuracion para el cliente intrd
if [ "$firstrun" = "9" ]
then
sh
fi
}
ogLoadNetModule ()
{
#cargando netmodule
if [ -n "$netmodule" ]
then
echo "Cargando modulo de red $netmodule"
insmod `find /lib/modules/ -name ${netmodule}*`
fi
}
ogGetROOTSERVER ()
{
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
# check if server ip is part of dhcp root-path
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
else
NFSROOT=${ROOTPATH}
fi
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
NFSOPTS="-o ${NFSROOT#*,}"
fi
NFSROOT=${NFSROOT%%,*}
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
NFSROOT=${ROOTSERVER}:${NFSROOT}
fi
fi
export ROOTSERVER
}
ogConectROOTSERVER ()
{
echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS
## Montamos el resto de cosas necesarias
#printf "$MSG_MOUNTREPO\n" $BOOTMODE;
#mount -t nfs -onolock,ro
nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys;
#mount -t nfs -o nolock
nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log;
#mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images;
#mount -t tmpfs none /opt/opengnsys/images -o size=5m
}
# Parameter: Where to mount the filesystem
mountroot ()
{
[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
run_scripts /scripts/og-top
[ "$quiet" != "y" ] && log_end_msg
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
ogConfigureRamfs
ogExportKernelParameters
ogCheckPointBreak
ogLoadNetModule
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
run_scripts /scripts/og-premount
[ "$quiet" != "y" ] && log_end_msg
. /scripts/functions
configure_networking
ogGetROOTSERVER
ogCheckPointBreak
ogConectROOTSERVER
# ogConectROOTMEDIA
ogCheckPointBreak
mkdir -p /opt/og2fs
mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro
cp -R /opt/og2fs/etc/* /etc/ # */
mount /opt/og2fs/usr /usr
mount /opt/og2fs/lib /lib
mount /opt/og2fs/bin /bin
mount /opt/og2fs/sbin /sbin
unset PATH
export PATH=/opt/og2fs/sbin
export PATH=/opt/og2fs/bin:$PATH
export PATH=/opt/og2fs/sbin:$PATH
export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
}
mountroot

View File

@ -0,0 +1 @@
RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d

View File

@ -0,0 +1,43 @@
#!/bin/sh -e
# initramfs hook for OpenGnsys
PREREQ="og"
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
mkdir -p ${DESTDIR}/scripts/og-top
mkdir -p ${DESTDIR}/scripts/og-premount
mkdir -p ${DESTDIR}/scripts/og-bottom
mkdir -p ${DESTDIR}/mnt/
mkdir -p ${DESTDIR}/net/
mkdir -p ${DESTDIR}/usr
mkdir -p ${DESTDIR}/var/lock
mkdir -p ${DESTDIR}/var/log
mkdir -p ${DESTDIR}/opt/opengnsys;
# Insert basic binaries
copy_exec /bin/bash-static /bin/bash
copy_exec /usr/bin/unionfs-fuse
# Insert OpenGnsys Engine
#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine

View File

@ -0,0 +1,72 @@
#
# initramfs.conf
# Configuration file for mkinitramfs(8). See initramfs.conf(5).
#
#
# MODULES: [ most | netboot | dep | list ]
#
# most - Add all framebuffer, acpi, filesystem, and harddrive drivers.
#
# dep - Try and guess which modules to load.
#
# netboot - Add the base modules, network modules, but skip block devices.
#
# list - Only include modules from the 'additional modules' list
#
MODULES=most
#
# BUSYBOX: [ y | n ]
#
# Use busybox if available.
#
BUSYBOX=y
#
# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ]
#
# Amount of RAM to use for RAM-based compressed swap space.
#
# An empty value - compcache isn't used, or added to the initramfs at all.
# An integer and K (e.g. 65536 K) - use a number of kilobytes.
# An integer and M (e.g. 256 M) - use a number of megabytes.
# An integer and G (e.g. 1 G) - use a number of gigabytes.
# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM.
#
# You can optionally install the compcache package to configure this setting
# via debconf and have userspace scripts to load and unload compcache.
#
COMPCACHE_SIZE=""
#
# NFS Section of the config.
#
#
# BOOT: [ local | nfs ]
#
# local - Boot off of local media (harddrive, USB stick).
#
# nfs - Boot using an NFS drive as the root of the drive.
#
BOOT=local
#
# DEVICE: ...
#
# Specify the network interface, like eth0
#
DEVICE=eth0
#
# NFSROOT: [ auto | HOST:MOUNT ]
#
NFSROOT=auto

View File

@ -0,0 +1,14 @@
# List of modules that you want to include in your initramfs.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
vga16b
vesafb
fbcon

View File

@ -0,0 +1,194 @@
# OpenGnsys Local filesystem mounting -*- shell-script -*-
ogLinkBusybox ()
{
for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do
ln -f /bin/busybox /bin/$n
done
ln -f /bin/busybox /bin/sh
}
ogConfigureRamfs ()
{
mkdir -p /tmp/og2ndFStmp/
touch /tmp/og2ndFStmp/modules.dep.temp
touch /tmp/og2ndFStmp/modules.dep
}
ogExportKernelParameters ()
{
GLOBAL="cat /proc/cmdline"
for i in `${GLOBAL}`
do
echo $i | grep "=" > /dev/null && export $i
done
}
ogCheckPointBreak ()
{
# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd
if [ "$firstshell" = "0" ]
then
echo "entrando en sh antes de configurar la red"
sh
fi
if [ "$firstshell" = "1" ]
then
echo "entrando en sh despues de configurar la red"
sh
fi
# firstrunt=sh Arranque en modo depuracion para el cliente intrd
if [ "$firstrun" = "9" ]
then
sh
fi
}
ogLoadNetModule ()
{
#cargando netmodule
if [ -n "$netmodule" ]
then
echo "Cargando modulo de red $netmodule"
insmod `find /lib/modules/ -name ${netmodule}*`
fi
}
ogGetROOTSERVER ()
{
# get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
# check if server ip is part of dhcp root-path
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
else
NFSROOT=${ROOTPATH}
fi
# nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
elif [ -n "${NFSROOT}" ]; then
# nfs options are an optional arg
if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
NFSOPTS="-o ${NFSROOT#*,}"
fi
NFSROOT=${NFSROOT%%,*}
if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
NFSROOT=${ROOTSERVER}:${NFSROOT}
fi
fi
export ROOTSERVER
}
ogConectROOTSERVER ()
{
echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS
## Montamos el resto de cosas necesarias
#printf "$MSG_MOUNTREPO\n" $BOOTMODE;
nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys;
#mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys;
nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log;
#mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log;
#mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images;
#mount -t tmpfs none /opt/opengnsys/images -o size=5m
}
unionmount()
{
FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
UNION_OPT="-o cow -o noinitgroups"
UPATH="/unionfs"
UBIN="unionfs-fuse"
mkdir -p /unionfs/host
mkdir -p /unionfs/union
dir=$1
#echo "creando mkdir -p /unionfs/host/$dir"
mkdir -p /unionfs/host/$dir
#echo "montando mount --bind /$dir /unionfs/host/$dir "
mount --bind /$dir /unionfs/host/$dir
##########echo "creando mkdir -p /unionfs/union/$dir"
mkdir -p /unionfs/union/$dir
host="/unionfs/host/${dir}=RW"
common="/opt/og2fs/${dir}=RO"
#####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir "
$UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir
mount --bind /unionfs/union/$dir /$dir
}
# Parameter: Where to mount the filesystem
mountroot ()
{
[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
run_scripts /scripts/og-top
[ "$quiet" != "y" ] && log_end_msg
# If the root device hasn't shown up yet, give it a little while
# to deal with removable devices
ogConfigureRamfs
ogExportKernelParameters
ogCheckPointBreak
ogLoadNetModule
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
run_scripts /scripts/og-premount
[ "$quiet" != "y" ] && log_end_msg
. /scripts/functions
configure_networking
# for the portmapper we need localhost
ifconfig lo 127.0.0.1
/etc/init.d/portmap start
ogGetROOTSERVER
ogCheckPointBreak
ogConectROOTSERVER
# ogConectROOTMEDIA
ogCheckPointBreak
mkdir -p /opt/og2fs
mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro
#mount -t tmpfs -o size=8192 tmpfs /unionfs
for i in etc; do
unionmount $i
done
# root var lib bin sbin usr
cat /proc/mounts > /etc/mtab
#cp -R /opt/og2fs/etc/* /etc/ # */
mount /opt/og2fs/usr /usr
mount /opt/og2fs/lib /lib
mount /opt/og2fs/bin /bin
mount /opt/og2fs/sbin /sbin
#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
#chmod 777 /etc/rcog
##unset PATH
##export PATH=$PATH:/opt/og2fs/sbin
##export PATH=/opt/og2fs/bin:$PATH
##export PATH=/opt/og2fs/sbin:$PATH
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom"
run_scripts /scripts/og-bottom
[ "$quiet" != "y" ] && log_end_msg
#set -a
#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15
#/opt/opengnsys/etc/preinit/default.sh
echo "llamando a init desde scritps og"
exec init
}

View File

@ -0,0 +1,20 @@
#
# Configuration file for update-initramfs(8)
#
#
# update_initramfs [ yes | all | no ]
#
# Default is yes
# If set to all update-initramfs will update all initramfs
# If set to no disables any update to initramfs beside kernel upgrade
update_initramfs=yes
#
# backup_initramfs [ yes | no ]
#
# Default is no
# If set to no leaves no .bak backup files.
backup_initramfs=no

View File

@ -0,0 +1,14 @@
# This is run first except when booting in single-user mode
#
#::sysinit:/opt/opengnsys/etc/preinit/default.sh
# /bin/sh invocations on selected ttys
#
# Start an "askfirst" shell on the console (whatever that may be)
#::askfirst:/bin/sh
# Start an "askfirst" shell on /dev/tty2-4
#tty1::respawn:/sbin/getty 38400 tty1
tty1::respawn:/opt/opengnsys/etc/preinit/default.sh
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5

View File

@ -0,0 +1,30 @@
# Framebuffer drivers are generally buggy and poorly-supported, and cause
# suspend failures, kernel panics and general mayhem. For this reason we
# never load them automatically.
blacklist aty128fb
blacklist atyfb
#blacklist radeonfb
blacklist cirrusfb
blacklist cyber2000fb
blacklist cyblafb
blacklist gx1fb
blacklist hgafb
blacklist i810fb
blacklist intelfb
blacklist kyrofb
blacklist lxfb
blacklist matroxfb_base
blacklist neofb
blacklist nvidiafb
blacklist pm2fb
blacklist rivafb
blacklist s1d13xxxfb
blacklist savagefb
blacklist sisfb
blacklist sstfb
blacklist tdfxfb
blacklist tridentfb
#blacklist vesafb
blacklist vfb
blacklist viafb
blacklist vt8623fb

Some files were not shown because too many files have changed in this diff Show More