summaryrefslogtreecommitdiffstats
path: root/src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh')
-rwxr-xr-xsrc/os-plugins/plugins/xserver/files/ubuntu-ng-gfx-install.sh236
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
+