summaryrefslogtreecommitdiffstats
path: root/initramfs/distro-specs/suse/functions-10.1
blob: f1a76ed3d054e9bbe793f079e5993df2ee1a6c6d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# configuration functions for SuSE 10.1 which differ from functions defined
# in general SuSE base definitions ...  General changes should be done there,
# version specific changes for the 10.1 go here.
#
# Dirk von Suchodoletz <dvs@OpenSLX.com>, 14-12-2006
#
# (c) 2006 - RZ Universitaet Freiburg
# (c) 2006 - OpenSLX.ORG Project

# some specific stuff to initialize
preinit () {
# fake the existence of some helper binaries (which are not of any use
# within initialramfs)
shell="/bin/sh"
[ -x /bin/busybox ] && shell="/bin/ash"
for i in usb_id scsi_id vol_id edd_id ata_id path_id hwup ifup ; do
  echo -e "#!$shell\n:" >/sbin/$i
done
mkdir /lib/udev /usr/sbin
for i in idedma.sh mount.sh rename_netiface \
         firmware.sh create_floppy_devices ; do
  echo -e "#!$shell\n:" >/lib/udev/$i
done
echo -e "#!$shell\n:" >/usr/sbin/alsactl
rm /etc/udev/rules.d/60-persistent-storage.rules 2>/dev/null
chmod u+x /sbin/* /lib/udev/* /usr/sbin/*
}

# udev service
udev_hotplug () {
local result=0
if [ -x /bin/udevd ] ; then
  echo "" > /proc/sys/kernel/hotplug
  udevd --daemon || result=1
  trigger_device_events
  usleep 50
else error "$df_errudev" nonfatal
fi
return $result
}

# acpi and powersave
config_acpi () {
rllinker acpid "10" "12"
rllinker powersaved "11" "11"
}

# afs client
# configure afs client
config_afs () {
if [ "x$start_afs" = "xyes" ] ; then
  if [ -f /mnt/etc/init.d/openafs-client ] ; then
    test -d /mnt/afs || error "${df_errafsd}"
    testmkd /mnt/var/cache/openafs
    rllinker "openafs-client" "15" "06"
    #      echo -e "# /etc/sysconfig/afs-client - file generated by \
    #$0:\n#\t$date\n" >/etc/sysconfig/afs-client.new;
    #      sed -e "s,THIS_CELL_SERVER.*,THIS_CELL_SERVER=\"$cell_serv\"," \
    #        -e "s,PREFERREDSERVERS.*,PREFERREDSERVERS=\"$cell_serv\"," \
    #        -e "s,THIS_CELL.*,THIS_CELL=\"$this_cell\"," \
    #        -e "s,MEMCACHE.*,MEMCACHE=\"yes\"," \
    #        /etc/sysconfig/afs-client >> \
    #            /etc/sysconfig/afs-client.new
    #      mv /etc/sysconfig/afs-client.new /etc/sysconfig/afs-client
  else
    error "${df_errafsn}" nonfatal
  fi
fi
}

# prepare virtual machine environment (vmware, vmplayer)
config_vmware () {
rllinker "vmware-prep" "18" "02"
rllinker "vmware" "20" "02"
sed -e "s,TARGETS =,TARGETS = vmware-prep," \
  /mnt/etc/${D_INITDIR}/.depend.start >> /etc/.depend.start
  echo "vmware-prep: " >> /etc/.depend.start
  cp /etc/.depend.start /mnt/etc/${D_INITDIR}/.depend.start
# during vmware sessions linux should not handle usb events/devices
# vmplayer and recent versions of vmware do not need this hack
if [ ! -x /mnt/usr/bin/vmplayer ] ; then
  testmkd /mnt/var/X11R6/bin
  echo '#!/bin/sh'> /mnt/var/X11R6/bin/vm-udev
  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, <dvs@OpenSLX.com>\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, <dvs@OpenSLX.com>\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
fi
}

# set up keytable (function run in hwautocfg)
# kbd runlevel link is in the list of initial runlevel scripts (see 
# config-10.1 file)
keytable () {
# remove unneeded components from the startscript
sed -e "/wanted keytable/,/^fi$/d;/load usb drivers/,/^esac$/d" \
  -i /mnt/etc/${D_INITDIR}/kbd
sed -e "s,KEYTABLE=.*,KEYTABLE=\"${KEYTABLE}\"," \
  -i /mnt/etc/${D_SYSCONFDIR}/keyboard
}

# consolefont and language (function run in hwautocfg)
consolefont () {
sed -e "s,RC_LANG=.*,RC_LANG=\"${LANG}\" # added in initrd," \
    -i /mnt/etc/${D_SYSCONFDIR}/language
}

# check the glx and tvout stuff and configure it
checkgraphix () {
# test if unionfs
case "${XMODULE}" in
  radeon)
    # check ${XDESC}/ hwsetup.info device string in Cards file and then
    # for needed components
    test -e /mnt/lib/modules/${KERNEL}/kernel/drivers/char/drm/fglrx.ko \
      && test -e /mnt/usr/X11R6/lib/modules/drivers/fglrx_drv.* && { 
        XMODULE=fglrx
        # it only works for UnionFS enabled systems
        ln -sf /usr/X11R6/lib/libGL.so.1.2 \
          /mnt/usr/X11R6/lib/libGL.so.1 2>/dev/null
        }
    # check whether to enable tvout
    if [ -n "$tvout" ] && [ "$tvout" != "no" -a "$tvout" != "NO" ] ; then
      [ "$tvout" = "yes" ] && tvout="PAL-B"
      TVOUT='\tOption\t\t"TVFormat" "'$tvout
      TVOUT=$TVOUT'"\n\tOption\t\t"DesktopSetup" "horizontal"'
    fi
  ;;
  nv)
    # check for needed components
    test -e /mnt/lib/modules/${KERNEL}/kernel/drivers/char/drm/nvidia.ko \
      && test -e /mnt/usr/X11R6/lib/modules/drivers/nvidia_drv.* && {
        gllib=$(ls /mnt/usr/X11R6/lib/libGL.so.1.0.* 2>/dev/null|sed -n "1p")
        if [ -n "$gllib" ] ; then
          ln -sf ${gllib#/mnt} /mnt/usr/X11R6/lib/libGL.so.1 2>/dev/null
          # same for GLcore lib
          gllib=$(ls /mnt/usr/X11R6/lib/libGLcore.so.1.0.* 2>/dev/null|\
            sed -n "1p")
          ln -sf ${gllib#/mnt} /mnt/usr/X11R6/lib/libGLcore.so.1 2>/dev/null \
            || fail=1
          # load server modules (trick put the path before the official one)
          testmkd /mnt/etc/X11/modules
          ln -sf /usr/X11R6/lib/modules/updates/extensions/libglx.so \
            /mnt/etc/X11/modules/libglx.so || fail=1
          ln -sf /usr/X11R6/lib/modules/updates/drivers/nvidia_drv.so \
            /mnt/etc/X11/modules/nvidia_drv.so || fail=1
          [ -z $fail ] && XMODULE=nvidia
          # ensure proper permissions for nvidia devices - does not work for some reason
          #echo -e "# nvidia stuff added by $0 in InitRamFS\nKERNEL==\"nvidia*|nvidiactl*\",\
#GROUP=\"video\",MODE=\"0666\"" > /mnt/etc/udev/rules.d/10-nvidia-devperms.rules
       fi
       }
  ;;
esac
}