summaryrefslogtreecommitdiffstats
path: root/remote/modules/nvidia_kernel/nvidia_kernel.build
diff options
context:
space:
mode:
authorDirk2014-02-21 11:16:02 +0100
committerDirk2014-02-21 11:16:02 +0100
commit1e30627c5b00884054fae7210d036e34ebe4f181 (patch)
tree6d258c5a7a2279881706f38e37921dc4557a0b8d /remote/modules/nvidia_kernel/nvidia_kernel.build
parentSetzen des Windows-Namens beim Booten aus Laufwerk B: (diff)
parent[nvidia_libs] Debug: Checkin für Joey:). (diff)
downloadtm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.tar.gz
tm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.tar.xz
tm-scripts-1e30627c5b00884054fae7210d036e34ebe4f181.zip
Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts
...
Diffstat (limited to 'remote/modules/nvidia_kernel/nvidia_kernel.build')
-rw-r--r--remote/modules/nvidia_kernel/nvidia_kernel.build128
1 files changed, 128 insertions, 0 deletions
diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.build b/remote/modules/nvidia_kernel/nvidia_kernel.build
new file mode 100644
index 00000000..bf9c6ee6
--- /dev/null
+++ b/remote/modules/nvidia_kernel/nvidia_kernel.build
@@ -0,0 +1,128 @@
+fetch_source() {
+ mkdir -p src 2>/dev/null
+ cd src || perror "Could not change into src directory."
+ download "$REQUIRED_URL"
+}
+
+build() {
+ local KERNELSRCDIR="$MODULE_DIR/../kernel/ksrc" # kernel sources
+ local TEMPDIR="$MODULE_DIR/temp"
+ local ROOTLOWERDIR="/"
+ local ROOTUPPERDIR="$TEMPDIR/rootupper"
+ local ROOTBINDDIR="$TEMPDIR/rootbind"
+ local ROOTMOUNTDIR="$TEMPDIR/rootmount"
+ local BINDMOUNTS="/dev /proc /run /sys"
+ local NVIDIA="$MODULE_DIR/src/$REQUIRED_NVIDIA"
+ local NVIDIAEXTRACTDIR="$ROOTMOUNTDIR/NVIDIA"
+ local NVEXTRACTDIR="/NVIDIA" # This is relative to the chroot.
+
+ make_dirs () {
+ [ -d "$TEMPDIR" ] && rm -rf $TEMPDIR/*
+ mkdir -p "$TEMPDIR" || perror "Could not create base directory for mount directories $TEMPDIR."
+ for DIR in "$ROOTUPPERDIR" "$ROOTBINDDIR" "$ROOTMOUNTDIR"; do
+ mkdir -p "$DIR" || perror "Could not create directory for mount directory $DIR."
+ done
+ }
+
+ mount_dirs () {
+ pinfo "Executing bind- and overlay mounts ..."
+ mount -o bind "$ROOTLOWERDIR" "$ROOTBINDDIR" || perror "Could not mount (bind) $ROOTLOWERDIR to $ROOTBINDDIR."
+ mount -o remount,ro "$ROOTBINDDIR" || perror "Could not remount $ROOTBINDDIR ro read-only."
+ mount -t overlayfs overlayfs -o lowerdir="$ROOTBINDDIR",upperdir="$ROOTUPPERDIR" "$ROOTMOUNTDIR" \
+ || perror "Could not mount (overlayfs) $ROOTLOWERDIR, $ROOTUPPERDIR to $BINDDIR."
+ pinfo "Executing bind mounts ($BINDMOUNTS) for chroot root dir ..."
+ for MOUNT in $BINDMOUNTS; do
+ mount -o bind "$MOUNT" "$ROOTMOUNTDIR/$MOUNT" || perror "Could not mount (bind) $MOUNTS into chroot root dir."
+ done
+ }
+
+ # We inject a bashrc to be executed later within the chroot.
+ gen_bashrc () {
+ local COMMON_OPTIONS=' --no-nouveau-check --no-network --no-backup --no-rpms --no-runlevel-check --no-distro-scripts --no-cc-version-check --no-x-check --no-precompiled-interface --silent '
+
+ cat >"$ROOTMOUNTDIR/$HOME/.bashrc"<<-EOF
+ echo "chroot successful."
+ alias ll='ls -alF' # A little convenience for debugging purposes.
+ PS1='\[\e[1;33m\]chroot@\h:\w\$ \[\e[1;32m\]' # To recognize the chroot instantly when debugging (yellow on black).
+ cd "$NVEXTRACTDIR"
+ ./nvidia-installer $COMMON_OPTIONS --kernel-source-path /"$KERNELSRCDIR" # Do the work!
+ exit # Out-comment this for debugging: Then script stays in chroot.
+EOF
+ }
+
+ unpack_nvidia () {
+ [ -d "$NVIDIAEXTRACTDIR" ] && rm -rf "$NVIDIAEXTRACTDIR"
+ pinfo "Unpacking NVidia archive ($NVIDIA) ..."
+ sh "$NVIDIA" --extract-only --target "$NVIDIAEXTRACTDIR" || perror "Could not extract $NVIDIA to $NVIDIAEXTRACTDIR."
+ }
+
+ umount_dirs () {
+ # Let's tidy the place, or at least the mounts: Otherwise these would stack up, and we do not like that, don't we.
+ for MOUNT in $BINDMOUNTS; do
+ umount "$ROOTMOUNTDIR/$MOUNT" || pwarning "Could not unmount $ROOTMOUNTDIR/$MOUNT!"
+ done
+ umount "$ROOTMOUNTDIR" || pwarning "Could not unmount $ROOTMOUNTDIR!"
+ umount "$ROOTBINDDIR" || pwarning "Could not unmount $ROOTBINDDIR!"
+ }
+
+ strip_modules () {
+ strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko."
+ strip -g "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko."
+ }
+
+ copy_modules () {
+ local NVIDIA_MODULES="$MODULE_DIR/build/lib/modules/nvidia/"
+ mkdir -p "$NVIDIA_MODULES"
+ cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/nvidia.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia.ko!"
+ cp "$ROOTUPPERDIR/$NVEXTRACTDIR/kernel/uvm/nvidia-uvm.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia-uvm.ko!"
+ }
+
+ clean_temp () {
+ rm -rf "$TEMPDIR" || perror "Could not clean/delete temp directory $TEMPDIR."
+ }
+
+ # Main stuff
+ pinfo "Generating temporary directories ..."
+ make_dirs
+ pinfo "Mounting directories ..."
+ mount_dirs
+
+ pinfo "Injecting .bashrc into later chroot ..."
+ gen_bashrc
+
+ pinfo "Unpacking NVidia-Installer ..."
+ unpack_nvidia
+
+ pinfo "Ready to chroot - compiling may take some time."
+ pdebug "--- chroot ---------------------------------------------------------------------"
+ pdebug "- -"
+ pdebug "- Notice: This may take a while! -"
+ pdebug "- -"
+ pdebug "- Please keep note the Nvidia installer _will_ complain about -"
+ pdebug "- several warnings and errors. It will do this in any case. -"
+ pdebug "- -"
+ pdebug "- This does _not_ mean the kernel module compilation was unsuccessful! -"
+ pdebug "- -"
+ pdebug "--------------------------------------------------------------------------------"
+ chroot "$ROOTMOUNTDIR"
+ pinfo "chroot terminated."
+
+ pinfo "Unmount directories."
+ umount_dirs
+
+ pinfo "Stripping kernel modules."
+ strip_modules
+
+ pinfo "Copying kernel modules."
+ copy_modules
+
+ pinfo "Cleaning / deleting temp directories."
+ clean_temp
+}
+
+post_copy() {
+ :
+}
+