# Description: configuration script for SuSE 10.0 to configure # linux diskless clients (included by init, hwautocfg, # servconfig, ... within initial ramdisk after inclusion # of the main functions file) # # Author(s): Dirk von Suchodoletz , 20-01-2006 # Blabla # Blub # # Copyright: (c) 2006 - RZ Universitaet Freiburg # # Version: 0.2.1a # distro specific stuff to initialize preinit () { # do nothing yet echo > /dev/null } # linking runlevel scripts rllinker () { local script="$1" local start="$2" local stop="$3" # empty runlevel links - decision on running certain services is # passed via configuration for i in rc3.d/K$stop$script rc5.d/K$stop$script \ rc3.d/S$start$script rc5.d/S$start$script ; do ln -sf ../$script /mnt/etc/init.d/$i done } # group of functions for the normal runlevels - first parameter is start # second stop # function for ntp configuration config_ntp () { local start=$1 local stop=$2 if [ -f /mnt/etc/init.d/ntp ] ; then strinfile "ntp:" /mnt/etc/passwd || \ echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \ >>/mnt/etc/passwd testmkd /mnt/var/lib/ntp/var/run/ntp &>/dev/null if [ "x$start_ntp" = "xinitial" ] ; then echo -e "\t# entry added by $0: $date" \ >>/mnt/etc/${D_INITDIR}/boot.ld echo -e "\tntpdate -s -b $ntp_servers >${LOGFILE} 2>&1 &" \ >>/mnt/etc/${D_INITDIR}/boot.ld else rllinker "ntp" "$start" "$stop" fi fi } # function for atd config_atd () { if [ "x$start_atd" = "xyes" ]; then rllinker "atd" "$1" "$2" fi } # function for configuration of cron services config_cron () { if [ "x$start_cron" = "xyes" ] ; then if [ -f /mnt/etc/init.d/cron ] ; then testmkd /mnt/var/spool/cron/lastrun testmkd /mnt/var/spool/cron/tabs echo -e "# /etc/crontab - file generated by $0:\n\ #\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\ \nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \ /usr/lib/cron/run-crons >/dev/null 2>&1\n" >/mnt/etc/crontab else error " The cron start script seems not to be installed, so requesting \ \n the start of cron services make no sense." nonfatal fi fi } # syslog service config_syslog () { if [ "x$start_syslog" = "xyes" ] ; then if [ -f /mnt/etc/init.d/syslog ] ; then # how to configure remote log server? # logging servers might be specified in $log_servers (from e.g. dhcp) echo -e "# File modified by $0 within initial ramdisk" \ > /etc/syslog-ng.conf sed -e "s,.*dhcp/dev.*,," -e "s,.*named/dev.*,," \ /mnt/etc/syslog-ng/syslog-ng.conf >> /etc/syslog-ng.conf cp /etc/syslog-ng.conf /mnt/etc/syslog-ng/syslog-ng.conf rllinker syslog "$1" "$2" fi fi } # secure shell service config_sshd () { if [ "x$start_sshd" = "xyes" ] ; then if [ -f /mnt/etc/init.d/sshd ] ; then testmkd /mnt/var/lib/sshd; testmkd /mnt/var/lib/empty rllinker "sshd" "$1" "$2" fi fi } # snmp agent for remote monitoring config_snmp () { if [ "x$start_snmp" = "xyes" ] ; then if [ -f /mnt/etc/init.d/snmpd ] ; then rllinker "snmpd" "$1" "$2" testmkd /mnt/var/lib/net-snmp >/dev/null 2>&1 fi # fixme!! # write service monitor depending on services started fi } # x11 stuff descsession () { if [ "x$desktop_session" != "x" ] ; then windowmanagers="$desktop_session" # write script for desktop-session chooser if [ "x$vmware" != "xno" ] ; then debug="" [ ${DEBUGLEVEL} -gt 0 ] && debug="--debug 1" echo -e "#!/bin/sh\n#\n# file generated by\n#\t$0:\n#\t$date\n OSTYPE=\`echo \$0 | sed -e \"s,-, ,\" -e \"s,.*/,,\" | awk '{print \$1}'\` SPECTYPE=\`echo \$0 | sed -e \"s,-, ,\" -e \"s,.*/,,\" | awk '{print \$2}'\`\n OPTS=\"-o \$OSTYPE \${SPECTYPE:+\"-s \$SPECTYPE\"}\"\n xterm -bg black -fg white -geometry 170x30+0-0 +sb \ -e \"runvmware \$OPTS $debug\"\n" > /mnt/var/X11R6/bin/desktop-session chmod a+x /mnt/var/X11R6/bin/desktop-session addpath="true"; fi else windowmanagers="kde,gnome,icewm,failsafe" fi # check if /usr/X11R6/bin is writeable, else use /var/X11R6/bin if [ -w /mnt/usr/X11R6/bin/WM-Session ] ; then sesspath="/usr/X11R6/bin" else sesspath="/var/X11R6/bin" addpath="true" fi # create links to desktop-session chooser [ -f /mnt/usr/bin/X11/wmlist ] && wmlist=`cat /mnt/usr/bin/X11/wmlist` testmkd /mnt/etc/X11/sessions for i in `echo $windowmanagers|sed -e "s/,/ /g"` ; do # beware!! quickhack for VMware sessions strinstr "$i" "$wmlist" || \ test -x /mnt/usr/X11R6/bin/$i || \ echo -e "[Desktop Entry]\nX-SuSE-translate=true\nEncoding=UTF-8\n\ Type=XSession\nExec=$i\nTryExec=$sesspath/$i\n\ Name=$i\n" > /mnt/etc/X11/sessions/$i.desktop # does not work correctly (add /var/X11R6/bin to path!!) test -x /mnt/usr/X11R6/bin/$i || \ ln -fs /var/X11R6/bin/desktop-session /mnt/$sesspath/$i done # add special path /var/X11R6/bin to the PATH variable [ "x$addpath" != "x" ] && \ echo -e "# added path component by $0: $date\n\ PATH=\"\$PATH:/var/X11R6/bin\"" >>/mnt/etc/SuSEconfig/profile } # configure X display manager (/etc/sysconfig/displaymanager) config_dm_entry () { local dm="$1" # should be stated that entries were made (fixmee how??) sed -e "s,DISPLAYMANAGER=.*,DISPLAYMANAGER=\"$start_xdmcp\"," \ -e "s,.*_XSERVER.*,DISPLAYMANAGER_STARTS_XSERVER=\"$dm\"," \ /mnt/etc/sysconfig/displaymanager > /etc/displaymanager cp /etc/displaymanager /mnt/etc/sysconfig/displaymanager # start the display manager as early as possible ln -sf /etc/init.d/xdm /mnt/etc/init.d/boot.d/S12boot.xdm ln -sf /etc/init.d/xdm /mnt/etc/init.d/rc5.d/S01xdm ln -sf /etc/init.d/xdm /mnt/etc/init.d/rc5.d/K20xdm } # configure X display manager (runlevel links and kind of manager) config_xdm () { config_dm_entry yes } # configure gdm as display manager config_gdm () { config_dm_entry yes testmkd /mnt/var/lib/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 chmod 0750 /mnt/var/lib/gdm xdmcp_hosts=`echo $x_display_manager|sed -e "s; ;,;"` if [ "${DEBUGLEVEL}" -gt 0 ] ; then debug="true" else debug="false" fi echo -e "# /etc/opt/gnome/gdm/gdm.conf - file generated by $0\n\ [daemon] AutomaticLoginEnable=false TimedLoginEnable=false #AlwaysRestartServer=false Chooser=/opt/gnome/lib/gdm/gdmchooser Greeter=/opt/gnome/lib/gdm/gdmgreeter RemoteGreeter=/opt/gnome/lib/gdm/gdmgreeter DefaultPath=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/bin:\ /opt/gnome/bin:/opt/kde3/bin:/opt/kde/bin:/usr/openwin/bin RootPath=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/local/bin:/usr/bin:\ /usr/X11R6/bin:/bin:/usr/games:/opt/bin:/opt/gnome/bin:/opt/kde3/bin:\ /opt/kde/bin:/usr/openwin/bin:/opt/cross/bin User=gdm Group=shadow #KillInitClients=true LogDir=/var/lib/gdm ServAuthDir=/var/lib/gdm PostLoginScriptDir=/etc/opt/gnome/gdm/PostLogin/ PreSessionScriptDir=/etc/opt/gnome/gdm/PreSession/ PostSessionScriptDir=/etc/opt/gnome/gdm/PostSession/ DisplayInitDir=/etc/opt/gnome/gdm/Init XKeepsCrashing=/etc/opt/gnome/gdm/XKeepsCrashing RebootCommand=/sbin/shutdown -r now HaltCommand=/sbin/shutdown -h now SuspendCommand=/usr/bin/powersave --suspend-to-disk BaseXsession=/etc/opt/gnome/gdm/Xsession SessionDesktopDir=/usr/share/xsessions/:/etc/X11/sessions/:\ /etc/opt/gnome/dm/Sessions/:/opt/gnome/share/gdm/BuiltInSessions/ BaseXsession=/etc/opt/gnome/gdm/Xsession SessionDesktopDir=/usr/share/xsessions/:/etc/opt/gnome/dm/Sessions/:\ /opt/gnome/share/gdm/BuiltInSessions/ UserAuthFBDir=/tmp UserAuthFile=.Xauthority StandardXServer=/usr/X11R6/bin/X Xnest=/usr/X11R6/bin/Xnest -audit 0 -name Xnest [security] AllowRoot=true AllowRemoteRoot=true AllowRemoteAutoLogin=false CheckDirOwner=true #UserMaxFile=65536 RetryDelay=1 #SessionMaxFile=524388 NeverPlaceCookiesOnNFS=true [xdmcp] Enable=$xdmcp HonorIndirect=true MaxPending=4 MaxPendingIndirect=4 MaxSessions=10 MaxWait=15 MaxWaitIndirect=15 DisplaysPerHost=2 Willing=/etc/X11/xdm/Xwilling [gui] #MaxIconWidth=128 #MaxIconWidth=128 [greeter] Browser=false #TitleBar=true MinimalUID=500 Quiver=true Welcome=Welcome to %n LockPosition=true BackgroundImage=0 BackgroundColor=#000000 ShowGnomeFailsafeSession=false ShowXtermFailsafeSession=false ShowLastSession=false Use24Clock=true GraphicalTheme=GDM-SuSE GraphicalTheme=circles GraphicalThemeDir=/opt/gnome/share/gdm/themes/ GraphicalThemeRand=false #SystemMenu=true InfoMsgFile=/opt/gnome/share/gdm/UserInfo InfoMsgFont=monospace 10 SoundOnLogin=false [chooser] HostImageDir=/opt/gnome/share/hosts/ Broadcast=false Multicast=false Hosts=$xdmcp_hosts [debug] Enable=$debug" >/mnt/etc/opt/gnome/gdm/gdm.conf if [ "x$start_x" = "xindirect" ] ; then # when X server consumes to much mem set X -terminate echo -e "\n[servers]\n0=Terminal -audit 0 -indirect \ $host_name\n\n\ [server-Terminal]\nname=Terminal server\ncommand=/usr/X11R6/bin/X \ -audit 0\n\ flexible=true\nhandled=true\nchooser=true" >>/mnt/etc/opt/gnome/gdm/gdm.conf else echo -e "\n[servers]\n0=Standard\n\n\ [server-Standard]\nname=Standard server\ncommand=/usr/X11R6/bin/X\n\ flexible=true\nhandled=true" >>/mnt/etc/opt/gnome/gdm/gdm.conf fi } # configure gdm as display manager config_kdm () { config_dm_entry yes } # consolefont consolefont () { echo -e "\tsetfont ${CONSOLE_FONT} >${LOGFILE} 2>&1\n" \ >>/mnt/etc/${D_INITDIR}/boot.ld } # acpi and powersave config_acpi () { local start_powersave=`expr $1 + 5` local stop_powersave=`expr $1 - 1` rllinker powersaved "$start_powersave" "$stop_powersave" } # configure dbus (inter application communication for kde and gnome), hal # (hardware abstraction layer - used e.g. by powersaved) and resmgr # (resource manager - the user gets permissions to devices when loggin on) config_dreshal () { local start="$1" local stop="$2" if [ "x$start_dreshal" = "xyes" ]; then if [ -f /mnt/etc/init.d/dbus ] ; then strinfile "messagebus:" /mnt/etc/passwd || \ echo "messagebus:x:100:101:User for D-BUS:/var/run/dbus:/bin/false" \ >> /mnt/etc/passwd testmkd /mnt/var/run/dbus # chown 100:101 /mnt/var/run/dbus rllinker "dbus" "$start" "$stop" fi if [ -f /mnt/etc/init.d/resmgr ] ; then testmkd /mnt/var/run/resmgr/classes start="0"`expr $start + 1` stop="0"`expr $start - 1` rllinker "resmgr" "$start" "$stop" fi if [ -f /mnt/etc/init.d/haldaemon ] ; then strinfile "haldaemon:" /mnt/etc/passwd || \ echo "haldaemon:x:101:102:User for haldaemon:/var/run/hal:/bin/false" \ >> /mnt/etc/passwd start="0"`expr $start + 1` stop="0"`expr $start - 1` rllinker "haldaemon" "$start" "$stop" fi fi } # 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 d_mkbootld () { case "$1" in init) echo -e "#!/bin/sh\n# skeleton of /etc/${D_INITDIR}/boot.ld written \ from $0" >/mnt/etc/${D_INITDIR}/boot.ld echo -e '\n. /etc/rc.status\nrc_reset\ncase "$1" in\n start)' \ >>/mnt/etc/${D_INITDIR}/boot.ld echo -e '\techo -n "Running post configuration required by initrd"' \ >>/mnt/etc/${D_INITDIR}/boot.ld chmod u+x /mnt/etc/${D_INITDIR}/boot.ld ;; close) echo -e "\trc_status -v\n\t;;\n stop)\n\t;;\nesac\nrc_exit" \ >>/mnt/etc/${D_INITDIR}/boot.ld ;; esac }