Ubuntu22.04修改root用户并安装cuda

news2025/3/11 23:04:23

由于本人工作原因,经常会遇到需要给ubuntu打显卡驱动的问题,虽然说不难吧,但是耐不住机器多,重复多次也就烦了,于是抽出了一点时间,并且在deepseek的帮助之下,写了一个自动安装驱动的脚本,脚本中除了自动关闭nouveau的这一步没有进行确认,其他情况下(即nouveau默认禁用的情况下)可正常运行。

#上传install_cuda.sh

chmod +x install_cuda.sh
sudo ./install_cuda.sh

#查看是否安装完成
nvidia-smi
nvcc -V

 附上脚本,可以进行微调

#!/bin/bash
# -----------------------------------------------------------------------------
# 脚本名称: install_cuda.sh
# 版本: 2.0.0
# 作者: 一个不知名的苦逼打工人
# 目标:在 Ubuntu 22.04 上安装 NVIDIA CUDA 12.8,并修改 root 密码
# -----------------------------------------------------------------------------
echo "🔧 五秒后开始执行脚本"
sleep 5

# 记录脚本开始时间
start_time=$(date +%s)

# 确保以 root 权限运行
if [[ $EUID -ne 0 ]]; then
    echo "❌ 错误:此脚本必须以 root 权限执行。" >&2
    sleep 1
    echo "用法:sudo bash $0"
    sleep 1
    exit 1
fi

# **修改 root 密码**
ROOT_PASSWORD="1!P@ssw0rd"
echo "🔑 正在修改 root 密码..."
sleep 1
echo "root:$ROOT_PASSWORD" | sudo chpasswd
echo "✅ root 密码已修改为 '1!P@ssw0rd'!"
sleep 1

# **允许 root 通过 SSH 登录**
echo "🔧 允许 root 通过 SSH 登录..."
sleep 1
sudo sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo sed -i 's/^PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config

# **重启 SSH 服务(使修改生效)**
sudo systemctl restart sshd
echo "✅ SSH 允许 root 登录已启用!"
sleep 1

# **切换到 root 账户**
# echo "🔄 切换到 root 账户..."
# exec su - root  
# -----------------------------------------------------------------------------
# **以下开始执行 CUDA 12.8 安装**
# -----------------------------------------------------------------------------

echo "🔧 定义 CUDA 相关变量..."
sleep 1
CUDA_VERSION="12.8.0"
CUDA_DRIVER_VERSION="570.86.10"
CUDA_MAJOR_VERSION=$(echo "$CUDA_VERSION" | cut -d. -f1-2)
CUDA_URL="https://developer.download.nvidia.com/compute/cuda/${CUDA_VERSION}/local_installers/cuda_${CUDA_VERSION}_${CUDA_DRIVER_VERSION}_linux.run"
CUDA_PKG="/root/cuda_${CUDA_VERSION}_${CUDA_DRIVER_VERSION}_linux.run"

echo "✅ CUDA 版本: $CUDA_VERSION"
sleep 1
echo "✅ CUDA 驱动版本: $CUDA_DRIVER_VERSION"
sleep 1
echo "✅ CUDA 主版本: $CUDA_MAJOR_VERSION"
sleep 1
echo "✅ CUDA 下载链接: $CUDA_URL"
sleep 1
echo "✅ CUDA 安装包路径: $CUDA_PKG"
sleep 1

echo "🔧 将 CUDA 相关变量写入 /etc/profile..."
sleep 1

# 检查并添加 CUDA_VERSION
if ! grep -q "export CUDA_VERSION=" /etc/profile; then
    echo "export CUDA_VERSION=\"$CUDA_VERSION\"" >> /etc/profile
    echo "✅ 已写入 CUDA_VERSION"
    sleep 1
else
    echo "⚠️ CUDA_VERSION 已存在,跳过写入"
    sleep 1
fi

# 检查并添加 CUDA_DRIVER_VERSION
if ! grep -q "export CUDA_DRIVER_VERSION=" /etc/profile; then
    echo "export CUDA_DRIVER_VERSION=\"$CUDA_DRIVER_VERSION\"" >> /etc/profile
    echo "✅ 已写入 CUDA_DRIVER_VERSION"
    sleep 1
else
    echo "⚠️ CUDA_DRIVER_VERSION 已存在,跳过写入"
    sleep 1
fi

# 检查并添加 CUDA_MAJOR_VERSION
if ! grep -q "export CUDA_MAJOR_VERSION=" /etc/profile; then
    echo "export CUDA_MAJOR_VERSION=\"$CUDA_MAJOR_VERSION\"" >> /etc/profile
    echo "✅ 已写入 CUDA_MAJOR_VERSION"
    sleep 1
else
    echo "⚠️ CUDA_MAJOR_VERSION 已存在,跳过写入"
    sleep 1
fi

# 检查并添加 CUDA_URL
if ! grep -q "export CUDA_URL=" /etc/profile; then
    echo "export CUDA_URL=\"$CUDA_URL\"" >> /etc/profile
    echo "✅ 已写入 CUDA_URL"
    sleep 1
else
    echo "⚠️ CUDA_URL 已存在,跳过写入"
    sleep 1
fi

# 检查并添加 CUDA_PKG
if ! grep -q "export CUDA_PKG=" /etc/profile; then
    echo "export CUDA_PKG=\"$CUDA_PKG\"" >> /etc/profile
    echo "✅ 已写入 CUDA_PKG"
    sleep 1
else
    echo "⚠️ CUDA_PKG 已存在,跳过写入"
    sleep 1
fi

echo "🔧 使环境变量配置立即生效..."
sleep 1
source /etc/profile
echo "✅ 环境变量配置已生效"
sleep 1

echo "🎉 CUDA 相关变量已成功写入环境变量并生效!"
sleep 1

# 备份 sources.list
echo "📂 备份原始的 sources.list..."
sleep 1
cp /etc/apt/sources.list /etc/apt/sources.list.bak && echo "✅ 备份成功: /etc/apt/sources.list.bak" || { echo "❌ 备份失败"; sleep 1; exit 1; }

# 配置阿里源
echo "⚙️ 配置阿里源..."
sleep 1
cat > /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF

# 更新系统并安装必要工具
echo "🔄 更新软件包..."
sleep 1
export DEBIAN_FRONTEND=noninteractive
apt update && apt upgrade -y

# 安装基础工具(确保 `nvcc -V` 可用)
echo "📦 安装必要工具 (gcc, make, vim,, nvidia-cuda-toolkit)..."
sleep 1
apt install -y gcc make vim  nvidia-cuda-toolkit || { echo "❌ 工具安装失败"; sleep 1; exit 1; }

# 下载 CUDA 12.8 安装包
echo "⬇️ 正在下载 CUDA $CUDA_MAJOR_VERSION 安装包..."
sleep 1
wget -O "$CUDA_PKG" --progress=dot:giga "$CUDA_URL" || { echo "❌ CUDA 下载失败"; sleep 1; exit 1; }
echo "✅ CUDA 下载完成: $CUDA_PKG"
sleep 1

# 禁用 Nouveau 驱动
echo "🚫 禁用 Nouveau 驱动..."
sleep 1
cat > /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF

# 重新生成 initramfs 并尝试卸载 nouveau
update-initramfs -u
sleep 3
if lsmod | grep -q nouveau; then
    echo "⚠️ Nouveau 仍在运行,尝试移除..."
    sleep 1
    rmmod nouveau || echo "⚠️ 无法卸载 Nouveau,可能需要手动检查"
    sleep 1
else
    echo "✅ Nouveau 禁用成功。"
    sleep 1
fi

# 赋予 CUDA 安装包执行权限
chmod +x "$CUDA_PKG"

# 安装 CUDA
echo "📦 开始安装 NVIDIA CUDA $CUDA_MAJOR_VERSION..."
sleep 1
if bash "$CUDA_PKG" --silent --driver --toolkit --no-drm  ; then
    echo "✅ CUDA 安装完成。"
    sleep 1
else
    echo "❌ CUDA 安装失败,退出脚本。" >&2
    sleep 1
    exit 1
fi

# 更新环境变量
echo "🔧 配置环境变量..."
sleep 1
if ! grep -q "/usr/local/cuda-$CUDA_MAJOR_VERSION/bin" /etc/profile; then
    echo "export PATH=/usr/local/cuda-$CUDA_MAJOR_VERSION/bin:\$PATH" >> /etc/profile
fi
if ! grep -q "/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64" /etc/profile; then
    echo "export LD_LIBRARY_PATH=/usr/local/cuda-$CUDA_MAJOR_VERSION/lib64:\$LD_LIBRARY_PATH" >> /etc/profile
fi

# 使配置立即生效
source /etc/profile
source ~/.bashrc

# 配置 NVIDIA 持久模式 systemd 服务
echo "🛠️ 创建 NVIDIA 持久模式 systemd 服务(Deshine-NVIDIA-Persistence-M-On)..."
sleep 1
cat > /etc/systemd/system/Deshine-NVIDIA-Persistence-M-On.service << EOF
[Unit]
Description=Enable NVIDIA Persistence Mode (Deshine)
After=multi-user.target

[Service]
ExecStart=/usr/bin/nvidia-smi -pm 1
RemainAfterExit=yes
Type=oneshot

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd 并启用服务
systemctl daemon-reload
systemctl enable Deshine-NVIDIA-Persistence-M-On.service
systemctl start Deshine-NVIDIA-Persistence-M-On.service

# 删除 CUDA 安装包
echo "🗑️ 清理无用的安装文件..."
sleep 1
rm -f "$CUDA_PKG"

# 验证 CUDA 是否安装成功
echo "🔍 检查 CUDA $CUDA_MAJOR_VERSION 安装状态..."
sleep 1
if command -v nvcc &> /dev/null; then
    echo "🎉 CUDA 安装成功!版本信息:"
    sleep 1
    nvcc -V
else
    echo "⚠️ CUDA 可能未正确安装,请手动检查!"
    sleep 1
fi

# 记录脚本结束时间并计算执行时间
end_time=$(date +%s)
execution_time=$((end_time - start_time))
echo "🕒 脚本执行完成,总耗时: ${execution_time} 秒"
sleep 1

# **自动删除自身**
echo "🗑️ 自动删除安装脚本..."
sleep 1
rm -- "$0"

# 询问是否重启系统
read -p "CUDA $CUDA_MAJOR_VERSION 配置完成,是否立即重启系统? (y/n) " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
    echo "🔄 系统将在 10 秒后重启..."
    sleep 10
    echo "🔄 即将重启系统..."
    sudo reboot
else
    echo "✅ 请手动重启系统以完成 CUDA 配置。"
    sleep 1
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fiddler+雷电模拟器(安卓9)+https配置

一、fiddler配置 1、开启https代理 2、根证书安装&#xff1a;导出证书系统安装 二、模拟器设置 1、设置网络桥接模式 【点击安装】提示安装成功后保存即可 2、开启root&#xff08;开启adb远程调试&#xff09; 3、开启磁盘写入 4、设置WLAN代理 5、证书安装&#xff1a;物…

STM32-SPI通信协议

目录 一&#xff1a;什么是通信协议&#xff1f; 二&#xff1a;电路结构 1.硬件电路 2&#xff1a;移位 3&#xff1a;时序图 4.交换字节 三&#xff1a;W25Q64简介 硬件电路&#xff1a;​编辑 存储器地址划分 Dlash操作注意事项 状态寄存器 SPI指令集 四&am…

【CentOS】搭建Radius服务器

目录 背景简介&#xff1a;Radius是什么&#xff1f;Radius服务器验证原理搭建Radius服务器环境信息yum在线安装配置FreeRADIUS相关文件clients.conf文件users文件重启服务 验证 参考链接 背景 在项目中需要用到Radius服务器作为数据库代理用户的外部验证服务器&#xff0c;做…

Vue中自定义指令:ClickOutside(点击当前模块外的位置)

应用场景 假设我们有一个下拉框组件&#xff0c;当下拉框展开的时候&#xff0c;点击下拉框之外的元素可以自动关闭下拉框。 一 ClickOutside代码示例 在vue3中使用ClickOutside // 导入自定义指令 import { ClickOutside as vClickOutside } from element-plus;// 绑定指令…

2019年蓝桥杯第十届CC++大学B组真题及代码

目录 1A&#xff1a;组队&#xff08;填空5分_手算&#xff09; 2B&#xff1a;年号字符&#xff08;填空5分_进制&#xff09; 3C&#xff1a;数列求值&#xff08;填空10分_枚举&#xff09; 4D&#xff1a;数的分解&#xff08;填空10分&#xff09; 5E&#xff1a;迷宫…

jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)

jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版&#xff08;需要对 Linux 操作有一定基础&#xff09;二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/#java2…

第6章 定时器计数器

目录 6.1 定时计数器的结构框图 6.2 定时器的控制字 6.2.1 TMOD&#xff1a;工作方式控制寄存器 6.2.2 定时/计数器控制寄存器TCON 6.3 定时/计数器的4种工作方式 6.3.1 方式0、方式1&#xff08;13位、16位定时计数方式&#xff09; 6.3.2 方式2(常数自动重装入) 6.3.3 方…

回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测

回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测回归效果基本介绍GWO-BP-Adaboost:基于灰狼算法优化BP神经网络结合Adaboost思想…

蓝桥杯真题0团建dfs+哈希表/邻接表

dfs邻接表储存或者哈希表的运用&#xff0c;考察我们对数据的存储 本题核心就是在求从根节点开始的两棵树相同的最长序列&#xff0c;首先确定用dfs进行深搜&#xff0c;对于节点的形式可以用邻接表&#xff0c;邻接矩阵&#xff0c;哈希表来进行存储数据。下面看代码 邻接表 …

系统架构的评估的系统的质量属性

体系结构苹果可以针对一个体系结构&#xff0c;也可以针对一组体系结构。 体系结构评估过程中&#xff0c;评估人员所关注的是系统的质量属性&#xff0c;所有评估方法所普遍关注的质量属性有以下几个&#xff1a;性能、可靠性&#xff08;容错&#xff0c;健壮性&#xff09;…

论文阅读:基于超图高阶表示的WSI生存预测

Generating Hypergraph-Based High-Order Representations of Whole-Slide Histopathological Images for Survival Prediction 文章目录 论文介绍快速阅读摘要1 引言2 相关工作2.1 生存分析2.2 超图学习的准备工作 3 方法3.1 patch采样和低级特征提取3.2 多超图学习3.2.1 多超…

27. Harmonyos Next仿uv-ui 组件NumberBox 步进器组件禁用状态

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 1. 组件介绍2. 效果展示3. 禁用状态设置3.1 整体禁用3.2 输入框禁用3.3 长按禁用 4. 完整示例代码5. 知识点讲解5.1 禁用状态属性5.2 禁用…

docker无法pull镜像问题解决for win10

docker无法pull镜像问题解决for win10 问题原因分析解决方法 问题 在win10系统上安装好doker-desktop后ping registry-1.docker.io不同&#xff0c;并且也无法登陆hub.docker.com, 使用docker pull xx也无法正常下载 原因分析 hub.docker.com在2024年5月之后&#xff0c;国内…

批量将 Excel 转换 PDF/Word/CSV以及图片等其它格式

Excel 格式转换是我们工作过程当中非常常见的一个需求&#xff0c;我们通常需要将 Excel 转换为其他各种各样的格式。比如将 Excel 转换为 PDF、比如说将 Excel 转换为 Word、再比如说将 Excel文档转换为图片等等。 这些操作对我们来讲都不难&#xff0c;因为我们通过 Office 都…

网络安全之RSA算法

1978年就出现了这种算法&#xff0c;它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作&#xff0c;也很流行。算法的名字以发明者的名字&#xff08;RonRivest&#xff0c;AdiShamir和LeonardAdleman&#xff09;命名。但RSA的安全性一直未能得到理论上的证…

Unity Dots

文章目录 什么是DotsDOTS的优势ECS&#xff08;实体组件系统&#xff09;Job System作业系统Burst编译器最后 什么是Dots DOTS&#xff08;Data-Oriented Technology Stack&#xff09;是Unity推出的一种用于开发高性能游戏和应用的数据导向技术栈&#xff0c;包含三大核心组件…

设计模式-结构型模式-桥接模式

概述 桥接模式 &#xff1a;Bridge Pattern&#xff1a; 是一种结构型设计模式。 旨在将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。 它通过组合代替继承&#xff0c;解决类爆炸问题&#xff0c;并提高系统的灵活性和可扩展性。 组成部分 【抽象部分】&#xff08…

Ultravox:融合whisper+llama实现audio2text交互

Ultravox是由Fixie AI开发的一种创新型多模态大语言模型,专为实时语音交互设计。与传统的语音交互系统不同,Ultravox无需单独的语音识别(ASR)阶段,可以直接理解文本和人类语音,实现更快速、更自然的交互体验。Ultravox v0.5在语音理解基准测试中超越了OpenAI的GPT-4o Realt…

clickhouse集群部署保姆级教程

ClickHouse安装 版本要求 23.8及之后的版本 硬件要求 三台机器 建议配置 磁盘 ssd 500G内存 32gcpu 16c 最低配置 磁盘 机械硬盘 50G内存 4gcpu 4c 容量规划 一亿条数据大约使用1TB磁盘容量 参考官方容量推荐 安装包准备 zookeeper安装 zookeeper需要java启动&…

驾培市场与低空经济无人机融合技术详解

随着科技的飞速发展和社会的不断进步&#xff0c;驾培市场正面临着前所未有的变革。传统汽车驾驶培训已不再是唯一的选择&#xff0c;无人机驾驶等新兴领域正逐渐成为驾培市场的重要组成部分。本报告旨在探讨驾培市场与低空经济的融合发展&#xff0c;特别是应用型人才培养与驾…