这是我第3次安装debian和第4次安装cuda,以往几次我都把出现的问题一一记录在案,以为这次应该是一帆风顺,没想到还是遇到了不少问题,因此我觉得有必要完整的把整个流程记录分享一下。不过我也是一个只用了linux一年的新手,所以文章中有不全面,不正确的地方,请多多包涵,可以在评论中告诉我。
硬件
cpu: AMD R5 2600x
主板:MSI B450M MORTOR MAX 迫击炮max
内存:金士顿骇客神条16*2 = 32G
硬盘:西数SN750 500G,插在第一个m.2口
显卡:MSI GTX 1070
之前一直听说人什么amd的u装linux有问题,我没有遇到关于u方面的问题。
安装Debian 10.2
1. 下载dvd-iso
我安装的时候已经有10.3了,如果要选择过去的版本,比如我用的10.2(个人喜欢双数的版本),可以去 http://cdimage.debian.org/cdimage/archive/10.2.0/amd64/iso-dvd/ 去下载。我就下载了debian-10.2.0-amd64-DVD-1.iso。后面两张盘没有下。
2. 做usb启动盘
我用的是rufus-3.5.exe,这是windows下的工具。我不知道如何在linux下做usb启动盘。好像是用dd命令?
3. 安装
用u盘启动,我选择graphical install。locale 我个人选择的是英语,没有选择中文,这个可以根据你自己的情况来。
问题1:网卡Intel 1219-v驱动找不到的问题
这块主板没有这个问题,很顺利的被认出,然后继续下去。但是在我另外一块主板MSI MPG Z390 GAMING PRO CARBON和asus b360m plus上,板载网卡都是Intel 1219-v 这块网卡,在安装过程中是找不到的。
解决方法:
1. 跳过网络配置安装完系统
首先跳过网络配置,继续安装,把系统安装上,图形界面随便选一个,我用了gnome,其他的我没用过,不会用,然后重启进系统。
2. 把cdrom 作为源
下载3张debiandvd-iso(可能第一张就可以用了,但是我用了3张)。然后把这3张dvd-iso拷贝到u盘中,插到debian的机器上,系统会自动识别可移动设备,在/medie/你的用户名/ 下就是u盘的内容。然后用apt-cdrom add 这个命令来把cdrom作为源。这时候程序会先把/media/cdrom umount掉。所以你要再开一个terminal来把第一张dvd mount起来。mount /media/你的用户名/debian-10.2.0-amd64-dvd-1.iso /media/cdrom 这个是默认的,如果不是这个位置,则可能要在/etc/fstab里面设置。mount好了到apt-cdrom add这里按回车,程序就会读取dvd里面的索引。
读完之后它会继续umount,然后依次mount 第二张,第三张dvd. 有了这三张dvd的内容,就可以用apt-get intall 来安装程序了。
3. 编译intel e1000e驱动
去intel的主页下载这个驱动包。这个驱动可能包含在pro1000这个大的驱动包里面。目录是23_5_2/pro1000/linux/e1000e-3.4.2.3.tar.gz 。用tar -xvf e1000e-3.4.2.3.tar.gz 解包。
然后sudo apt-get install build-essential。到e1000e/src/目录中运行make intall 不过首先建议看一下README文件,我就按照它里面写的做的。一般来说会make失败,提示要kernel-devel 这是要安装linux-header
$ apt-cache search linux-headers-$(uname -r)
用这条命令可以找到当前系统的头文件版本号。找到后sudo apt-get install linux-headers-$(uname -r)即可。 有了这两个就可以完成变异了。
然后驱动安装到了README说的目录,然后modprobe e1000e,过一会儿lsmod |grep e1000e就有了。此时不要ip addr add 因为网卡可能不是eth0,重启,会自动好的。
问题2:国内的mirror实在慢(仅仅我的情况)
安装过程中自动装好网卡驱动后,会自动获取网络地址,然后就要提示是否选择mirror来下载数据。我坐标魔都,电信200M光纤,不选mirror 始终在检测网址中,选择mirror,我尝试了清华的,网易的,debian.org.cn的,lzu(兰州大学),huaweicloud的,没有一个快的,如果之后选了gnome,huaweicloud安装了5个多小时都没有完成,我实在受不了,reset了。其他几个也都尝试了一下,花去了一整天。
我不知道你的情况怎么样,可能你和我不在一个城市,或者你的网速较快,或者你是校园网,那么应该就不会有我的问题,后面不用看下去了。
解决方法:
拔网线,反正网卡驱动能自动装上,DHCP程序能保证以后插上网线就能连上网,所以安装过程一开始就拔了网线,全部通过cdrom来安装。安装程序在装完网卡驱动后会尝试联网,连不通会提示,这里选择继续以后设置网络,安装下去即可。选mirror的时候选no,后面就很快,在sn750上安装只要3,4分钟即可完成。
安装完后重启进系统,把源改成你用过的比较快的源就行了。我用的是aliyun的源,速度飞起来。
问题3:硬盘分区
如果是和我一样的新手,我建议就用推荐的方式,整个硬盘全部挂载到/完事。
如果想要分出/home , /tmp, /var 则一定注意把/tmp分大一些,在我的配置上,/tmp自动分了2G,结果我之后安装cuda的时候告诉我/tmp 不够,无法继续安装。我又不会分区,所以。。。只能重装了。所以/tmp应该分多大,我也不知道,你得自己试试了。或许你的硬盘比较大,/tmp默认 分得大一些,就不会遇到这种坑,这个我也不知道。
安装完毕后简单设置
安装完之后重启进系统,我会做一些简单的设置,我的桌面是gnome,所以下面的设置可能不一定适合你。
4.1 添加一个快捷键启动gnome-terminal
我习惯用ctrl+alt+t来启动gnome-terminal,因此首先按win键,然后在最上面的type to search里面输入keyboard,进入keyboard->shortcut中,到最后添加一个自定义的快捷键。
4.2 添加sudo
因为我的用户还不是sudo组的,所以无法用sudo。
su 成为root
chmod +w /etc/sudoers 之前是只读的
在root ALL=(ALL:ALL) NOPASSWD:ALL下面添加一模一样的一行,用户名改成你的用户名, 这样不用每次输入密码。
保存好之后要变回只读,退出su
4.3 修改/etc/apt/source.list ,修改源。
sudo vi /etc/source.list (此时还没有vim,只能用vi),把cdrom的那一行注释掉。把源改成你觉得比较快的源。我这里是aliyun比较快。
deb http://mirrors.aliyun.com/debian/ buster main contrib non-free
deb-src http://mirrors.aliyun.com/debian/ buster main contrib non-free
deb http://mirrors.aliyun.com/debian-security buster/updates main contrib
deb-src http://mirrors.aliyun.com/debian-security buster/updates main contrib
deb http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
deb-src http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
改好之后sudo apt-get update一下,更新一下大约几秒钟就可以完成。
安装cuda10.0
我用的版本是cuda_10.0.130_410.48_linux.run ,从nvidia网站上可以下,那些相关的文档可以看下,有不少有用的信息。
在因为是run文件,所以用chmod u+x加上可执行的权限。
sudo ./cuda_10.0.130_410.48_linux.run 提示需要在字符界面安装。
1. 进入字符界面
debian 已经用systemd代替了intitab
所以systemctl 才是该用的工具。
运行sudo systemctl set-default multi-user.target之后 sudo shutdown -r now 重启(ps,linux的关机比win真是快了N倍)
待会儿装好cuda之后用
sudo systemctl set-default graphical.target 回到图形界面,因为我基本上全部是debian下工作的,所以需要图形界面。
2. 安装cuda10.0
整个安装分为三个部分,Nvidia显卡驱动,CUDA toolkit, CUDA SAMPLE。前两个必须装,第三个是选装的。
前置要求,安装gcc
sudo apt-get install build-essential
debian10.2安装的是gcc 8.3.0版本。在nvidia的readme里面会要求gcc 是7.0的版本,我尝试过7.5也可以用。但是8.3后面会出warning,我会说怎么过。
安装过程中可能遇到的问题
问题1: Nouveau Driver is in use
遇到错误 Nouveau Driver is in use, not compatible with nvidia’s driver, must disable。。。。reboot。。。
官方文档https://us.download.nvidia.cn/XFree86/Linux-x86_64/410.48/README/commonproblems.html#nouveau里面提到驱动程序会主动帮我disable nouveau,
去/etc/modprobe.d/目录看一下,会有一个nvidia-blacklist-nouveau.conf文件,这就是cuda做的黑名单文件。并且出错信息提示需要重启后再运行安装程序。
我们重启一下,此时再次运行#lsmod |grep nouveau,会发现还是有的。则必须更新initramfs,这里可能配置为加载nouveau驱动程序。运行
sudo update-initramfs -u
会发现一堆possible missing xxxx nouveau,我没管他们。然后重启,这回lsmod|grep nouveau 应该没有了。
==========================================
下面是网上的信息,或许已经过时了。
先把驱动加入黑名单中: /etc/modprobe.d/blacklist.conf
在后面加入:blacklist nouveau然后重新启动
问题2:
Installing the NVIDIA display driver... The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed and set up correctly. If you know that the kernel source packages are installed and set up correctly, you may pass the location of the kernel source with the '--kernel-source-path' flag.
这个问题是无法编译kernel。ls /usr/src目录,什么都没有。问题就出在这里了,没有头文件如何编译呢?
运行 uname -r 看一下自己的内核编号,然后下载安装对应的头文件即可。debian10.2是4.19.0.6-amd64 所以我们只要运行
sudo apt-get install linux-headers-4.19.0.6-amd64
装好头文件这一个问题就算过了。
========================================也有其他的可能性,比如在老机器中安装,在/usr/src/ 中会看到很多版本的头文件,程序就不知道要用哪个头文件来编译了,这时候安装程序的log中会建议用dkms来动态编译,这种情况下可以
sudo apt-get install dkms
但是有时候还是不行,比如我的/usr/src/中的头文件编号是4.19.0-8-amd64, 运行uname -r 看到的是4.19.0-6,所以头文件版本号高了。恐怕dkms只能选择向下动态编译,而不能向上。或者没有头文件,也不能编译。
因此只要安装对应的头文件就行了。
sudo apt-get install linux-headers-4.19.0.6-amd64
问题3:kernel source tree missing
可以通过 sudo apt-cache search linux-headers-$(uname -r)来查找头文件
首先确定自己的kernel版本,用 uname -r可以看到。这里是debian10.2对应的是4.19.0-6-amd64。
如果你是用debian 9或者debian10.0 会发现kernel版本不对。比如4.19.0-5 而 apt source这里都是4.19.0-6,因此你不得不升级kernel。 首先搜索内核
sudo apt-cache search linux-image
然后安装其中一个,我装的就是这个,跟原来的几乎相同。
sudo apt-get install linux-image-4.19.0-6-amd64
然后卸载原来的,只要输入linux-image打tab即可,出现警告选no
sudo apt-get remove linux-image-4.19.0-5-amd64
卸载完了重启即可
问题4:Error: unsupported compiler 8.3.0 use --override to avoid this check.
报错gcc8.3.0 不符合要求。但是错误信息上面提示了可以尝试用--override来避免出错,因此重新运行命令
.//cuda_10.0.130_410.48_linux.run --override
这样就不会报错了。
我以前也尝试过降级gcc,因为在buster的库里面gcc最低好像是7.5,还是比cuda 10.0 要求的7.0高。但是大版本是7就可以过了。现在用--override就不需要降级了。
顺利安装完,程序会提示
安装好后的确认
Please make sure that
-- PATH includes /usr/local/cuda-10.0/bin
-- LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64 or add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
首先编辑/etc/profile 把/usr/local/cuda-10.x/bin 加入path。
然后下一行照着做一下即可。
然后运行nvidia-smi 出现如下的信息就是ok了。
回到图形界面后,需要运行nvidia-xconfig
sudo nvidia-xconfig
会提示修改了什么东西,我就没有仔细看。