diff options
Diffstat (limited to 'src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh')
-rwxr-xr-x | src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh b/src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh new file mode 100755 index 00000000..259f2650 --- /dev/null +++ b/src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh @@ -0,0 +1,236 @@ +#!/bin/sh + +# gets needed packages for ubuntu nvidia/ati drivers +# $1 = nvidia | ati +PLUGIN_FOLDER="/opt/openslx/plugin-repo/xserver" +TMP_FOLDER="/tmp/slx-plugin/xserver" +TARGET="$1" + +if [ ! -d "${PLUGIN_FOLDER}" ]; then + mkdir -p "${PLUGIN_FOLDER}/modules" +fi + +# change into temp +cd ${TMP_FOLDER} > /dev/null + +if [ -e "/boot/vmlinuz" ]; then + KVER=$(ls -ahl '/boot/vmlinuz' | sed -e 's,^.*vmlinuz-,,g') +else + KVER=$(find /lib/modules/2.6* -maxdepth 0|sed 's,/lib/modules/,,g'|sort|tail -n1) +fi + +# TODO: check for build-essential !! + +if [ ! -e "/usr/sbin/dkms" ]; then + echo -n " * DKMS not found: installing .." + aptitude -y install dkms > /dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "fail" + echo " * Didn't get package dkms! Exit now!" + exit 1 + else + echo "ok" + fi +fi + +# TODO: find a more clean way for this workaround +# the current dkms script included in ubuntu is trying to compile +# kernel modules under the user nobody using "su" which is not +# working in the installation phase of the plugin. + +if [ $(grep -c "getent passwd nobody" /usr/sbin/dkms) -ne 0 ]; then + echo -n " * Patch DKMS not to run under user nobody .." + sed -i "s/getent passwd nobody/getent passwd N0/" \ + /usr/sbin/dkms + echo "ok" +fi + +case ${TARGET} in + ati) + mkdir -p ${PLUGIN_FOLDER}/ati/modules + + echo -n " * downloading fglrx xorg package... " + aptitude download xorg-driver-fglrx > /dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "fail" + echo " * Didn't get package xorg-driver-fglrx! Exit now!" + exit 1 + else + echo "ok" + fi + FGLRX_DEB=$(ls xorg-driver-fglrx_*.deb | tail -n1) + # extract $DEB + dpkg-deb -x ${FGLRX_DEB} ${PLUGIN_FOLDER}/ati + + echo -n " * downloading fglrx kernel package... " + aptitude download fglrx-kernel-source >/dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "fail" + echo " * Didn't get package fglrx-kernel-source!" + exit 1 + else + echo "ok" + fi + + FGLRX_KERNEL_DEB=$(ls fglrx-kernel-source*.deb | tail -n1) + dpkg-deb -x ${FGLRX_KERNEL_DEB} / + + FGLRX_SOURCE_DIR=$(find /usr/src/fglrx-${FGLRX_DRIVER_VERSION}* \ + -maxdepth 0 -type d) + FGLRX_FULL_VERSION=$(echo ${FGLRX_SOURCE_DIR} | \ + sed -e 's/\/usr\/src\/fglrx-//') + + FGLRX_DKMS_DIR="/var/lib/dkms/fglrx/${FGLRX_FULL_VERSION}" + + if [ -d /var/lib/dkms/fglrx/${FGLRX_FULL_VERSION} ]; then + if [ ! -L ${FGLRX_DKMS_DIR}/source ]; then + ln -sf ${FGLRX_SOURCE_DIR} ${FGLRX_DKMS_DIR}/source + fi + else + echo -n " * Add fglrx kernel module to dkms tree... " + dkms add -m fglrx -v ${FGLRX_FULL_VERSION} >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok" + else + echo "fail" + exit 1 + fi + fi + + ###### build kernel module ###### + echo -n " * Building fglrx kernel module for kernel ${KVER}... " + dkms -m fglrx -v ${FGLRX_FULL_VERSION} \ + -k ${KVER} \ + --kernelsourcedir /usr/src/linux-headers-${KVER}/ \ + --no-prepare-kernel \ + --no-clean-kernel \ + build \ + > /tmp/dkms.log 2>&1 + if [ $? -eq 0 ]; then + echo "ok" + else + if $(cat /tmp/dkms.log | grep -q "has already"); then + echo "--- fglrx module already built ---" + else + echo "fail" + echo "------ dkms.log -----" + cat /tmp/dkms.log + echo "---------------------" + rm /tmp/dkms.log + exit 1 + fi + fi + + FGLRX_MODULE_PATH=$(find ${FGLRX_DKMS_DIR}/${KVER}/ -name fglrx.ko \ + | tail -n1 ) + + cp ${FGLRX_MODULE_PATH} ${PLUGIN_FOLDER}/ati/modules/fglrx.ko + + # cleanup + if [ -f /usr/lib/dri/fglrx_dri.so ]; then + mv /usr/lib/dri/fglrx_dri.so /usr/lib/dri/fglrx_dri.so.slx + else + # remove link + rm -rf /usr/lib/dri/fglrx_dri.so + fi + ln -s ${PLUGIN_FOLDER}/ati/usr/lib/dri/fglrx_dri.so \ + /usr/lib/dri/fglrx_dri.so + + # cleanup + rm /tmp/dkms.log + cd ${PLUGIN_FOLDER}/ati + + ;; + + + nvidia) + mkdir -p ${PLUGIN_FOLDER}/nvidia/modules + + NVIDIA_DRIVER_VERSION=173 + + echo -n " * downloading nvidia xorg package... " + aptitude download nvidia-glx-${NVIDIA_DRIVER_VERSION} > /dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "fail" + echo " * Didn't get package nvidia-glx-${NVIDIA_DRIVER_VERSION}!" + exit 1 + else + echo "ok" + fi + + echo -n " * downloading nvidia kernel package... " + aptitude download nvidia-${NVIDIA_DRIVER_VERSION}-kernel-source >/dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "fail" + echo " * Didn't get package nvidia-${NVIDIA_DRIVER_VERSION}-kernel-source!" + exit 1 + else + echo "ok" + fi + + NVIDIA_DEB=$(ls -1 nvidia-glx*.deb | tail -n1) + NVIDIA_KERNEL_DEB=$(ls -1 nvidia-${NVIDIA_DRIVER_VERSION}-kernel-source*.deb | tail -n1) + # extract $DEB + dpkg-deb -x ${NVIDIA_DEB} ${PLUGIN_FOLDER}/nvidia + # extract the sources deb to root + dpkg-deb -x ${NVIDIA_KERNEL_DEB} / + + NVIDIA_SOURCE_DIR=$(find /usr/src/nvidia-${NVIDIA_DRIVER_VERSION}* \ + -maxdepth 0 -type d) + NVIDIA_FULL_VERSION=$(echo ${NVIDIA_SOURCE_DIR} | \ + sed -e 's/\/usr\/src\/nvidia-//') + + NVIDIA_DKMS_DIR="/var/lib/dkms/nvidia/${NVIDIA_FULL_VERSION}" + + if [ -d /var/lib/dkms/nvidia/${NVIDIA_FULL_VERSION} ]; then + if [ ! -L ${NVIDIA_DKMS_DIR}/source ]; then + ln -sf ${NVIDIA_SOURCE_DIR} ${NVIDIA_DKMS_DIR}/source + fi + else + echo -n " * Add nvidia kernel module to dkms tree... " + dkms add -m nvidia -v ${NVIDIA_FULL_VERSION} >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok" + else + echo "fail" + exit 1 + fi + fi + + ###### build kernel module ###### + echo -n " * Building nvidia kernel module for kernel ${KVER}... " + dkms -m nvidia -v ${NVIDIA_FULL_VERSION} \ + -k ${KVER} \ + --kernelsourcedir /usr/src/linux-headers-${KVER}/ \ + --no-prepare-kernel \ + --no-clean-kernel \ + build \ + > /tmp/dkms.log 2>&1 + if [ $? -eq 0 ]; then + echo "ok" + else + if $(cat /tmp/dkms.log | grep -q "has already"); then + echo "--- nvidia module already built ---" + else + echo "fail" + echo "------ dkms.log -----" + cat /tmp/dkms.log + echo "---------------------" + rm /tmp/dkms.log + exit 1 + fi + fi + + NVIDIA_MODULE_PATH=$(find ${NVIDIA_DKMS_DIR}/${KVER}/ -name \ + nvidia.ko | tail -n 1) + + cp ${NVIDIA_MODULE_PATH} ${PLUGIN_FOLDER}/nvidia/modules/nvidia.ko + + # cleanup + rm /tmp/dkms.log + cd ${PLUGIN_FOLDER}/nvidia + rm -rf ./etc + #TODO: check for more cleanups when the main part works! + ;; +esac + |