From 99786db23b68a57013694516a467d10d82eee5ea Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Tue, 11 Mar 2014 17:06:42 +0100 Subject: [nvidia_kernel] port to new chroot-run functionality --- remote/modules/nvidia_kernel/nvidia_kernel.build | 122 +++++------------------ 1 file changed, 25 insertions(+), 97 deletions(-) (limited to 'remote/modules/nvidia_kernel') 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() { -- cgit v1.2.3-55-g7522