From 416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Thu, 2 Sep 2010 17:50:49 +0200 Subject: change dir structure --- .../preboot/conf/apache-openslx-preboot.conf | 24 +++ src/boot-env/preboot/http-server/user_settings.pl | 97 +++++++++ src/boot-env/preboot/http-server/users.pl | 90 +++++++++ .../preboot/preboot-scripts/dialog.functions | 105 ++++++++++ src/boot-env/preboot/preboot.sh | 95 +++++++++ src/boot-env/preboot/uclib-rootfs/init | 216 +++++++++++++++++++++ src/boot-env/preboot/uclib-rootfs/lib/libcurses.so | 1 + .../preboot/uclib-rootfs/lib/libncurses.so | 1 + .../preboot/uclib-rootfs/lib/libncurses.so.5 | 1 + .../preboot/uclib-rootfs/lib/libncurses.so.5.6 | Bin 0 -> 229164 bytes src/boot-env/preboot/uclib-rootfs/usr/bin/clear | Bin 0 -> 5156 bytes src/boot-env/preboot/uclib-rootfs/usr/bin/dialog | Bin 0 -> 108520 bytes src/boot-env/preboot/uclib-rootfs/usr/bin/w3m | Bin 0 -> 1093832 bytes .../preboot/uclib-rootfs/usr/lib/libcrypto.so | 1 + .../uclib-rootfs/usr/lib/libcrypto.so.0.9.8 | Bin 0 -> 1143120 bytes .../preboot/uclib-rootfs/usr/lib/libcurses.so | 11 ++ .../preboot/uclib-rootfs/usr/lib/libform.so | 1 + .../preboot/uclib-rootfs/usr/lib/libform.so.5 | 1 + .../preboot/uclib-rootfs/usr/lib/libform.so.5.6 | Bin 0 -> 39044 bytes .../preboot/uclib-rootfs/usr/lib/libmenu.so | 1 + .../preboot/uclib-rootfs/usr/lib/libmenu.so.5 | 1 + .../preboot/uclib-rootfs/usr/lib/libmenu.so.5.6 | Bin 0 -> 21968 bytes .../preboot/uclib-rootfs/usr/lib/libncurses.so | 11 ++ .../preboot/uclib-rootfs/usr/lib/libpanel.so | 1 + .../preboot/uclib-rootfs/usr/lib/libpanel.so.5 | 1 + .../preboot/uclib-rootfs/usr/lib/libpanel.so.5.6 | Bin 0 -> 9212 bytes .../preboot/uclib-rootfs/usr/lib/libssl.so | 1 + .../preboot/uclib-rootfs/usr/lib/libssl.so.0.9.8 | Bin 0 -> 237392 bytes src/boot-env/preboot/uclib-rootfs/usr/sbin/kdump | Bin 0 -> 5200 bytes src/boot-env/preboot/uclib-rootfs/usr/sbin/kexec | Bin 0 -> 104068 bytes 30 files changed, 660 insertions(+) create mode 100644 src/boot-env/preboot/conf/apache-openslx-preboot.conf create mode 100755 src/boot-env/preboot/http-server/user_settings.pl create mode 100755 src/boot-env/preboot/http-server/users.pl create mode 100644 src/boot-env/preboot/preboot-scripts/dialog.functions create mode 100755 src/boot-env/preboot/preboot.sh create mode 100755 src/boot-env/preboot/uclib-rootfs/init create mode 120000 src/boot-env/preboot/uclib-rootfs/lib/libcurses.so create mode 120000 src/boot-env/preboot/uclib-rootfs/lib/libncurses.so create mode 120000 src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5 create mode 100755 src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5.6 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/bin/clear create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/bin/dialog create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/bin/w3m create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so.0.9.8 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libcurses.so create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5.6 create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5.6 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libncurses.so create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5.6 create mode 120000 src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so.0.9.8 create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/sbin/kdump create mode 100755 src/boot-env/preboot/uclib-rootfs/usr/sbin/kexec (limited to 'src/boot-env/preboot') diff --git a/src/boot-env/preboot/conf/apache-openslx-preboot.conf b/src/boot-env/preboot/conf/apache-openslx-preboot.conf new file mode 100644 index 00000000..4eb58809 --- /dev/null +++ b/src/boot-env/preboot/conf/apache-openslx-preboot.conf @@ -0,0 +1,24 @@ + ScriptAlias /openslx-preboot/cgi-bin/ "/opt/openslx/share/boot-env/preboot/http-server/" + + Alias "/openslx-preboot/users/" "/srv/openslx/preboot-users/" + + Options -Indexes -ExecCGI FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + + Alias /openslx-preboot/ "/srv/openslx/preboot/" + + Options -Indexes -ExecCGI FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + diff --git a/src/boot-env/preboot/http-server/user_settings.pl b/src/boot-env/preboot/http-server/user_settings.pl new file mode 100755 index 00000000..6c135267 --- /dev/null +++ b/src/boot-env/preboot/http-server/user_settings.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w +# Copyright (c) 2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# +# cgi-bin script that accepts user settings and stores them in a special +# folder on the openslx server + +use strict; +use warnings; + +use CGI; +use CGI::Carp qw(fatalsToBrowser); +use File::Path; + +# add openslx stuff to @INC +use FindBin; +use lib "$FindBin::RealBin/../../../../lib"; +use lib "$FindBin::RealBin"; + +# read default config +use OpenSLX::Basics; +openslxInit(); + +# die "*** Taint mode must be active! ***" unless ${^TAINT}; + +my $cgi = CGI->new; + +my $system = $cgi->param('system') || ''; +my $client = $cgi->param('client') || ''; +my $prebootID = $cgi->param('preboot_id') || ''; +my $type = $cgi->param('type') || 'directkiosk'; +my $errormsg = 'None'; + +die "must give 'system' ($system), 'client' ($client) and 'preboot_id' ($prebootID)!\n" + unless $system && $client && $prebootID; + +my $webPath = "$openslxConfig{'public-path'}/preboot"; +my $src = "$webPath/client-config/$system/$prebootID.tgz"; +my $destPath = "$webPath/$prebootID/client-config/$system"; + +# if fastboot (default) is selected and a ConfTGZ exist just proceed ... +if ($type eq "fastboot" && !-e "$destPath/$client.tgz") { $type = "slxconfig"; } +# directkiosk/cfgkiosk/slxconfig +if ($type ne "fastboot") { + mkpath($destPath."/".$client); + system(qq{tar -xzf $src -C $destPath/$client/}); + + + # from here on the modifications of client configuration should take place + # within $destPath/$client directory + if ($type eq "slxconfig") { + # configuration of a WAN boot SLX client + print STDERR "slxconfig sub"; + } + elsif ($type eq "cfgkiosk") { + # configuration of a WAN boot SLX kiosk + } + elsif (!$type || $type eq "directkiosk") { + # deactivate the desktop plugin for the kiosk mode + open (CFGFILE, ">>$destPath/$client/initramfs/plugin-conf/desktop.conf"); + print CFGFILE 'desktop_active="0"'; + close (CFGFILE); + # activate the kiosk plugin + if (!-e "$destPath/$client/initramfs/plugin-conf/kiosk.conf") { + $errormsg = "The kiosk plugin seems not to be installed"; + print STDERR $errormsg; + } else { + open (CFGFILE, ">>$destPath/$client/initramfs/plugin-conf/kiosk.conf"); + print CFGFILE 'kiosk_active="1"'; + close (CFGFILE); + } + } + else { + # unknown type + $errormsg = "You have passed an unknown boot type $type"; + print STDERR $errormsg; + } + system(qq{cd $destPath/$client; tar -czf $destPath/$client.tgz *}); + rmtree($destPath."/".$client); +} + +# resulting page is not shown to the user (error reporting that way, or +# completely empty reply?) +print + $cgi->header(-charset => 'iso8859-1'), + $cgi->start_html('...'); +if ($errormsg) { print $cgi->p("Error: $errormsg"); } +print + $cgi->end_html(); + diff --git a/src/boot-env/preboot/http-server/users.pl b/src/boot-env/preboot/http-server/users.pl new file mode 100755 index 00000000..cde3d227 --- /dev/null +++ b/src/boot-env/preboot/http-server/users.pl @@ -0,0 +1,90 @@ +#!/usr/bin/perl -w +# Copyright (c) 2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# +# cgi-bin script that accepts user settings and stores them in a special +# folder on the openslx server + +use strict; +use warnings; + +use CGI; +use CGI::Carp qw(fatalsToBrowser); +use File::Path; +use Switch; + +# add openslx stuff to @INC +use FindBin; +use lib "$FindBin::RealBin/../../../../lib"; +use lib "$FindBin::RealBin"; + +# read default config +use OpenSLX::Basics; +openslxInit(); + +my $cgi = CGI->new; +my $mac = $cgi->param('user') || ''; +my $action = $cgi->param('action'); +my $data = $cgi->param('data'); + +# global requirements +die "must give 'mac' ($mac)!\n" + unless $mac; + +my $webPath = "$openslxConfig{'public-path'}/preboot-users"; +my $userConfFile = "$webPath/$mac.conf"; + +# makes only sense if public path is writeable for www-data +# otherwise you have to create directory manualy +if ( ! -e $webPath ) { + mkpath ($webPath) or die _tr("Can't create user config directory (%s). Reason: %s", $webPath, @_); +} + +my $output = ""; +my $error; + +switch ($action) { + case 'set' { + if ($data) { + open (MYFILE, ">$userConfFile"); + print MYFILE $data; + close (MYFILE); + } else { + $error = "no data"; + } + } + case 'read' { + if ( -e $userConfFile ) { + open (MYFILE, $userConfFile); + while () { + chomp; + $output .= "$_\n"; + } + close (MYFILE); + } else { + $error = "foobar"; + } + + } + else { + #default case check if we have a user config + if ( -e $userConfFile ) { $output = "1"; } + else { $output = "0"; }; + } +} + +print $cgi->header('Content-type: text/plain'); +if ($error) { + print $error; +} else { + print $output; +} + +exit 0; diff --git a/src/boot-env/preboot/preboot-scripts/dialog.functions b/src/boot-env/preboot/preboot-scripts/dialog.functions new file mode 100644 index 00000000..7c6dd784 --- /dev/null +++ b/src/boot-env/preboot/preboot-scripts/dialog.functions @@ -0,0 +1,105 @@ +# Copyright (c) 2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# dialog.functions +# provides shell scripts for dialog handling +# ----------------------------------------------------------------------------- + +# set -x + +if [ "x" == "x$DIALOG_HEIGHT" ]; then + DIALOG_HEIGHT="10" +fi + +if [ "x" == "x$DIALOG_WIDTH" ]; then + DIALOG_WIDTH="40" +fi + +_ddownload_checkpercentage () { + local lf=$1 + percentage=$(tail -n 5 $lf | sed 's/\.//g' | awk '{print $2}'| sed -n "s/%//p"| tail -n 1) + return $percentage +} + +ddownload () { + local dl_url=$1 + local dl_titel=$2 + local dl_outfile=$3 + local dl_logfile=$4 + + local dl_server=$(dirname $dl_url) + local dl_file=$(basename $dl_url) + + local dl_count + + if [ "x" == "x$dl_logfile" ]; then + dl_logfile="/tmp/logfile.$$" + fi + + if [ "x" == "x$dl_outfile" ]; then + dl_outfile="$dl_file" + fi + + if [ "x" == "x$dl_title" ]; then + dl_title="Downloading $dl_file .." + fi + + if [ -f "$dl_logfile" ]; then + rm $dl_logfile + fi + + # start wget in background + wget -v -b $dl_url -o "$dl_logfile" -O $dl_outfile + + sleep 0.1; + _ddownload_checkpercentage "$dl_logfile" + + dl_count=$? + + while [ $dl_count -le 99 ]; + do + echo $dl_count |dialog --gauge "$dl_title" $DIALOG_HEIGHT $DIALOG_WIDTH + sleep 0.5 + _ddownload_checkpercentage "$dl_logfile" + dl_count=$? + done + + local finished=0 + while [ ! $finished ]; do + finished=$(tail -n 4 $dl_logfile | grep -c "$dl_file"); + done + + echo 100 | dialog --gauge "$dl_title" $DIALOG_HEIGHT $DIALOG_WIDTH; + +} + + + +menu_firststart () { + while [ "x$(cat result)" = "x" ] ; do + dialog --menu "OpenSLX" 30 60 22 \ + 01 "Kiosk" \ + 02 "Kiosk Setup" \ + 03 "Custom System" \ + 2>result + done +} + +menu_oldconfig () { + oldconf=$1; + while [ "x$(cat result)" = "x" ] ; do + dialog --menu "OpenSLX" 30 60 22 \ + 01 "Kiosk" \ + 02 "Kiosk Setup" \ + 03 "Custom System" \ + 04 "Custom System" + 2>result + done +} diff --git a/src/boot-env/preboot/preboot.sh b/src/boot-env/preboot/preboot.sh new file mode 100755 index 00000000..703af974 --- /dev/null +++ b/src/boot-env/preboot/preboot.sh @@ -0,0 +1,95 @@ +#!/bin/ash +# Copyright (c) 2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# +# preboot script for user interaction with OpenSLX preloading environment for +# Linux stateless clients (fetched by Preboot init over the net) + +# get configuration +. /etc/initramfs-setup +. ./preboot-scripts/dialog.functions + +# bring the mac address into the standard format 01- +client=$(echo 01-$macaddr|sed "s/:/-/g") + +# check if already a configuration is available to decide if user interaction +# is required (path is to be fixed) +wget -q -O /tmp/have-user-config "$boot_uri/users.pl?user=${client}" +have_user_config=$(cat /tmp/have-user-config); + +if [ "x1" == "x$have_user_config" ]; then + wget -q -O /tmp/oldconfig "$boot_uri/users.pl?user=${client}&action=read" + . /tmp/oldconfig + menu_oldconfig $oldconfig +else + menu_firststart +fi +rm result; + +# Switch here for several boot TYPE=fastboot/directkiosk/cfgkiosk/slxconfig +# fastboot - no interaction use system from client config +# directkiosk - start the default slx system into kiosk (using vmchooser) +# cfgkiosk - offer the user changes to his kiosk system (GUI environment) +# slxconfig - offer the user set of configuration options, like setting a non- +# priviledged user, root password, standard gui, plugins to activate ... + +# we expect to have a system selection dialog file in /preboot/bootmenu.dialog +while [ "x$(cat result)" = "x" ] ; do + dialog --file bootmenu.dialog 2>result +done +# source the system to boot configuration ($kernel, $initramfs, $append, +# $label) +sysname=$(cat result) +. ./$sysname +sysname=$(readlink $sysname) + +# set basic post data information +postdata="system=${sysname}&preboot_id=${preboot_id}&client=${client}" + +# ask for desired debug level in stage3 if debug!=0 in preboot +echo "0" >result +[ x$DEBUGLEVEL != x0 ] && dialog --no-cancel --menu "Choose Debug Level:" \ + 20 65 10 "0" "no debug output (splash)" \ + "2" "standard debug output" \ + "3" "debug output and shell" 2>result + +# change debug level here if required (adjusted for the rest of the interactive +# part) +DEBUGLEVEL=$(cat result) +if [ x$DEBUGLEVEL != x0 ]; then + debug="debug=$DEBUGLEVEL" +else + debug="" +fi + +# send information to configuration host via http +wget --post-data "$postdata" -O /tmp/cfg-error \ + $boot_uri/cgi-bin/user_settings.pl + +[ "x$DEBUGLEVEL" != x0 -a grep -qe "Error:" /tmp/cfg-error 2>/dev/null ] && \ + dialog --msgbox "An error occured ..." # to be elaborated + +# fetch kernel and initramfs of selected system +dialog --infobox "Loading kernel of ${sysname} ..." 3 65 +wget -q -O /tmp/kernel $boot_uri/$kernel +dialog --infobox "Loading initial ramfs of ${sysname} ..." 3 65 +wget -q -O /tmp/initramfs $boot_uri/$initramfs + +# read primary IP configuration to pass it on (behaviour like IPAPPEND=1 of +# PXElinux) +. /tmp/ipstuff + +[ "x$DEBUGLEVEL" != x0 ] && { clear; ash; } + +# start the new kernel with initialramfs and composed cmdline +dialog --infobox "Booting OpenSLX client $label ..." 3 65 +kexec -l /tmp/kernel --initrd=/tmp/initramfs \ + --append="$append file=$boot_uri/${preboot_id}/client-config/${sysname}/${client}.tgz $quiet ip=$ip:$siaddr:$router:$subnet:$dnssrv $debug" 2>/dev/null +kexec -e >/dev/null 2>&1 diff --git a/src/boot-env/preboot/uclib-rootfs/init b/src/boot-env/preboot/uclib-rootfs/init new file mode 100755 index 00000000..ab2f9ca0 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/init @@ -0,0 +1,216 @@ +#!/bin/ash +# Copyright (c) 2008..2009 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# +# Main script for preboot initial ramfs - preloading environment for running +# OpenSLX linux stateless clients version 5. + +fetchip () { +# we expect to get an ip address within 10++ seconds +( sleep 10 ; killall udhcpc >/dev/null 2>&1 ) & +for i in 1 2 ; do + udhcpc -f -n -q $vci -s /usr/share/udhcpc/default.script -i $nwif 2>/dev/null + if grep "ip=" /tmp/ipstuff >/dev/null 2>&1 ; then + . /tmp/ipstuff + for ns in $dns ; do + echo "nameserver $ns" >>/etc/resolv.conf + done + # simply add a single dns server for passing via kernel cmdline to stage3 + # (quickhack, just the last, list of dns might be better ...) + echo "dnssrv=$ns" >>/tmp/ipstuff + return + else + if [ $i -eq 1 ] ; then + sleep 1 + else + dialog --msgbox "Did not get any proper IP configuration: Please check \ +that your Ethernet card is supported, the machine is connected to the network \ +and a DHCP server is answering your requests." 7 65 + ash + echo "o" >/proc/sysrq-trigger + fi + fi +done +} + +############################################################################# +# PreBoot init main part + +# device files get their own filesystem +devdir="/dev" +mount -n -t tmpfs -o 'size=25%,mode=0755' initramfsdevs ${devdir} +export DEBUGLEVEL=0 + +# create basic device files an directories in dev +for i in "/dev/mem c 1 1" "/dev/null c 1 3" "/dev/zero c 1 5" \ + "/dev/urandom c 1 9" "/dev/kmsg c 1 11" "/dev/tty0 c 4 0" \ + "/dev/tty1 c 4 1" "/dev/tty2 c 4 2" "/dev/tty3 c 4 3" \ + "/dev/tty4 c 4 4" "/dev/tty5 c 4 5" "/dev/tty6 c 4 6" \ + "/dev/tty7 c 4 7" "/dev/tty8 c 4 8" "/dev/tty9 c 4 9" \ + "/dev/tty10 c 4 10" "/dev/tty c 5 0" "/dev/console c 5 1" \ + "/dev/ptmx c 5 2" "/dev/psaux c 10 1" "/dev/agpgart c 10 175" \ + "/dev/fb0 c 29 0" "/dev/bootsplash p" "/dev/xconsole p"; do + mknod $i +done +mkdir -p ${devdir}/pts ${devdir}/shm +export PATH=/bin:/sbin:/usr/bin/:/usr/sbin + +# redirect kernel messages to tty10 instead of tty1 +getty -i -n -l /bin/cat 38400 tty10 & +setlogcons 10 + +# initramfs-setup configuration (common settings for all clients using a +# certain InitRamFS generated by slxmkramfs/mkdxsinitrd) +[ -f /etc/initramfs-setup ] && . /etc/initramfs-setup 2>/dev/null + +# set a default LAN interface, has to be modified for WLAN or on machines +# with more than one ethernet card built in +nwif="eth0" + +# mount the important standard directories +[ ! -f /proc/cpuinfo ] && mount -n -t proc proc /proc +[ ! -d /sys/class ] && mount -n -t sysfs sysfs /sys + +# load framebuffer modules if needed +for mod in vesafb fbcon; do + if [ x != x$(find /lib/modules -name ${mod}.ko) ]; then + modprobe $mod || \ + dialog --infobox "Module $mod did not load for some reason." 3 65 + usleep 1000 + fi +done + +# give startup information +dialog --infobox "Starting OpenSLX preboot environment ..." 3 65 + +# load usb keyboard and network adaptor modules +for mod in ${ramfs_nicmods} af_packet unix hid hid-bright usbhid \ + uhci-hcd ohci-hcd ; do + if [ x != x$(find /lib/modules -name ${mod}.ko) ]; then + modprobe $mod || \ + dialog --infobox "Module $mod did not load for some reason." 3 65 + usleep 10000 + fi +done + +# set the default for boot type and read kernel commandline (for this and +# other options) +export TYPE=fastboot +read KCMDLINE /bin/watchdog +#!/bin/ash +echo \$$ > /tmp/watchdogpid +[ ! -f /proc/version ] && mount -n -t proc proc /proc +sleep 120 2>/dev/null +echo "o" >/proc/sysrq-trigger +EOF + chmod u+x /bin/watchdog + watchdog & +else + getty -i -n -l /bin/ash 38400 tty2 & +fi + +if [ -n "${SSID}" ] ; then + # WLAN setup will most probably change the network interface name stored in + # nwif (to wlan0 or something like that) + [ $DEBUGLEVEL -gt 0 ] && echo "set essid to ${essid}"; + #value of essid unchecked yet + # load network adaptor modules + cd /lib/modules/$(ls /lib/modules/)/kernel/drivers/net/wireless + for mod in $(find . | grep .ko | sed 's,.*/\([^/]*\).ko,\1',); do + echo "Mod:"; + echo $mod; + modprobe $mod || echo "module $mod did not load for some reason" + usleep 10000 + done + cd / + wlanif=$(iwconfig 2>/dev/null|sed -n "/ESSID:/p"|sed "s/ .*//") + [ $DEBUGLEVEL -gt 0 ] && echo "wlancard recognized as ${wlanif}"; + ip link set dev ${wlanif} up + if iwconfig ${wlanif} mode managed essid "${essid}"; then + nwif=${wlanif} + else + error " Unable to configure the WLAN interface." + fi + : +else + # check here for the active Ethernet link + ip link show dev eth1 >/dev/null 2>&1 && \ + dialog --msgbox "More than one network interface found. This could cause \ +some trouble as their activation and ordering depends on the module load \ +order ..." 7 65 +fi + +# set up loopback networking and power up ethernet +ip link set dev lo up +ip addr add 127.0.0.1/8 dev lo +ip link set dev $nwif up || echo "I did not find any usable network adaptor." + +# run udhcpc and start a debug shell if no lease could be obtained +mkdir -p /usr/share/udhcpc +echo -e "#!/bin/ash\nunset infomsg HOME IFS mask lease interface DEBUGLEVEL \ +BOOT_IMAGE\nset >/tmp/ipstuff" >/usr/share/udhcpc/default.script +chmod u+x /usr/share/udhcpc/default.script +modprobe -q af_packet +[ -n $vci ] && vci="-V $vci" +fetchip +ip addr add $ip/$(ipcalc -s -p $ip $subnet|sed s/.*=//) dev $nwif +ip route add default via $router + +# get the mac address of the boot network adaptor +macaddr=$(ip link show dev $nwif 2>/dev/null | \ + sed -n "/ether [0-9e-f]\{2\}:.*/p" | sed -e "s/.*ether //;s/ .*//") +echo "macaddr=$macaddr" >>/etc/initramfs-setup + +# at this point a little selection script could be downloaded, which lets the +# user choose what kind of SLX client he wants to get +dialog --infobox "Fetching preboot interactive part and configuration from \ +the net ($boot_uri) ..." 4 65 +wget -q -O /tmp/preboot.env $boot_uri/bootloader/${preboot_id}.env +mkdir /preboot +tar -xzf /tmp/preboot.env -C /preboot +# start a debug shell if needed, else set quiet kernel parameter +if [ "${DEBUGLEVEL}" -gt 0 ] ; then + echo "Starting shell, leaving it would continue init." + /bin/ash +else + # no debugging output for stage3 run + echo "quiet=quiet" >>/etc/initramfs-setup +fi +# run the preboot interactive part which finally will execute kexec +cd /preboot +exec ./preboot.sh +# we should never return from that one ... +dialog --msgbox "The execution of the main preboot component failed. Please \ +check network access of your box. Is $boot_uri reachable!?" 6 65 +# ping -c 1 $boot_uri +sleep 20 && echo "o" >/proc/sysrq-trigger + diff --git a/src/boot-env/preboot/uclib-rootfs/lib/libcurses.so b/src/boot-env/preboot/uclib-rootfs/lib/libcurses.so new file mode 120000 index 00000000..c7b1e02a --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/lib/libcurses.so @@ -0,0 +1 @@ +libncurses.so.5.6 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so new file mode 120000 index 00000000..7257b6af --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so @@ -0,0 +1 @@ +libncurses.so.5 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5 b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5 new file mode 120000 index 00000000..c7b1e02a --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5 @@ -0,0 +1 @@ +libncurses.so.5.6 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5.6 b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5.6 new file mode 100755 index 00000000..a395c6b7 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/lib/libncurses.so.5.6 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/bin/clear b/src/boot-env/preboot/uclib-rootfs/usr/bin/clear new file mode 100755 index 00000000..acc13246 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/bin/clear differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/bin/dialog b/src/boot-env/preboot/uclib-rootfs/usr/bin/dialog new file mode 100755 index 00000000..6929569f Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/bin/dialog differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/bin/w3m b/src/boot-env/preboot/uclib-rootfs/usr/bin/w3m new file mode 100755 index 00000000..2766a681 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/bin/w3m differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so new file mode 120000 index 00000000..cda623f3 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so @@ -0,0 +1 @@ +libcrypto.so.0.9.8 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so.0.9.8 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so.0.9.8 new file mode 100755 index 00000000..bb1b8163 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcrypto.so.0.9.8 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libcurses.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcurses.so new file mode 100755 index 00000000..32ad8efe --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libcurses.so @@ -0,0 +1,11 @@ +/* GNU ld script + Since Gentoo has critical dynamic libraries in /lib, and the static versions + in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we + run into linking problems. This "fake" dynamic lib is a linker script that + redirects the linker to the real lib. And yes, this works in the cross- + compiling scenario as the sysroot-ed linker will prepend the real path. + + See bug http://bugs.gentoo.org/4411 for more info. + */ +OUTPUT_FORMAT ( elf32-i386 ) +GROUP ( /lib/libcurses.so ) diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so new file mode 120000 index 00000000..10e91696 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so @@ -0,0 +1 @@ +libform.so.5 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5 new file mode 120000 index 00000000..4a80f6b6 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5 @@ -0,0 +1 @@ +libform.so.5.6 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5.6 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5.6 new file mode 100755 index 00000000..888adb22 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/lib/libform.so.5.6 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so new file mode 120000 index 00000000..b12b5cfb --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so @@ -0,0 +1 @@ +libmenu.so.5 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5 new file mode 120000 index 00000000..869f4a57 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5 @@ -0,0 +1 @@ +libmenu.so.5.6 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5.6 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5.6 new file mode 100755 index 00000000..fb190a90 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/lib/libmenu.so.5.6 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libncurses.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libncurses.so new file mode 100755 index 00000000..e7122a85 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libncurses.so @@ -0,0 +1,11 @@ +/* GNU ld script + Since Gentoo has critical dynamic libraries in /lib, and the static versions + in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we + run into linking problems. This "fake" dynamic lib is a linker script that + redirects the linker to the real lib. And yes, this works in the cross- + compiling scenario as the sysroot-ed linker will prepend the real path. + + See bug http://bugs.gentoo.org/4411 for more info. + */ +OUTPUT_FORMAT ( elf32-i386 ) +GROUP ( /lib/libncurses.so ) diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so new file mode 120000 index 00000000..b5cd4a70 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so @@ -0,0 +1 @@ +libpanel.so.5 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5 new file mode 120000 index 00000000..ff2e80a5 --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5 @@ -0,0 +1 @@ +libpanel.so.5.6 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5.6 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5.6 new file mode 100755 index 00000000..4acbc076 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/lib/libpanel.so.5.6 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so b/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so new file mode 120000 index 00000000..7874414f --- /dev/null +++ b/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so @@ -0,0 +1 @@ +libssl.so.0.9.8 \ No newline at end of file diff --git a/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so.0.9.8 b/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so.0.9.8 new file mode 100755 index 00000000..194078c5 Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/lib/libssl.so.0.9.8 differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/sbin/kdump b/src/boot-env/preboot/uclib-rootfs/usr/sbin/kdump new file mode 100755 index 00000000..07226a4b Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/sbin/kdump differ diff --git a/src/boot-env/preboot/uclib-rootfs/usr/sbin/kexec b/src/boot-env/preboot/uclib-rootfs/usr/sbin/kexec new file mode 100755 index 00000000..cc49c45c Binary files /dev/null and b/src/boot-env/preboot/uclib-rootfs/usr/sbin/kexec differ -- cgit v1.2.3-55-g7522