From 6e7ef11152c910101d66d10b418d1b27f566ec3a Mon Sep 17 00:00:00 2001 From: Nico Dietrich Date: Thu, 12 Jan 2006 17:44:55 +0000 Subject: Ersteinstellung von ld v4 ins SVN git-svn-id: http://svn.openslx.org/svn/openslx/dxs/ld4@11 95ad53e4-c205-0410-b2fa-d234c58c8868 --- initrd/initrd-stuff/etc/functions | 546 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 546 insertions(+) create mode 100644 initrd/initrd-stuff/etc/functions (limited to 'initrd/initrd-stuff/etc/functions') diff --git a/initrd/initrd-stuff/etc/functions b/initrd/initrd-stuff/etc/functions new file mode 100644 index 00000000..7e189917 --- /dev/null +++ b/initrd/initrd-stuff/etc/functions @@ -0,0 +1,546 @@ +####################################################################### +# produce error message and if $2 is empty run (debug) shell +error() { +echo -e "An error occured during execution of $0 script:\n\n$1\n" +if [ -n "$2" ] ; then + echo -e "This error is not fatal - continuing ...\n" +else + echo -e "Running shell for debugging purposes now ...\n" + /bin/sh +fi +} +msg() { +echo -e "$1 info: $2" +} +####################################################################### +# micro sleep +usleep () { +local count=`expr $1 \* 10` +while [ $count -gt 0 ] ; do count=`expr $count \- 1` ; done +return 0 +} +####################################################################### +# load a certain module +loadmod() { +local modpath=$1 +local module=`echo $modpath|sed -e "s,.*/,,` +local msg=$2 +if [ -f $modpath ] ; then + module=${module%.*} + modprobe ${MODPRV} ${module#*.} || \ + echo "Failed to load module '$module'. $msg" +fi +} +####################################################################### +# compute prefix bit number from netmask +nm2pref() { +set `IFS="."; echo $1` +local n=0 + for i in $1 $2 $3 $4 ; do + case $i in + 0) break ;; + 128) n=`expr $n + 1` ; break ;; + 192) n=`expr $n + 1` ; break ;; + 224) n=`expr $n + 3` ; break ;; + 240) n=`expr $n + 4` ; break ;; + 252) n=`expr $n + 6` ; break ;; + 254) n=`expr $n + 7` ; break ;; + 255) n=`expr $n + 8` ; continue ;; + esac + done +echo $n +} +####################################################################### +# configure IP address statically +ipsetup () { +local ip=$1 +local nm=$2 +local gw=$3 +local bc=$4 +local if=$5 +for ipcfg in ip ipconfig ifconfig ; do + test -x /bin/$ipcfg && break; +done +case $ipcfg in + ip) + ip link set dev $if up + ip addr add $ip/`nm2pref $nm` broadcast $bc dev $if + if [ "$gw" != "0.0.0.0" ] ; then + ip route add default via $gw + fi + ;; + ipconfig) + # fixme: to be checked + ipconfig $ip::$gw:$nm:$if:none + ;; + ifconfig) + ifconfig $if $ip netmask $nm broadcast $bc + if [ "$gw" != "0.0.0.0" ] ; then + route add default gw $gw + fi + ;; +esac +} +####################################################################### +# nfs mounter +nfsmnt() +{ +local nfsroot=$1 +errmsg="Mount of root filesystem via NFS was requested via kernel command \ +line\nbut failed. There might be the following reasons for that:\n\ +* No nfs.ko module could be loaded and no NFS support was present in the\n\ +running kernel - see error messages above\n\ +* You tried to mount from wrong server or path ($nfsroot)\n\ +* No NFS server is running or you do not have permissions" +for mnt in nfsmount mount ; do + test -x /bin/$mnt && break; +done +loadmod /lib/modules/@@@KERNVER@@@/kernel/fs/nfs/nfs.ko \ + "needed for mounting rootfs" +case $mnt in + nfsmount) + nfsmount -o ro $nfsroot /mnt || error $errmsg + ;; + mount) + portmap || error " Portmapper should be present, if normal mount \ +command is used. Please\n check your initial ramdisk setup (mkdxsinitrd)." + mount -n -t nfs -o ro $nfsroot /mnt || error $errmsg + + killall -9 portmap + ;; +esac +} +####################################################################### +# create configuration file for dhclient +mkdhclconf() { +local vci=$1 +# provide dhclient with proper configuration +echo -e "option bootlocal-script code 221\t= string;\n\ +option language code 222\t\t= string;\n\ +option start-x code 223\t\t\t= string;\n\ +option start-snmp code 224\t\t= string;\n\ +option start-sshd code 225\t\t= string;\n\ +option start-xdmcp code 226\t\t= string;\n\ +option start-cron code 227\t\t= string;\n\ +option crontab-entries code 228\t\t= string;\n\ +option start-rwhod code 229\t\t= string;\n\ +option start-printdaemon code 230\t= string;\n\ +option desktop-session code 231\t= string;\n\ +option tex-enable code 232\t\t= string;\n\ +option netbios-workgroup code 233\t= string;\n\ +option vmware code 234\t\t\t= string;\n\ +option hw-mouse code 252\t\t= string;\n\ +option hw-graphic code 253\t\t= string;\n\ +option hw-monitor code 254\t\t= string;\n\n\ +send dhcp-lease-time 86400;\nsend dhcp-max-message-size 1400;\n\ +request;\nscript \"/bin/dhclient-script\";" >> /etc/dhclient.conf +if [ -n "$vci" ] ; then + echo "send vendor-class-identifier \"$vci\";" >> /etc/dhclient.conf +fi +} + +####################################################################### +# dhcp client +rundhcp() +{ +local commonerr=" The following problems could produce that error:\n\ + * The af_packet.ko module is either not loaded nor present in kernel.\n\ + * No network device is present - either no module matching the hardware\n\ + was loaded nor present in kernel.\n You might want to run 'lsmod'." +local vci=$1 +for dhcp in dhclient dhcpcd pump ipconfig ; do + test -x /bin/$dhcp && break; +done +if [ -z "$dhcp" ] ; then + error " You tried to configure system via dhcp, but no usable dhcp\n\ + client could be found. Please check that you have some client from\n\ + the following list installed: dhclient dhcpcd pump ipconfig." +else + loadmod /lib/modules/@@@KERNVER@@@/kernel/net/packet/af_packet.ko \ + "needed for dhcp"; + echo "Starting $dhcp for configuration" + mkdir /var/lib/dhcp 2&>1 >/dev/null +fi +export client="$dhcp" +case $dhcp in + dhclient) + mkdhclconf $vci + ln -s /bin/dhcpmkconfig /sbin/dhclient-script + dhclient -lf /var/lib/dhcp/dhclient.leases eth0 || \ + error " Fatal error occured while trying to run dhclient.\n$commonerr" + ;; + dhcpcd) + ln -s /bin/dhcpmkconfig /sbin/dhcpd.exe + dhcpcd -L /var/lib/dhcp -c /sbin/dhcpd.exe -T -t 30 eth0 || \ + error " Fatal error occured while trying to run dhcpcd.\n$commonerr" + ;; + pump) + error " Config via pump not implemented yet.\n$commonerr" + ;; + ipconfig) + error " Config via ipconfig (from klibc) not implemented yet.\n\ +$commonerr" + ;; +esac +echo "finished" > /tmp/dhcp-done +} + +####################################################################### +# function for creating directories after testing of their existance +# avoids to recreate directories in union mounts +testmkd () { + test -d $1 || mkdir -p $1 &>/dev/null +} + +####################################################################### +# simple basename replacement +basename () { + local b=${1##*/} + echo ${b%$2} +} + +####################################################################### +# simple string in string search +strinstr (){ +case "$2" in *$1*) return 0;; esac +return 1 +} + +####################################################################### +# simple string in file search +#strinfile (){ +#local line +#while read < $2 line; do +# case "${line}" in *$1*) return 0;; esac +#done +#return 1 +#} +strinfile(){ +case "$(cat $2)" in *$1*) return 0;; esac +return 1 +} + + +####################################################################### +# Check boot commandline for specified option +inkernelcmdline (){ +strinstr " $1" "${KCMDLINE}" +return "$?" +} + +####################################################################### +# wait for a file to appear and stop after maxwait counts +waitfor () { +local file=$1 +local maxwait=$2 +local count=0 +while [ ! -f $file ] ; do + echo "waiting ........." > /dev/null + count=`expr $count + 1` + [ $count -gt $maxwait ] && return 1 +done +return 0 +} + +####################################################################### +# search for ldconfig and execute it +# check that /mnt/etc/ld.so.conf is never lost +ldconfig () { +local cachefile="$1" +for ldcfg in /mnt/sbin/ldconfig \ + /mnt/bin/ldconfig \ + /mnt/usr/sbin/ldconfig; do + test -x $ldcfg && { + $ldcfg -r /mnt -C $cachefile; break; } +done +#/mnt/sbin/ldconfig -r /mnt -C $cachefile +echo "finished" > /tmp/ldcfg +} + +####################################################################### +# configuration via ldap +ldapconf () { +local ldapserver=$1 +error " The configuration via ldap is not implemented yet." +echo "not implemented" > /tmp/ldap-done +} + +####################################################################### +# localization simply derived from $language variable set in +# machine-setup or other sources - mostly taken from knoppix +localization () { +country=$1 +CONSOLE_FONT="lat9w-16.psfu" +case "$country" in + # German version + de*) + COUNTRY="de" + LANG="de_DE@euro" + KEYTABLE="de-latin1-nodeadkeys" + XKEYBOARD="de" + KDEKEYBOARD="de" + CHARSET="iso8859-15" + KDEKEYBOARDS="us,fr" + TZ="Europe/Berlin" + ;; + # Belgian version + be*) + COUNTRY="be" + LANG="C" + KEYTABLE="be2-latin1" + XKEYBOARD="be" + KDEKEYBOARD="be" + CHARSET="iso8859-15" + KDEKEYBOARDS="us,de,fr" + TZ="Europe/Brussels" + ;; + # Bulgarian version + bg*) + COUNTRY="bg" + LANG="bg_BG" + KEYTABLE="bg" + XKEYBOARD="bg" + KDEKEYBOARD="bg" + CHARSET="microsoft-cp1251" + KDEKEYBOARDS="us,de,fr" + TZ="Europe/Sofia" + ;; + # Switzerland (basically de with some modifications) + ch) + LANGUAGE="de" + COUNTRY="ch" + LANG="de_CH" + KEYTABLE="sg-latin1" + XKEYBOARD="de_CH" + KDEKEYBOARD="de_CH" + CHARSET="iso8859-15" + KDEKEYBOARDS="de,us,fr" + TZ="Europe/Zurich" + ;; + # Simplified Chinese + cn) + COUNTRY="cn" + LANG="zh_CN.GB2312" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="us" + CHARSET="gb2312.1980-0" + KDEKEYBOARDS="us,de,fr" + XMODIFIERS="@im=Chinput" + TZ="Asia/Shanghai" + ;; + # Czechoslovakia + cs|cz) + LANGUAGE="cs" + COUNTRY="cs" + LANG="cs_CZ" + KEYTABLE="cz-lat2" + XKEYBOARD="cs" + KDEKEYBOARD="cz" + CHARSET="iso8859-2" + KDEKEYBOARDS="us,de,fr" + TZ="Europe/Prague" + CONSOLE_FONT="iso02g" + ;; + # Denmark + dk|da) + COUNTRY="dk" + LANG="da_DK" + # Workaround: "dk" broken in gettext, use da:da_DK + LANGUAGE="da:da_DK" + KEYTABLE="dk" + XKEYBOARD="dk" + KDEKEYBOARD="dk" + CHARSET="iso8859-15" + KDEKEYBOARDS="dk,de,us,fr" + TZ="Europe/Copenhagen" + ;; + es) + # Spain + COUNTRY="es" + LANG="es_ES@euro" + KEYTABLE="es" + XKEYBOARD="es" + KDEKEYBOARD="es" + CHARSET="iso8859-15" + KDEKEYBOARDS="de,us,fr" + TZ="Europe/Madrid" + ;; + # Finland + fi) + COUNTRY="fi" + LANG="fi_FI@euro" + KEYTABLE="fi" + XKEYBOARD="fi" + KDEKEYBOARD="fi" + CHARSET="iso8859-15" + KDEKEYBOARDS="us" + TZ="Europe/Helsinki" + ;; + # France + fr*) + COUNTRY="fr" + LANG="fr_FR@euro" + KEYTABLE="fr" + XKEYBOARD="fr" + KDEKEYBOARD="fr" + CHARSET="iso8859-15" + KDEKEYBOARDS="de,us" + TZ="Europe/Paris" + ;; + he|il) + # Hebrew version + LANGUAGE="he" + COUNTRY="il" + LANG="he_IL" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="il" + CHARSET="iso8859-8" + KDEKEYBOARDS="us,fr,de" + TZ="Asia/Jerusalem" + ;; + # Ireland + ie) + COUNTRY="ie" + LANG="en_IE@euro" + KEYTABLE="uk" + XKEYBOARD="uk" + KDEKEYBOARD="gb" + CHARSET="iso8859-15" + KDEKEYBOARDS="us,de,es,fr,it" + TZ="Europe/Dublin" + ;; + # Italy + it) + COUNTRY="it" + LANG="it_IT@euro" + KEYTABLE="it" + XKEYBOARD="it" + KDEKEYBOARD="it" + CHARSET="iso8859-15" + KDEKEYBOARDS="fr,us,de" + TZ="Europe/Rome" + ;; + # Japan + ja) + COUNTRY="jp" + LANG="ja_JP" + LANGUAGE="ja" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="us" + CHARSET="iso8859-15" + KDEKEYBOARDS="fr,us,de" + TZ="Asia/Tokyo" + ;; + # The Netherlands + nl) + COUNTRY="nl" + LANG="nl_NL@euro" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="en_US" + CHARSET="iso8859-15" + KDEKEYBOARDS="nl,de,fr" + TZ="Europe/Amsterdam" + ;; + # Poland + pl) + COUNTRY="pl" + LANG="pl_PL" + KEYTABLE="pl" + XKEYBOARD="pl" + KDEKEYBOARD="pl" + CHARSET="iso8859-2" + KDEKEYBOARDS="de,us,fr" + TZ="Europe/Warsaw" + CONSOLE_FONT="iso02g" + ;; + # Russia + ru) + COUNTRY="ru" + LANG="ru_RU.KOI8-R" + KEYTABLE="ru" + XKEYBOARD="ru" + KDEKEYBOARD="ru" + CHARSET="koi8-r" + CONSOLE_FONT="Cyr_a8x16" + KDEKEYBOARDS="de,us,fr" + TZ="Europe/Moscow" + ;; + # Slovakia + sk) + COUNTRY="sk" + LANG="sk" + KEYTABLE="sk-qwerty" + XKEYBOARD="sk" + KDEKEYBOARD="sk" + CHARSET="iso8859-2" + KDEKEYBOARDS="us,de" + TZ="Europe/Bratislava" + CONSOLE_FONT="iso02g" + ;; + # Slovenia + sl) + LANGUAGE="sl" + COUNTRY="si" + LANG="sl_SI" + KEYTABLE="slovene" + XKEYBOARD="sl" + KDEKEYBOARD="si" + CHARSET="iso8859-2" + KDEKEYBOARDS="us,de" + TZ="Europe/Ljubljana" + CONSOLE_FONT="iso02g" + ;; + tr) +# Turkish version (guessed) + COUNTRY="tr" + LANG="tr_TR" + KEYTABLE="tr_q-latin5" + XKEYBOARD="tr" + KDEKEYBOARD="tr" + CHARSET="iso8859-9" + KDEKEYBOARDS="us,de,fr" + TZ="Europe/Istanbul" + ;; + # Taiwan - Traditional Chinese version (thanks to Chung-Yen Chang) + tw) + COUNTRY="tw" + LANG="zh_TW.Big5" + LANGUAGE="zh_TW.Big5" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="us" + CHARSET="iso8859-1" + KDEKEYBOARDS="us" + XMODIFIERS="@im=xcin" + TZ="Asia/Taipei" + ;; + # Great Britian + uk) + COUNTRY="uk" + LANG="en_GB" + LANGUAGE="en" + KEYTABLE="uk" + XKEYBOARD="uk" + KDEKEYBOARD="gb" + CHARSET="iso8859-1" + KDEKEYBOARDS="us" + TZ="Europe/London" + ;; + # US and default configuration + *) + LANGUAGE="us" + COUNTRY="us" + LANG="C" + KEYTABLE="us" + XKEYBOARD="us" + KDEKEYBOARD="us" + CHARSET="iso8859-1" + KDEKEYBOARDS="de,fr" + TZ="America/New_York" + ;; +esac +} -- cgit v1.2.3-55-g7522