# Description: configuration script for Gentoo V2005.1 to configure # linux diskless clients (executed within initial ramdisk # after genconfig) # # Author(s): Dirk von Suchodoletz , 08-07-2006 # # Copyright: (c) 2006 - RZ Universitaet Freiburg # # Version: 0.0.2c # empty functions are defined at the beginning of /etc/functions # distro specific general function called from servconfig script config_distro () { echo -e "dxs version 4.0a\ninitramfs generation date $date" \ >> /mnt/etc/gentoo-release echo -e "# changes made to this file by $0 (initrd from $date)" \ > /etc/rc.conf # keytable is set by hwautocfg script (added just for convenience here) config_rc_entry "KEYMAP" "${KEYTABLE}" } # udev service - not verified! udev_hotplug () { echo "Starting udev" ln -s /bin/udevd /bin/udevstart && udevstart & if [ -x /bin/udevd ] ; then export UDEVD_EXPECTED_SEQNUM=$(cat /sys/kernel/hotplug_seqnum) export UDEVD_EVENT_TIMEOUT=1 echo "" > /proc/sys/kernel/hotplug udevd & else error "$df_errudev" nonfatal fi } # linking runlevel scripts rllinker () { local script="$1" local need="$2" # empty runlevel links - decision on running certain services is # passed via configuration ln -s /etc/${D_INITDIR}/$1 /mnt/etc/runlevels/default/$1 echo $1 >> /mnt/etc/runlevels/default/.critical # hack to remove unneeded dependency stuff #if [ "$script" != "vmware-prep" ] ; then # sed "/depend/,/}/d" /mnt/etc/${D_INITDIR}/$1 > /etc/rls # cp /etc/rls /mnt/etc/${D_INITDIR}/$1 #fi } # setup initial boot scripts (rather strange concept I did not get # completely) initial_boot () { rm /mnt/etc/runlevels/*/.critical 2>/dev/null for i in ${D_INITSCRIPTS}; do ln -sf /etc${D_INITDIR}/$i /mnt/etc/${D_INITBOOTD}/$i echo $i >> /mnt/etc/${D_INITBOOTD}/.critical echo $i >> /mnt/etc/runlevels/default/.critical done } # initialize boot.ld - skript to be executed during early system startup # (before most of the normal boot init scripts) # this script should operate like a normal runlevel script # initialize boot.ld - skript to be executed during early system startup # (before most of the normal boot init scripts) # this script should operate like a normal runlevel script (fixme!!) d_mkrlscript () { local switch="$1" local name="$2" local info="$3" case "$switch" in init) echo -e "#!/sbin/runskript\n# skeleton of /etc/${D_INITDIR}/$name \ generated by $0\ndepend() {\n\t:\n}" >/mnt/etc/${D_INITDIR}/$name echo -e "\n\nstart() {\n\tebegin \"$info\"" \ >>/mnt/etc/${D_INITDIR}/$name chmod u+x /mnt/etc/${D_INITDIR}/$name ;; close) echo -e "\n}\n\nstop() {\n\t:\n}\n# vim:ts=4" \ >>/mnt/etc/${D_INITDIR}/$name ;; esac } # group of functions for the normal runlevels # function for ntp configuration (unchecked) config_ntp () { if [ -e /mnt/etc/${D_INITDIR}/ntp ] ; then if ! strinfile "ntp:" /mnt/etc/passwd ; then echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \ >>/mnt/etc/passwd echo -e "ntp:!:13099:0:99999:7:::" >>/mnt/etc/shadow fi testmkd /mnt/var/lib/ntp/var/run/ntp &>/dev/null if [ "x$start_ntp" = "xinitial" ] ; then echo -e "\t# entries added by $0 (InitRamFS from $date)\n\ \t( ntpdate -s -b $ntp_servers >${LOGFILE} 2>&1 && {\n\t which \ hwclock &>/dev/null && hwclock -w;} ) &" \ >>/mnt/etc/${D_INITDIR}/boot.ld elif [ "x$start_ntp" = "xyes" ] ; then rllinker "ntp" fi fi } # function for atd (unchecked) config_atd () { if [ "x$start_atd" = "xyes" ]; then rllinker "atd" fi } # cron service config_cron () { if [ "x$start_cron" = "xyes" ] ; then if [ -f /mnt/etc/${D_INITDIR}/cron ] ; then : else error "$df_errcron" nonfatal fi fi } # syslog service config_syslog () { if [ "x$start_syslog" = "xyes" ] ; then if [ -f /mnt/etc/${D_INITDIR}/syslog-ng ] ; then rllinker syslog-ng else error "$df_errsysl" nonfatal fi fi } # secure shell service config_sshd () { if [ "x$start_sshd" = "xyes" ] ; then if [ -f /mnt/etc/${D_INITDIR}/sshd ] ; then rllinker "sshd" else error "$df_errsshd" nonfatal fi fi } # snmp agent for remote monitoring (unchecked) config_snmp () { if [ "x$start_snmp" = "xyes" ] ; then if [ -f /mnt/etc/${D_INITDIR}/snmpd ] ; then rllinker "snmpd" testmkd /mnt/var/lib/net-snmp >/dev/null 2>&1 fi # fixme!! # write service monitor depending on services started fi } # configure X display manager (runlevel links and kind of manager) config_xdm () { if [ -f /mnt/etc/${D_INITDIR}/xdm ] ; then sed -e "s,DISPLAYMANAGER=.*,DISPLAYMANAGER=\"xdm\"," -i /mnt/etc/rc.conf ln -s /etc/${D_INITDIR}/xdm /mnt/etc/runlevels/boot/xdm ln -s /etc/${D_INITDIR}/xdm /mnt/etc/runlevels/default/xdm echo "xdm" >> /mnt/etc/runlevels/boot/.critical fi } # change entries in rc.conf (most for convenience only) config_rc_entry () { local var=$1 local value=$2 sed -e "s,$var=.*,$var=\"$value\"," -i /mnt/etc/rc.conf } # configure gdm config_gdm () { config_rc_entry "DISPLAYMANAGER" "gdm" # fixme!! check for needed directories and permissions #testmkd /mnt/var/lib/gdm #testmkd /mnt/var/log/gdm #strinfile "gdm:" /mnt/etc/passwd || echo "gdm:x:50:15:Gnome Display Manager \ #Daemon:/var/lib/gdm:/bin/false" >>/mnt/etc/passwd # hack - gdm should be user 50 and shadow group 15 #chown 50:15 /mnt/var/lib/gdm /mnt/var/log/gdm #chmod 0750 /mnt/var/lib/gdm /mnt/var/log/gdm #rllinker "gdm" ?? } # configure kdm as display manager config_kdm () { config_rc_entry "DISPLAYMANAGER" "kdm" } # configure bluetooth services config_bt () { rllinker "bluetooth" } # set consolefont consolefont () { echo -e "\tsetfont ${CONSOLE_FONT} >${LOGFILE} 2>&1\n" \ >>/mnt/etc/${D_INITDIR}/boot.ld config_rc_entry "CONSOLEFONT" "${CONSOLE_FONT}" } # acpi and powersave config_acpi () { rllinker acpid # remove dependencies (runs unneeded services ...) sed "/depend/,/}/d" -i /mnt/etc/${D_INITDIR}/acpid } # configure automounter config_automount () { if [ -f /mnt/etc/${D_INITDIR}/autofs ] ; then rllinker autofs if [ -n "${automnt_src}" ] ; then # local directory and home directory server from machine-setup [ -z "${automnt_dir}" ] && automnt_dir="/home" strinstr "/" "${automnt_dir}" && error "$df_erratpld" nonfatal automnt_dir=${automnt_dir#/} echo -e "/home\t/etc/auto.${automnt_dir}\n" >> /mnt/etc/auto.master echo -e "# /etc/auto.${automnt_dir} created by $0:\n" \ > /mnt/etc/auto.${automnt_dir} echo -e "*\t-rsize=32768,wsize=32768,rw\t${automnt_src}/&" \ >> /mnt/etc/auto.${automnt_dir} config_portmap fi else error "$df_erramnt" nonfatal fi } # start name service caching daemon (recommended in combination with # ldap source as user admin base) config_nscd () { if [ -f /mnt/etc/${D_INITDIR}/nscd ] ; then #testmkd /mnt/var/run/nscd rllinker "nscd" fi } # start portmapper (needed at least for nfs and nis services - unchecked) config_portmap () { rllinker "portmap" } # start NIS (fixmee: does the start script is really named ypbind?) config_nis () { rllinker "ypbind" } # start vmware and vmware preparation services config_vmware () { rllinker "vmware-prep" rllinker "vmware" # during vmware sessions linux should not handle usb events/devices testmkd /mnt/var/X11R6/bin echo '#!/bin/sh'>> /mnt/etc/udev/rules.d/01-udev-vm.rules echo -e "# Script for blocking linux from handling usb \ devices\n# during vmware sessions. If you like to remove certain modules \ add them\n# to the list below - Dirk von Suchodoletz, \n\ STATE=1\nps aux|grep -i vmware|grep -v \"grep\" &>/dev/null && { STATE=0; \ /sbin/rmmod usb-storage &>/tmp/null; }\n\ [ x\$ACTION = xremove ] && { [ \$STATE = 0 ] && /sbin/rmmod usb-storage \ &>/dev/null; }\nexit \$STATE" > /mnt/var/X11R6/bin/vm-udev chmod u+x /mnt/var/X11R6/bin/vm-udev echo -e "# special entry to block linux from reacting to usb events during \ running\n# vmware sessions, generated by $0 during initramfs\n# Dirk von \ Suchodoletz, \nSUBSYSTEM==\"usb\", ACTION==\"add\", \ PROGRAM=\"/var/X11R6/bin/vm-udev\", OPTIONS=\"ignore_device\"\n\ SUBSYSTEM==\"usb\", ACTION==\"remove\", PROGRAM=\"/var/X11R6/bin/vm-udev\"" \ >> /mnt/etc/udev/rules.d/01-udev-vm.rules }