summaryrefslogtreecommitdiffstats
path: root/remote/modules
diff options
context:
space:
mode:
authorJonathan Bauer2014-03-11 17:06:42 +0100
committerJonathan Bauer2014-03-11 17:06:42 +0100
commit99786db23b68a57013694516a467d10d82eee5ea (patch)
treed3494cea964db939ae13f91184f8899e79e98bc4 /remote/modules
parent[chroot.inc] major improvements (diff)
downloadtm-scripts-99786db23b68a57013694516a467d10d82eee5ea.tar.gz
tm-scripts-99786db23b68a57013694516a467d10d82eee5ea.tar.xz
tm-scripts-99786db23b68a57013694516a467d10d82eee5ea.zip
[nvidia_kernel] port to new chroot-run functionality
Diffstat (limited to 'remote/modules')
-rw-r--r--remote/modules/nvidia_kernel/nvidia_kernel.build122
1 files changed, 25 insertions, 97 deletions
diff --git a/remote/modules/nvidia_kernel/nvidia_kernel.build b/remote/modules/nvidia_kernel/nvidia_kernel.build
index bf9c6ee6..bde06c60 100644
--- a/remote/modules/nvidia_kernel/nvidia_kernel.build
+++ b/remote/modules/nvidia_kernel/nvidia_kernel.build
@@ -5,95 +5,15 @@ fetch_source() {
}
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!"
- }
+ local ROOTUPPERDIR="$MODULE_DIR/rootupper"
- 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
+ local KERNELSRCDIR="$MODULES_DIR/kernel/ksrc" # kernel sources
+ local NVIDIA="$MODULE_DIR/src/$REQUIRED_NVIDIA"
+ local NVIDIAEXTRACTDIR="$ROOTUPPERDIR/NVIDIA"
- pinfo "Unpacking NVidia-Installer ..."
- 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."
pinfo "Ready to chroot - compiling may take some time."
pdebug "--- chroot ---------------------------------------------------------------------"
@@ -106,20 +26,28 @@ EOF
pdebug "- This does _not_ mean the kernel module compilation was unsuccessful! -"
pdebug "- -"
pdebug "--------------------------------------------------------------------------------"
- chroot "$ROOTMOUNTDIR"
- pinfo "chroot terminated."
- pinfo "Unmount directories."
- umount_dirs
+
+ chroot_run "$ROOTUPPERDIR" <<-EOF
+ /NVIDIA/nvidia-installer --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 --kernel-source-path /"$KERNELSRCDIR" # Do the work!
+ # fake success since the installer will exit with an error due to the module not loading properly.
+ exit 0
+ EOF
+ pinfo "chroot terminated."
- pinfo "Stripping kernel modules."
- strip_modules
+ pinfo "Stripping kernel modules..."
+ strip -g "$ROOTUPPERDIR/NVIDIA/kernel/nvidia.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/NVIDIA/kernel/nvidia.ko."
+ strip -g "$ROOTUPPERDIR/NVIDIA/kernel/uvm/nvidia-uvm.ko" || \
+ pwarning "Could not strip kernel module $ROOTUPPERDIR/NVIDIA/kernel/uvm/nvidia-uvm.ko."
- pinfo "Copying kernel modules."
- copy_modules
+ pinfo "Copying kernel modules..."
+ local NVIDIA_MODULES="$MODULE_BUILD_DIR/lib/modules/nvidia/"
+ mkdir -p "$NVIDIA_MODULES"
+ cp "$ROOTUPPERDIR/NVIDIA/kernel/nvidia.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia.ko!"
+ cp "$ROOTUPPERDIR/NVIDIA/kernel/uvm/nvidia-uvm.ko" "$NVIDIA_MODULES" || perror "Could not copy nvidia-uvm.ko!"
- pinfo "Cleaning / deleting temp directories."
- clean_temp
+ rm -rf "$MODULE_BUILD_DIR/NVIDIA"
}
post_copy() {