ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu20.04重装与开发环境配置顺序:驱动/CUDA/AI/ROS

Ubuntu20.04重装与开发环境配置顺序:驱动/CUDA/AI/ROS 1. 装系统之前先把几个返工点想明白我做开发这些年经手的机器没有一百台也有大几十台ubuntu20.04 这个版本我从2019年用到今天重装过的次数自己都数不清。每次重装完坐在电脑前看着一个干干净净但什么都不能用的桌面心里其实是很踏实的——因为只要按一套固定的顺序往下走三四个小时之后它就是一台趁手的开发机。真正让人抓狂的不是装的过程而是装完之后那些当初要是留了空间就好了当初要是没选最小安装就好了的返工点。这篇东西我打算把自己这套流程完整写一遍。它不是什么官方文档的搬运而是一个经常炸机器、重开、再配环境的人用反复踩坑换来的顺序感。适合刚接触 Ubuntu 的新手也适合那些每次重装都要搜一遍命令的老手。核心就一句话先把不可逆的决定做对再把可逆的配置慢慢叠上去。1.1 安装介质和 BIOS 里那两个开关先说启动盘。Windows 下我一般用 Rufus选 GPT 分区方案、UEFI 目标镜像直接写进去就行跨平台的话 Ventoy 更省事一次性做好 U 盘以后把 iso 往里面一拷就能启动不用反复格式化。有一点要提醒ubuntu20.04 的官方桌面版镜像大约 2.5G建议用 8G 以上的 U 盘写完之后不要中途拔写入进度条走完再拔。进 BIOS 之前有两件事最好一次做掉。第一个是关掉Secure Boot这玩意在装 NVIDIA 驱动的时候经常给你制造麻烦签名对不上直接拒绝加载搞得你一脸懵。第二个是把启动模式确认为 UEFI别在 Legacy 和 UEFI 之间来回横跳否则装出来可能是 MBR 引导后面加双系统会非常难受。华硕、惠普这类笔记本的开机快捷键一般是 F2 或者 Esc 进 BIOSF12 或者 Esc 选启动项具体看机型的开机提示。1.2 双系统分区给 Ubuntu 留一块干净的空闲空间如果你打算 Windows Ubuntu 双系统我的建议是先在 Windows 的磁盘管理里压缩出一块未分配空间不要提前格式化成 NTFS。常见的分配思路是给/根分区留 80 到 100Gswap分区按内存大小给16G 内存给 16G或者干脆用交换文件剩下的大头全给/home。这样以后系统重装/home挂载回来个人文件基本不丢。安装时选其他选项手动分区千万别手贱去点清除整个磁盘那个按钮不认识你和 Windows 的感情。EFI 系统分区如果 Windows 已经建过一般不用再建一个直接挂载到现有的那个即可。分区大小这块我踩过一次很蠢的坑给/只留了 20G结果 conda 环境加上 ROS 装完磁盘直接飘红系统卡到不能用。后来我才明白PyTorch、ROS 这些环境动辄几个 G给根分区小气就是在给自己挖坑。1.3 安装时那个最小安装选项我从来不用安装界面会问你正常安装还是最小安装。新手很容易觉得最小安装干净、省事但实测下来它省的那点空间换来的是后面你要一个个补软件反而更累。我一般选正常安装并且勾上安装时下载更新和安装第三方软件——后者会顺手帮你装掉一部分无线网卡、显卡相关的固件能省掉重装后网卡没了的尴尬。当然这要求你装的时候能联网网线最稳WiFi 也行。这里插一句关于重装系统后网卡没了这个高频问题。Ubuntu 对部分新型号的无线网卡支持确实滞后尤其是某些 Intel 或 Realtek 的网卡装完之后系统里根本找不到无线设备。这种情况要么插网线用lspci查型号再单独找固件要么在安装时就把第三方固件勾上。这也是我为什么反复强调安装时的选项很关键的另一个原因。2. 系统起来之后的前半小时源、时区和工具链装完重启第一次进桌面别急着装驱动装软件先花十几分钟把地基打平——换软件源、对时区、装基础工具。这一步看起来不起眼但它决定了后面apt install是飞一样还是爬一样。我自己有个习惯每次重装完第一件事就是开终端按固定顺序敲一遍熟练到闭着眼都能操作。2.1 换国内源让 apt 从自行车变成高铁默认的官方源在国内访问速度感人动辄几十 KB/s。换源其实很简单先把原始文件备份再替换成国内镜像即可sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update这里我用的是阿里云镜像清华 TUNA、中科大 USTC 也都很稳选哪个看你所在网络的实际情况。换完之后sudo apt update的输出如果刷刷地往下滚就说明生效了。注意 ubuntu20.04 代号是 focal源文件里那些focal、focal-updates、focal-security的行不要删错只替换域名部分最安全。我见过有人手抖把整个文件清空重写结果格式不对直接报错所以备份这一步别省。2.2 时区和系统更新很多莫名其妙的问题源头就在这时区不对会引发一连串连锁反应git 提交时间错乱、证书验证失败、日志对不上。一条命令解决sudo timedatectl set-timezone Asia/Shanghai timedatectl然后用sudo apt upgrade -y把系统更新到最新。有人担心更新完内核会出问题这个顾虑可以理解但对一台刚装好的机器来说先把安全补丁补上更重要。如果更新了内核和显卡驱动相关的包重启一次再往下走避免出现装完驱动发现 kmod 没跟上的情况。2.3 一次性把常用工具补齐接下来我会装一批基础工具一次性装完省得后面用一次装一次sudo apt install -y build-essential cmake git curl wget vim net-tools \ htop tree pkg-config unzip gparted给个说明build-essential和cmake是编译各类源码的必需品后面编译 ORB-SLAM3、Pangolin 全靠它pkg-config在找库路径时特别有用net-tools提供ifconfig虽然新工具推荐ip命令但很多老教程里还是ifconfig装上省心。这批装完你会发现后面几乎所有开源的编译流程都少了一堆找不到 xxx.h的报错。3. 显卡驱动nvidia-driver-535 装还是不装怎么装这是重装 Ubuntu 里最容易把人劝退的一关。装对了nvidia-smi一敲信息就出来装错了轻则分辨率掉到 800x600重则直接黑屏进不去图形界面。我自己在这上面翻过的车比在任何其他环节都多。所以这一节我打算把为什么怎么装装坏了怎么救三件事讲透。3.1 先别急着动手搞清楚显卡型号和驱动分支第一步永远是确认硬件lspci | grep -i nvidia ubuntu-drivers devicesubuntu-drivers devices这个命令特别有用它会列出你显卡可用的驱动分支并标出哪个是recommended。ubuntu20.04 这个时期nvidia-driver-535是一个比较稳定、适用面广的版本很多新一点的 RTX 显卡也支持。但要注意驱动的选择不是越新越好也不是越旧越好要和你的显卡代际、以及你后面打算装的 CUDA 版本匹配。这里有个很多新手不理解的点为什么不能用系统自带的 nouveau 开源驱动跑深度学习。原因在于 nouveau 是逆向工程出来的驱动不支持 CUDA性能也差一大截。所以一旦你要跑 PyTorch、YOLOv8 这些依赖 CUDA 东西闭源驱动是绕不开的。而 Ubuntu 默认加载的恰恰就是 nouveau这就是为什么我们得先把它屏蔽掉。3.2 屏蔽 nouveau 与图形界面下安装驱动屏蔽 nouveau 的标准做法是写一个 blacklist 文件sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u写完之后重启。更推荐的做法其实是先进 CtrlAltF3 切到 tty 文本界面停掉图形界面再装驱动这样能规避大部分因为驱动没装好导致的黑屏sudo systemctl stop gdm3 sudo apt install -y nvidia-driver-535 sudo reboot重启后敲nvidia-smi如果能看到显卡型号、驱动版本、CUDA 版本那一张表恭喜你这一关过了。ubuntu-drivers 里显示「recommended」的版本往往最省事用sudo ubuntu-drivers autoinstall也能一把梭但我更倾向手动指定版本方便控制。3.3 装坏了怎么办黑屏和低分辨率的恢复路径万一装完开机黑屏或者分辨率低得像回到十年前别慌顺序是这样的开机时在 GRUB 菜单按e在linux那行结尾加上nomodeset按 F10 进系统进去之后先把有问题的驱动卸干净sudo apt purge nvidia*再sudo apt autoremove重启回到 nouveau 状态先保证能进桌面然后重新按上一节的流程装一遍或者换一个驱动版本试。我遇到过一次特别典型的情况装完 535 之后系统卡在登录界面反复重启后来发现是那台机器同时插了两张不同代的显卡驱动分支互相打架。所以如果你是多显卡机器选驱动前一定先把显卡型号看全。3.4 驱动和 CUDA 的版本匹配别装完才发现不兼容装完驱动如果你要跑 GPU 计算就要看nvidia-smi右上角显示的 CUDA Version。这个数字代表当前驱动最高支持的 CUDA 版本注意它不等于你系统里已经装了 CUDA。举个例子驱动支持的 CUDA 是 12.2你装 PyTorch 时选的 CUDA 版本就不能超过它。很多装了 torch 但torch.cuda.is_available()返回 False的问题根源就在这个匹配没做对而不是 PyTorch 本身有问题。一个实用经验装 PyTorch 时优先看驱动支持的上限然后去 PyTorch 官网命令生成器里选小于等于那个上限的 CUDA 版本。别自己猜用官网给的命令最稳。下面这张表是我常用的对照思路检查项命令说明显卡型号lspci | grep -i nvidia确认硬件可用驱动分支ubuntu-drivers devices看 recommended驱动是否生效nvidia-smi有输出即成功支持的最高 CUDAnvidia-smi右上角决定 PyTorch 选版4. 3.5mm 接口没声音一条完整的排查链路这是我见过最邪门的问题之一重装系统后插上音箱或者头戴耳机没有任何声音输出但是 USB 耳麦却能响。很多人以为是硬件坏了其实十有八九是软件层面的输出通道没配对。这个现象太常见了我干脆把完整的排查链路写出来你照着一步步走基本都能解决。4.1 先分清是没设备还是设备选错了打开终端先看系统认到了哪些声卡aplay -l pactl list short sinksaplay -l列出来的是硬件层面的声卡pactl list short sinks列出来的是 PulseAudio 层面的输出通道。如果 3.5mm 对应的模拟输出通常标为analog-stereo在这里出现了说明硬件没问题是通道没被选中如果压根没出现那可能是声卡驱动或通道模型的问题。这一步的意义在于先把问题的范围缩到最小别一上来就重装音频系统。4.2 alsamixer 和 pavucontrol两个必须装的小工具sudo apt install -y alsa-utils pavucontrol alsamixer在alsamixer里按 F6 选中你的模拟声卡然后按方向键把各个通道尤其是 Master、Headphone、Speaker的静音解除音量拉到合适位置。有时候问题就是某个通道默认被静音了取消掉声音立马就回来了。pavucontrol则是图形化的音频控制面板在输出设备标签里你能看到所有可用输出并且可以把默认输出从 USB 耳麦切回到模拟输出。很多人所谓的3.5mm 没声音其实是默认输出设备被设成了别的东西。4.3 通道模型不匹配改 alsa-base.conf 那一行如果上面两步都试了还是不行那大概率是声卡通道模型model没被正确识别。有些笔记本的声卡芯片需要手动指定 model 才能把 3.5mm 接口激活sudo vim /etc/modprobe.d/alsa-base.conf在文件末尾加一行比如options snd-hda-intel modelautomodel的值跟具体芯片有关auto是让系统自动探测某些机型需要填具体的型号如alc269、dell-headset-multi之类。改完执行sudo alsa force-reload不行就重启。我自己的经验是先试auto不行再上网搜你的机型对应的 model 值。这一步做完九成以上的模拟输出问题都能解决。提示排查声音问题时不要同时开着多个音频服务反复改配置改完一处就验证一次否则很容易自己把自己绕进去。5. Anaconda、PyTorch 与 YOLOv8AI 开发环境的搭建顺序把声音和显卡这俩硬骨头啃完接下来就是真正的工作环境了。如果你做的是深度学习相关的工作Anaconda 几乎是标配。它最大的价值不是那些科学计算包而是虚拟环境隔离——不同项目依赖的 PyTorch、Python 版本各不相同用 conda 建独立环境能让你在多个项目之间来回切换而不打架。5.1 Anaconda 安装与换源去官网下载对应的 Linux 安装脚本然后bash Anaconda3-xxxx-Linux-x86_64.sh一路回车最后问你要不要把 conda 加到环境变量选 yes。安装完重开终端conda --version能看到版本就成。接下来给 conda 换国内源不然装包能等到天荒地老conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes注意pip 也要单独换源在~/.pip/pip.conf里配好 index-url 指向国内镜像。conda 和 pip 是两套源经常有人只换了导后面 pip 装包还是慢。这一步做完你的 Python 环境才算真正可用。5.2 建环境、装 PyTorch顺序别错先建一个干净的环境conda create -n py38 python3.8 -y conda activate py38然后去 PyTorch 官网的命令生成器按你的 CUDA 版本选好命令直接复制粘贴。装完验证python -c import torch; print(torch.cuda.is_available())返回 True 才算真正用上了 GPU。如果返回 False回到第 3 节去检查驱动和 CUDA 匹配。这里我不推荐用conda install pytorch这种老命令版本容易对不上用官网给的pip3 install torch ...更直接。5.3 YOLOv8 和 ORB-SLAM3 的依赖冲突怎么绕YOLOv8 现在用pip install ultralytics就能装底层还是 PyTorch所以只要 PyTorch 装对了ultralytics 基本一把过。真正容易打架的是 OpenCVYOLOv8 和很多新库要求较新的 OpenCV比如 4.x而 ORB-SLAM3 这类老项目反而依赖 OpenCV 3.4。这两个如果装到同一个环境里编译时会报一堆奇怪的错。我的做法是给它们分环境YOLOv8 一个 conda 环境ORB-SLAM3 单独一个环境甚至干脆装在系统环境里配合特定 OpenCV 版本。有人图省事全塞一个环境结果就是cv::相关的符号找不到、段错误层出不穷。环境隔离这件事在 AI 开发里不是可选项是必选项。项目推荐环境关键依赖YOLOv8独立 conda 环境PyTorch 2.x OpenCV 4.xORB-SLAM3独立环境/系统OpenCV 3.4 Pangolin EigenPyTorch 训练独立 conda 环境CUDA 匹配驱动6. 前端与通用工具链Node、Vue3、Java、Maven不是每个人都只做 AI很多同学上手 Ubuntu 是为了做前端或者后端开发。这部分工具链比较独立我按顺序捋一遍。核心原则还是那个能隔离就隔离能换源就换源。6.1 用 nvm 管 Node别用 apt 装系统自带的 node 版本往往很旧而且用 apt 装的 node 权限和路径都容易出问题。我更推荐 nvmcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重开终端后 nvm install 18 nvm use 18 node -v如果上面那个地址拉不动也可以从 gitee 上找 nvm 的镜像脚本。装完别忘了给 npm 换源npm config set registry https://registry.npmmirror.com。做完这两步npm install的速度会有质的差别。6.2 Vue3 项目初始化从 create-vue 到跑起来Node 就绪之后Vue3 现在主流是用 Vite 起项目npm create vuelatest my-project cd my-project npm install npm run dev浏览器打开提示的本地地址能看到 Vue 的欢迎页环境就通了。这里最常见的坑是 Node 版本太低导致 Vite 装不上或者跑起来报ERR_OSSL之类所以前面强调用 nvm 装个 18 或以上的版本。另外mkdir建项目别建在中文路径或者带空格的目录下某些构建工具对此不友好。6.3 Java 和 Maven环境变量是绕不开的一课sudo apt install -y openjdk-17-jdk java -versionMaven 可以去官网下二进制包解压后配环境变量sudo vim /etc/profile # 末尾追加 export MAVEN_HOME/opt/apache-maven-3.9.6 export PATH$MAVEN_HOME/bin:$PATH # 保存后 source /etc/profile mvn -vMAVEN_HOME指向你实际解压的目录别照抄我的路径。配完记得source一下或者重开终端很多人忘了这一步然后在那怀疑人生。Maven 依赖下载慢的话改一下settings.xml里的中央仓库镜像国内一样有很多稳定镜像可用。7. ROS Noetic 与 ORB-SLAM3机器人方向的深水区如果你的方向是机器人、SLAM、自动驾驶Ubuntu20.04 几乎是标配因为它对应的正是 ROS Noetic。这一套装起来比前面都重也需要更多耐心但按流程走其实问题不大。7.1 ROS Noetic 安装源、密钥、rosdep 三步走先添加 ROS 源和密钥再安装sudo sh -c echo deb http://packages.ros.org/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list sudo apt install -y ros-noetic-desktop-fulldesktop-full会把 RViz、Gazebo 这些都带上虽然大但对机器人开发来说基本都要用。装完初始化 rosdepsudo rosdep init rosdep updaterosdep update经常因为网络问题失败多试几次或者换个时间段。最后把环境变量写进~/.bashrcecho source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc敲roscore能起来就算成功。装 ROS 这一步最常见的坑就是rosdep init提示文件已存在那是因为你之前装过直接跳过就行不影响。7.2 ORB-SLAM3 编译Pangolin 和 OpenCV 版本是两道坎ORB-SLAM3 的官方文档写得比较简略实际编译会踩到几个固定的坑。依赖大致是Pangolin、OpenCV建议 3.4 或明确兼容的版本、Eigen3、DBoW2 和 g2o源码里自带。流程一般是先装 Pangolinsudo apt install -y libglew-dev libpython2.7-dev libeigen3-dev git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. make -j$(nproc) sudo make install然后编译 ORB-SLAM3 本体。这里最容易出问题的是C 标准和OpenCV 版本ORB-SLAM3 老代码默认用 C11遇到新版 OpenCV 的 API 变化就会报错。常见解法是在CMakeLists.txt里把-stdc11改成-stdc14甚至c17同时确认 OpenCV 版本与之匹配。7.3 编译报错时我一般按这个顺序定位编译报错一屏红新手容易慌。我的定位顺序是看第一个错误不要从最后一行往上看最后一行往往是错误连锁反应的结果优先怀疑依赖库版本OpenCV、Eigen、Pangolin再怀疑C 标准最后才去看代码本身。我见过最典型的一个报错是undefined reference to cv::...看着吓人其实就是链接到了错误的 OpenCV 版本。用pkg-config --modversion opencv和opencv4分别确认一下版本把 CMake 里find_package(OpenCV 3.4 REQUIRED)写清楚问题往往就消失了。8. VSCode 与中文输入法把日常体验补齐环境装得差不多了最后一步是把用起来舒服这件事做好。这部分不属于必须但直接影响你每天敲代码的心情。8.1 VSCode 的 C/C 和 Python 配置VSCode 去官网下.deb包sudo dpkg -i装上。接下来装扩展C/C、Python、还有 CMake Tools。C/C 环境的核心是三个文件c_cpp_properties.json管头文件路径和编译器tasks.json管编译launch.json管调试。对于初学 C 语言的同学用gcc直接编译单个文件其实不需要太复杂的配置但一旦项目里有多个文件或者用到第三方库c_cpp_properties.json里的includePath就非常关键漏一个路径就是满屏红波浪线。Python 环境这块重点是让 VSCode 用对你 conda 里的解释器。左下角点一下就能切换或者用命令面板Python: Select Interpreter选中你前面创建的环境。很多人抱怨我明明装了包却提示找不到十有八九是 VSCode 用了系统 Python 而不是 conda 环境。8.2 中文输入法的妥善安装方式Ubuntu20.04 默认的 iBus 中文输入体验一般我一般换成 Fcitx5 或者搜狗。以 Fcitx5 为例sudo apt install -y fcitx5 fcitx5-chinese-addons im-config -n fcitx5配置完重启然后在 Fcitx5 的设置里加拼音输入方案。搜狗的话要注意它和 fcitx 的版本匹配装错了会导致输入法整个不工作。我自己的偏好是 Fcitx5 配拼音干净稳定不依赖第三方。8.3 一个容易被忽略的收尾动作备份你的配置折腾到这一步你已经有一台可用的开发机了。最后我强烈建议做一件事把你这套配置的清单记下来。哪些 apt 包、哪个 conda 环境、版本号各是多少简单记在一个文本里。下次重装你就不用再经历一遍想起来一个装一个的痛苦了。我自己有一份setup.md每次重装照着走三小时搞定连搜命令的时间都省了。踩过无数次坑之后我最大的体会是Ubuntu 重装这件事真正难的不是某一条命令而是顺序和取舍——先做什么后做什么哪些必须做哪些可以缓哪些环境必须先隔离。把顺序理顺了剩下的无非就是复制粘贴和耐心等待。下次再遇到黑屏、没声音、CUDA 不匹配这些破事希望这篇东西能让你少走点弯路。
返回列表