summaryrefslogtreecommitdiffstats
path: root/initrd/initrd-stuff/etc/functions
diff options
context:
space:
mode:
authorNico Dietrich2006-01-12 18:44:55 +0100
committerNico Dietrich2006-01-12 18:44:55 +0100
commit6e7ef11152c910101d66d10b418d1b27f566ec3a (patch)
treead5e4b53e28ddf8bb8b5015b60e9f3f41a8783f3 /initrd/initrd-stuff/etc/functions
downloadcore-6e7ef11152c910101d66d10b418d1b27f566ec3a.tar.gz
core-6e7ef11152c910101d66d10b418d1b27f566ec3a.tar.xz
core-6e7ef11152c910101d66d10b418d1b27f566ec3a.zip
Ersteinstellung von ld v4 ins SVN
git-svn-id: http://svn.openslx.org/svn/openslx/dxs/ld4@11 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'initrd/initrd-stuff/etc/functions')
-rw-r--r--initrd/initrd-stuff/etc/functions546
1 files changed, 546 insertions, 0 deletions
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
+}