0. 前言
坑爹的Ubuntu晚上运行还是好好的,第二天中午的时候打开机器发现屏幕分辨率不正常了:2K屏显示800*600左右的分辨率(无法调节),一个图标一拳头大,窗口和网页显示不全。Google查了一下发现可能是nvidia显卡驱动坏了(真的脆),照着几个博客搞了一下还尼玛进不去系统,一直循环登录了???之后又折腾了一整个下午,最后的结果是,重装显卡驱动一直失败:PPA装显示connect不上、run文件装显示build kernel module error。反正我也是不管什么奇怪的配置问题都能遇上,破系统破摔,正好没有Win10,重新装一个双系统。(本文安装配置过程仅作个人参考)
1. U盘启动盘制作
1.1 系统下载
Win10的系统从MSDN下载,选择 consumer edition version 1803 x64:
Ubuntu从官网下载Desktop 16.04 LTS即可(貌似是比18.04稳定?)
1.2 制作启动盘
下载UltraISO,文件 -> 打开 -> 选中iso文件,启动 -> 写入硬盘镜像 -> 写入方式:USB-HDD+ -> 写入,制作完成。
2. 安装系统
2.1 安装顺序
这次双系统先安装Win10,之后再安装Ubuntu。主要有两个原因:
(上图来自鸟哥的Linux私房菜,几句话看得不是很懂,本科买的CSAPP还是得看起来了...)
其次,现在唯一的系统坏了,相当于是裸机,安装Win10之后方便后续的磁盘分区。
2.2 安装 Win10
因为主板是华硕的,好像新版的 UEFI 操作确实都比老的 Legacy 方便。先关闭 启动 这一项中的 安全启动(需要删除密码)和 快速启动,不是很清楚原理,但既然很多贴子都这么说,还是照做保险。再按 F8,选择 U盘 前带 EFI 的那一项,就能进入安装引导。接着引导会询问安装在哪一个分区,有的分区不能安装,这时候把所有的分区删了,合成一个大分区,之后可安装成功。之后进行分区,使用DiskGenius,分给C盘128G,D盘2T,剩下的分区用 Win10 自带的磁盘管理删除变为空闲空间,方便安装 Ubuntu 系统时辨别(中间无盘符区域为留给 Ubuntu 的空间):
2.3 安装 Ubuntu
同 Win10, 选择带 EFI 的 U盘启动项。选择 try Ubuntu without installing,可以先随便用一下系统,连接网络等,之后再在图形界面中选择安装 Ubuntu 16.04 LTS。注意不要勾选安装 Ubuntu 时 下载更新和安装第三方软件这两项,可能会导致安装最后的“执行安装后执行触发器 update-notifier-common”卡住(最后拔了网线才安装成功)。接着引导提示:已经安装了 Windows 10,此时勾选“其他选项”。
再之后是对系统分区,选中空闲区域,点击 + 号,根据我的环境,空间分配如下:
**安装启动引导器的设备:/boot 所在的分区**,点击“现在安装”。最后坐等安装完成,重启,拔 U盘。有的博客还有用 EasyBCD 在 Win10 里面添 Ubuntu 引导,但我重启之后发现已经可以在两个系统之间(Ubuntu、Windows Boot Manager)切换了,华硕主板(UEFI)的特点?反正目的达到了,至此双系统安装完毕。
3. 安装 Ubuntu NVIDIA 显卡驱动
(司马显卡驱动)
3.1 下载 run 文件
不建议通过 ppa源 安装,因为你无法配置具体选项且成功后需要经常手动更新驱动。
官网选好分类之后下载 run 文件,并将其复制到英文目录下,因为切换到 tty 下之后,中文全都变成实心方块,辨认不出目录。
3.2 卸载旧驱动
没有安装过 NVIDIA 驱动的主机可以省略:
sudo apt-get remove --purge nvidia*
# 卸载对应版本号
# sudo ././NVIDIA-Linux-x86_64-390.48.run --uninstall
sudo /usr/bin/nvidia-uninstall
3.3 安装各种依赖
不是很清楚,反正照着安装就vans了
sudo apt-get update
sudo apt-get install dkms build-essential linux-headers-generic
sudo apt-get install gcc-multilib xorg-dev
sudo apt-get install freeglut3-dev libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
3.4 禁用 nouveau
应该是将 ubuntu 自带的显卡驱动加入黑名单?
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
# 添加以下代码:
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
# 保存
# 禁用nouveau 内核模块
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
sudo update-initramfs -u
reboot # 重启
lsmod |grep nouveau # 无显示则成功,驱动没了桌面分辨率会比较大
3.5 关闭 secure boot、fast boot
安装系统时已经关闭
3.6 在 tty 中安装显卡驱动
按 Ctrl+Alt+F1 进入 tty1,输入用户名、密码(无回显),之后暂停图像输出服务:
sudo service lightdm stop
# 安装驱动
chmod a+x NVIDIA-Linux-x86_64-390.87.run
sudo ./NVIDIA-Linux-x86_64-390.97.run --dkms --no-opengl-files
之后出现的 pre-script failed 是确保用户真的要安装驱动,属实睿智。接着 dkms 选 yes,32 位兼容选 yes,x-org 选 no。最后居然没有出错,我哭了,前面被各种 build error 搞出心里阴影了。
sudo service lightdm start # 重启服务
nvidia-smi # 输出 GPU 信息代表安装成功
4. 配置 cuda 和 cudnn
4.1 配置 cuda
由于项目需要且目前深度学习框架都支持了 cuda9.0,因此从官网下载 cuda9.0 的 run 文件安装,下载完成后输入:
sudo sh cuda_9.0.176_384.81_linux.run
输入 accept 之后开始安装,依次选择不装驱动、安装 cuda、建立链接、不装 sample。
添加路径:
sudo gedit ~/.bashrc
# 添加下面三行
# add for cuda9.0
export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
source ~/.bashrc
nvcc -V # 查看 cuda 是否安装成功
4.2 配置 cudnn
安装cudnn比较容易,同样从官网下载(需注册账号)。下载 cuDNN v7.1.4 Library for Linux,完成后选择提取到此处,得到一个 cuda 文件夹。执行以下命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
之前看到很多博客在这步之后都添加了软链接,不是很理解。后来发现上面命令中第二步就是将 lib64 文件夹中的文件复制到 /usr 目录下,而在 lib64 中的三个 libcudnn.so 文件,其中两个都是软链接,只有 libcudnn.so.7.1.4 是最终的的文件:
而复制到 /usr 下的三个 so 文件已经没有了这种链接关系(可能是cuda文件夹也是软链接的原因?),因此需要 rm 之后重建:
```sh
sudo rm libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.4 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
```
---
5. 安装 anaconda
官网上只有 Python 3.7 版本的了,但是以前安装的库好像都是说在3.6的环境下测试的。对于怎么下载之前的版本,网站是这么说的:
There are three ways to get Anaconda with Python 3.5 or 3.6:
- We recommend that you download the latest version of Anaconda and then make a Python 3.5 (or 3.6) environment.
- Or download the latest version of Anaconda and run the following command to install Python 3.5 (or 3.6) in the root environment:
conda install python=3.5
orconda install python=3.6
- Or download the most recent Anaconda installer that included Python 3.5 (Anaconda 4.2.0) or Python 3.6 (Anaconda 5.2.0).
感觉前两条说的挺有道理,我信了,还是下载新版。不过官网下的速度很慢,可以在 Win10 下用迅雷下载 Linux 版,再拷过来安装。
运行bash Anaconda3-5.3.0-Linux-x86_64.sh
即可。
再之后的 TensorFlow 和 PyTorch,都是一条命令完成。
6. 其他
有关 Linux 软件安装目录:
Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的
/usr:系统级的目录,可以理解为 C:/Windows/,/usr/lib 理解为 C:/Windows/System32。
/usr/local:用户级的程序目录,可以理解为 C:/Progrem Files/ 。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为 D:/Software,opt 有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接 rm -rf 掉即可。在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
7. 总结
一趟下来不容易,重装系统和重配环境之后,感觉比以前清白了一点,毕竟第一次装双系统。但也知道了自己有更多不懂的东西,比如装系统时的磁盘管理,uefi、grub、lagacy等各种名词,Linux 系统的整体了解等等,还是计组没学好的锅。不过因为是一步步采坑搭起来的,感觉现在这个系统更亲切了,就算以后再出问题也不会慌了。