#!/bin/sh # install nvidia ubuntu 16.04 64 log="/root/nvidia_install.log" driver_version="390.116" cuda_version="9.1.85" cuda_big_version=$(echo $cuda_version | awk -F'.' '{print $1"."$2}') echo "install nvidia driver and cuda begin ......" >> $log 2>&1 echo "driver version: $driver_version" >> $log 2>&1 echo "cuda version: $cuda_version" >> $log 2>&1 ######Ubuntu########## create_nvidia_repo_ubuntu() { if [ -f "/etc/apt/sources.list.d/sources-aliyun-0.list" ]; then repo_file="/etc/apt/sources.list.d/sources-aliyun-0.list" else repo_file="/etc/apt/sources.list" fi url=$(cat $repo_file |grep "^deb" | head -1 | awk -F'[/]' '{print $1"//"$3}') if [ -z "$url" ]; then url="http://mirrors.cloud.aliyuncs.com" fi url1="$url/opsx/ecs/linux/apt/ ecs cuda" url2="$url/opsx/ecs/linux/apt/ ecs driver" echo $url1 > /etc/apt/sources.list.d/nvidia.list echo $url2 >> /etc/apt/sources.list.d/nvidia.list wget -O - $url/opsx/opsx@service.alibaba.com.gpg.key | apt-key add - apt update >> $log 2>&1 } install_kernel_ubuntu() { #install linux-headers kernel_version=$(uname -r) echo "******exec "uname -r": $kernel_version" echo "******exec "dpkg --list |grep linux-headers | grep $kernel_version | wc -l"" linux_headers_num=$(dpkg --list |grep linux-headers | grep $kernel_version | wc -l) echo "******linux_headers_num=$linux_headers_num" if [ $linux_headers_num -eq 0 ];then echo "******exec "apt-get install -y --allow-unauthenticated linux-headers-$kernel_version"" apt-get install -y --allow-unauthenticated linux-headers-$kernel_version if [ $? -ne 0 ]; then echo "error: install linux-headers fail!!!" return 1 fi fi } install_driver_ubuntu() { #install driver driver_file_num=$(apt-cache search nvidia | grep driver | grep $release | grep $driver_version | wc -l) if [ $driver_file_num -eq 1 ];then driver_file=$(apt-cache search nvidia | grep driver | grep $release | grep $driver_version | awk -F' ' '{print $1}') echo "******exec "apt-cache search nvidia | grep driver |grep $release |grep $driver_version | awk -F' ' '{print $1}'":" echo $driver_file else echo "error: driver_file_num = $driver_file_num , get driver file failed, exit" return 1 fi echo "******exec "apt-get install -y --allow-unauthenticated $driver_file" " apt-get install -y --allow-unauthenticated $driver_file echo "******exec "apt-key add /var/nvidia*driver*$driver_version/*.pub"" apt-key add /var/nvidia*driver*$driver_version/*.pub echo "******exec "apt-get update && apt-get install -y --allow-unauthenticated cuda-drivers" " apt-get update && apt-get install -y --allow-unauthenticated cuda-drivers if [ $? -ne 0 ]; then echo "error: driver install fail!!!" return 1 fi } install_cuda_ubuntu() { begin_cuda=$(date '+%s') cuda_file_num=$(apt-cache search cuda | grep $release | grep $cuda_big_version |grep -v update | wc -l) if [ $cuda_file_num -eq 1 ];then cuda_file=$(apt-cache search cuda | grep $release | grep $cuda_big_version |grep -v update | awk -F' ' '{print $1}') echo "******exec "apt-cache search cuda| grep $release| grep $cuda_big_version |grep -v update| awk -F' ' '{print $1}'"" echo $cuda_file else echo "error: cuda_file_num = $cuda_file_num , get cuda file failed, exit" return 1 fi #install cuda echo "******exec "apt-get install -y --allow-unauthenticated $cuda_file" " apt-get install -y --allow-unauthenticated $cuda_file end_cuda_unpack=$(date '+%s') time_cuda_unpack=$((end_cuda_unpack-begin_cuda)) echo "******download and unpack cuda file end, end time: $end_cuda_unpack, use time $time_cuda_unpack s" echo "******exec "apt-cache search cuda | grep $release | grep $cuda_big_version | grep update | awk -F' ' '{print $1}'" " cuda_patch_filelist=$(apt-cache search cuda | grep $release | grep $cuda_big_version | grep update | awk -F' ' '{print $1}') echo "****** cuda_patch_filelist" echo $cuda_patch_filelist for cuda_patch_file in $cuda_patch_filelist do echo "******exec "apt-get install -y --allow-unauthenticated $cuda_patch_file" " apt-get install -y --allow-unauthenticated $cuda_patch_file done echo "******exec "apt-get update && apt-get install -y --allow-unauthenticated cuda" " apt-get update && apt-get install -y --allow-unauthenticated cuda if [ $? -ne 0 ]; then echo "error: cuda install fail!!!" return 1 fi end_cuda=$(date '+%s') time_cuda=$((end_cuda-begin_cuda)) echo "******install cuda begin time: $begin_cuda, end time $end_cuda, use time $time_cuda s" } enable_pm() { echo "#!/bin/bash" | tee -a /etc/init.d/enable_pm.sh echo "nvidia-smi -pm 1" | tee -a /etc/init.d/enable_pm.sh echo "exit 0" | tee -a /etc/init.d/enable_pm.sh chmod +x /etc/init.d/enable_pm.sh str=$(cat $filename |grep "exit") if [ -z "$str" ]; then echo "/etc/init.d/enable_pm.sh" | tee -a $filename else sed -i '/exit/i/etc/init.d/enable_pm.sh' $filename fi chmod +x $filename } if [ ! -f "/usr/bin/lsb_release" ]; then apt-get install -y lsb-release fi str=$(lsb_release -i | awk -F':' '{print $2}') os=$(echo $str | sed 's/ //g') if [ "$os" = "Ubuntu" ]; then os="ubuntu" str=$(lsb_release -r | awk -F'[:.]' '{print $2$3}') version=$(echo $str | sed 's/ //g') release="ubuntu${version}" filename="/etc/rc.local" else echo "ERROR: OS ($os) is invalid!" >> $log 2>&1 exit 1 fi echo "os:$os release:$release version:$version" >> $log 2>&1 create_nvidia_repo_ubuntu begin=$(date '+%s') install_kernel_ubuntu >> $log 2>&1 if [ $? -ne 0 ]; then echo "error: kernel install fail!!!" >> $log 2>&1 exit 1 fi end=$(date '+%s') time_kernel=$((end-begin)) echo "******install kernel-devel begin time: $begin, end time: $end, use time: $time_kernel s" >> $log 2>&1 begin_driver=$(date '+%s') install_driver_ubuntu >> $log 2>&1 if [ $? -ne 0 ]; then echo "error: driver install fail!!!" >> $log 2>&1 exit 1 fi end_driver=$(date '+%s') time_driver=$((end_driver-begin_driver)) echo "******install driver begin time: $begin_driver, end time: $end_driver, use time: $time_driver s" >> $log 2>&1 install_cuda_ubuntu >> $log 2>&1 if [ $? -ne 0 ]; then echo "error: cuda install fail!!!" >> $log 2>&1 exit 1 fi echo "******install kernel-devel use time $time_kernel s" >> $log 2>&1 echo "******install driver use time $time_driver s" >> $log 2>&1 echo "******install cuda use time $time_cuda s" >> $log 2>&1 echo "add auto enable Persistence Mode when start vm..." >> $log 2>&1 enable_pm echo "reboot......" >> $log 2>&1 reboot