From 29d045ae15db53d5aba2740f7e6e4319abb2c19f Mon Sep 17 00:00:00 2001 From: GONG Jie Date: Tue, 1 Aug 2017 15:03:26 +0800 Subject: [PATCH] Add script ubuntu-cuda-diskfull-install.sh --- .../cuda/ubuntu-cuda-diskfull-install.sh | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100755 xCAT-test/autotest/testcase/cuda/ubuntu-cuda-diskfull-install.sh diff --git a/xCAT-test/autotest/testcase/cuda/ubuntu-cuda-diskfull-install.sh b/xCAT-test/autotest/testcase/cuda/ubuntu-cuda-diskfull-install.sh new file mode 100755 index 000000000..8790427c6 --- /dev/null +++ b/xCAT-test/autotest/testcase/cuda/ubuntu-cuda-diskfull-install.sh @@ -0,0 +1,170 @@ +#!/bin/bash + +######## +# Set all the variables below + +LINUX_DISTRO="ubuntu16.04.2" +LINUX_ARCH="ppc64el" + +COMPUTE_NODE="c910f03c11k06" +SOURCE_DIR="/media/xcat" + +######## + +# $SOURCE_DIR is a directory this test case will be searched for. +# Files with the name looked like the following will be searched. +# +# -rw-r--r-- 1 nobody nobody 124037944 Jun 28 17:00 cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_ppc64el.deb +# -rw-r--r-- 1 nobody nobody 1321330418 Feb 10 18:18 cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb +# -rw-r--r-- 1 nobody nobody 69365760 Jul 27 20:35 mini.iso +# -rw-r--r-- 1 nobody nobody 927946752 Feb 15 15:57 ubuntu-16.04.2-server-ppc64el.iso + +######## +# Auto detect all the source packages from the ${SOURCE_DIR} + +[ -d "${SOURCE_DIR}" ] +[ "$?" -ne "0" ] && echo "Directory ${SOURCE_DIR} not found." >&2 && exit 1 + +declare UBUNTU_ISO +declare UBUNTU_MINI_ISO +declare -a CUDA_DEBS + +for f in "${SOURCE_DIR}"/* +do + r="$(realpath "${f}")" + [ -f "${r}" ] || continue + case "${r##*/}" in + "ubuntu-"*"-server-${LINUX_ARCH}.iso") + UBUNTU_ISO="${r}" + ;; + *"mini.iso") + UBUNTU_MINI_ISO="${r}" + ;; + "cuda-repo-ubuntu"*"-"*"-local-"*"_${LINUX_ARCH}.deb") + if [[ "$(echo "${r##*/}" | + sed -e 's#.*\([0-9]\+.[0-9]\+.[0-9]\+-[0-9]\+\).*#\1#')" \ + > \ + "$(echo "${CUDA_DEBS[0]}" | + sed -e 's#.*\([0-9]\+.[0-9]\+.[0-9]\+-[0-9]\+\).*#\1#')" ]] + then + CUDA_DEBS=("${r}") + elif [[ "$(echo "${r##*/}" | + sed -e 's#.*\([0-9]\+.[0-9]\+.[0-9]\+-[0-9]\+\).*#\1#')" \ + = \ + "$(echo "${CUDA_DEBS[0]}" | + sed -e 's#.*\([0-9]\+.[0-9]\+.[0-9]\+-[0-9]\+\).*#\1#')" ]] + then + CUDA_DEBS+=("${r}") + fi + ;; + esac +done + +######## +# Override the auto detect results here. + +#UBUNTU_ISO="${SOURCE_DIR}/ubuntu-16.04.2-server-ppc64el.iso" +#UBUNTU_MINI_ISO="${SOURCE_DIR}/mini.iso" +#CUDA_DEBS=( +# "${SOURCE_DIR}/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb" +# "${SOURCE_DIR}/cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_ppc64el.deb" +#) + +######## +echo "Ubuntu ISO" +echo "===================================" +echo "${UBUNTU_ISO}" +echo +echo "Ubuntu mini ISO" +echo "===================================" +echo "${UBUNTU_MINI_ISO}" +echo +echo "CUDA DEB(s)" +echo "===========" +for f in "${CUDA_DEBS[@]}" +do + echo "${f}" +done +echo + +echo "The files listed above were found and will be used for this test case" +echo "Press Ctrl-C to abort!" +for t in {5..1} +do + echo -n " ... ${t}" + sleep 1 + echo -n -e "\b\b\b\b\b\b" +done +######## + +OSIMAGE_NAME="${LINUX_DISTRO}-${LINUX_ARCH}-install-cudafull" +OSIMAGE_OTHERPKGDIR="/install/post/otherpkgs/${LINUX_DISTRO}/${LINUX_ARCH}" + +[ -f "${UBUNTU_ISO}" ] +[ "$?" -ne "0" ] && echo "File ${UBUNTU_ISO} not found." >&2 && exit 1 +copycds "${UBUNTU_ISO}" +[ "$?" -ne "0" ] && echo "Copy CD failed." >&2 && exit 1 + +[ -f "${UBUNTU_MINI_ISO}" ] +[ "$?" -ne "0" ] && echo "File ${UBUNTU_MINI_ISO} not found." >&2 && exit 1 +MOUNT_POINT="/tmp/ubuntu-mini-iso-$$" +mkdir -p "${MOUNT_POINT}" +mount -o loop "${UBUNTU_MINI_ISO}" "${MOUNT_POINT}" +mkdir -p "/install/${LINUX_DISTRO}/${LINUX_ARCH}/install/netboot" +cp "${MOUNT_POINT}/install/"* "/install/${LINUX_DISTRO}/${LINUX_ARCH}/install/netboot" +umount "${MOUNT_POINT}" +rmdir "${MOUNT_POINT}" + +rmdef -t osimage "${OSIMAGE_NAME}" +mkdef -z <<-EOF +# + +${OSIMAGE_NAME}: + objtype=osimage + imagetype=linux + osarch=${LINUX_ARCH} + osname=Linux + osvers=${LINUX_DISTRO} + otherpkgdir=${OSIMAGE_OTHERPKGDIR}/var/cuda/repo-8-0-local-ga2v2,http://ports.ubuntu.com/ubuntu-ports/ xenial + pkgdir=/install/${LINUX_DISTRO}/${LINUX_ARCH} + pkglist=/opt/xcat/share/xcat/install/ubuntu/compute.${LINUX_DISTRO}.${LINUX_ARCH}.pkglist + profile=compute + provmethod=install + template=/opt/xcat/share/xcat/install/ubuntu/compute.tmpl +EOF +[ "$?" -ne "0" ] && echo "Make node definition failed." >&2 && exit 1 + +rm -rf "${OSIMAGE_OTHERPKGDIR}" +mkdir -p "${OSIMAGE_OTHERPKGDIR}" +for f in "${CUDA_DEBS[@]}" +do + [ -f "${f}" ] + [ "$?" -ne "0" ] && echo "File ${f} not found." >&2 && exit 1 + dpkg -x "${f}" "${OSIMAGE_OTHERPKGDIR}" +done + +makedhcp -n +rinstall "${COMPUTE_NODE}" "osimage=${OSIMAGE_NAME}" + +NETBOOT_TIMEOUT=600 +declare -i WAIT=0 + +while sleep 10 +do + (( WAIT += 10 )) + nodestat "${COMPUTE_NODE}" | grep ': sshd$' + [ "$?" -eq "0" ] && break + [ "${WAIT}" -le "${NETBOOT_TIMEOUT}" ] + [ "$?" -ne "0" ] && echo "Netboot failed" >&2 && exit 1 +done + +# For workaround the GitHub issue #3549 +sleep 5 + +xdsh "${COMPUTE_NODE}" date +[ "$?" -ne "0" ] && echo "Failed connect to compute node via SSH." >&2 && exit 1 + +xdsh "${COMPUTE_NODE}" 'rpm -q cuda' | grep ': cuda-' +[ "$?" -ne "0" ] && echo "CUDA installation checking failed" >&2 && exit 1 + +exit 0