CentOS7配置nvidia驱动远程桌面cuda8matlab和tensorflow

时间:2022-01-10 13:55:17
装机,说多了都是泪

多么痛的领悟


在DELL主板、至强cpu的机器上装ubuntu,失败,提示磁盘不能识别,分区失败

在该机器上装fedora,安装过程中失败

在该机器上装slackware。卡在校验上

在该机器上装RHEL成功,删除原yum,去 http://mirrors.zju.edu.cn/ 下载centos的yum安装成功,执行yum update后机器自动重启,再也点不亮了

在该机器上装minimal、normal、everything版本的centos都失败

安装centos时遇到问题“this media is not good to install from”:

根据centos社区提交bug的帖子,此问题是linux live usb creator 与 fedora live usb creator等软件问题,原因是其制作的U盘内字节顺序与iso文件不完全一致,存在转换格式的自动行为。正确的行为是要直接用dd命令按字节写入U盘。用win32imager软件才可以正确制作启动盘。

为GTX1080安装英伟达驱动


http://www.dedoimedo.com/computers/centos-7-nvidia.html

https://www.linkedin.com/pulse/20140808222919-219659043-rhel-centos-7-and-nvidia-drivers [参考有效]

https://linuxconfig.org/nvidia-geforce-driver-installation-on-centos-7-linux-64-bit [参考有效]

切换图形界面与命令行界面

用该命令设置启动等级

systemctl set-default multi-user.target
systemctl set-default graphical.target

无法进入文本模式,无法进入多用户模式,屏幕全黑,没有登陆提示符。

将网络连接设置成开机自动联网,配置静态ip,用ssh登陆操作吧。

设置自动联网


原文来自 http://www.cnblogs.com/xcxc/p/3186130.html

在命令行下输入

下面的ifcfg-eth0,eth0为我的网卡名字。机器之间不同,请先查看自己网卡的名字

vi
/etc/sysconfig/network-scripts/ifcfg-eth0

进行如下修改

DEVICE=eth0
#描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址BROADCAST=192.168.0.255
#对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4
#对应的网卡物理地址
IPADDR=12.168.1.2
#如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
IPV6INIT=no //可以加上,也可以不加IPV6_AUTOCONF=no//同上NETMASK=255.255.255.0
#网卡对应的网络掩码
NETWORK=192.168.1.0
#网卡对应的网络地址
ONBOOT=yes
#系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备

 修改网关的配置文件为:/etc/sysconfig/network

vi
/etc/sysconfig/network

 修改以下内容

NETWORKING=yes(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动) HOSTNAME=localhost(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)GATEWAY=192.168.1.1(设置本机连接的网关的IP地址。)

 添加dns的配置文件:/etc/resolv.conf

vi
/etc/resolv.conf

 加入电信的dns服务器

nameserver
222.85.85.88
nameserver
222.88.88.88

 重新启动网络配置

service
network restart
然后用secureCRT8远程登陆,下载 http://xx.139.6122.net/2017/SecureCRT.rar卸载nouveau后出现了正常的纯字符登陆界面,之后成功安装英伟达驱动。
搞出一些用户
可以用 system-config-users 管理用户useradd 比较底层,推荐用adduser命令,更加人性化
adduser -mUu1003 -G wheel,cilab wangjun 
创建个人目录、创建同名组并作主组、指定用户id为1003、额外加入组wheel和cilab、用户名wangjun
adduser -mUu3002 -s /sbin/nologin xxx 禁止登陆
详见 http://www.computerhope.com/unix/adduser.htm
VNC!
在centos7上安装vnc服务器 http://www.krizna.com/centos/install-vnc-server-centos-7/用 /lib/systemd/system/vncserver@.service 作为模板复制到/etc/systemd/system/vncserver@:5.service 并修改里面<USER>值,就定义了5900+5=5905端口上的服务然后
systemctl start vncserver@....

安装tiger-vnc或xrdp后,需要批量地开端口,用如下命令
firewall-cmd --permanent --zone=public --add-port=5900-5920/tcp
firewall-cmd --reload

安装了vncserver,,发现无法连接,报错

Xlib: extension "GLX" missing on display ":0".
根据nvidia网站论坛:https://devtalk.nvidia.com/default/topic/965466/linux/centos-7-nvidia-740-and-tigervnc-server-not-working-together/
此问题无解,要么不要用官方驱动,要么别想装VNC。安装了xrdp,发现无法连接。经过一番探索,xrdp后台直接调用了vnc功能,vnc不好使别的都不好使(http://www.cnblogs.com/tutuye/p/3746289.html)我草泥妈啊!
查看当前使用的WINDOW MANAGER是kde还是gnome
echo $DESKTOP_SESSION
发现是gnome-session,稍后改成kde吧。
FTP
FTP服务器程序vsftpd
systemctl start vsftpd.service
systemctl enable vsftpd.service
man vsftpd 一下就可知道它的conf文件在哪。
conf文件字段含义见 http://vsftpd.beasts.org/vsftpd_conf.html之后连接ftp出现错误如下响应:500 OOPS: chroot
错误:严重错误:无法连接到服务器
有说和seccomp_sandbox=NO 有关(http://www.cnblogs.com/vinozly/p/5024502.html)ubuntu不加上面这句的话会有莫名其妙的530错误还说和allow_writeable_chroot=YES有关亲测没用据说和selinux安全策略有关 (http://blog.csdn.net/sunxiaoju/article/details/46280011)
登到服务器上真的发现selinux troubleshoot了,说vsftpd 有 dac_override行为,被禁止。用下面方法(http://blog.csdn.net/bhghost/article/details/47312861)
getcap \ setcap cap_dac_...+ep /usr/sbin/vsftpd
后没效果, 根据selinux troubleshoot程序的提示,给ftpd赋予了豁免权后,能连接了,但是不能获得目录。一番查找后发现,初步原因是网卡没有转发ftp请求,这种转发到localhost端口的ftp请求是一个叫ip_nat_ftp的模块服务的,结果它没有自启动(http://qq100002656.blog.163.com/blog/static/11890173620127220851161/)
modprobe ip_nat_ftp
 可以暂时解决问题(http://www.cnblogs.com/lonelywolfmoutain/p/6108665.html)启动即加载模块需要如下设置,修改
vim /etc/sysconfig/iptables-config 里面  IPTABLES_MODULES="ip_nat_ftp"
之后ftp终于正常了用chattr修改文件夹和文件的读写创建删除权限(https://linux.cn/article-5590-1.html)如果使用filezilla出现不能读取目录情况,则根据此设置即可(http://www.jb51.net/softjc/134785.html)为vsftpd设置SSL证书,加密连接(http://www.binarytides.com/vsftpd-configure-ssl-ftps/ 亲测有效)问题来了,正常地用了一阵FTP后,突然发现FileZilla不能列出根目录了!
响应:200 Switching to Binary mode.
命令:PASV
响应:227 Entering Passive Mode (10,214,164,248,135,244).
命令:LIST
错误:20 秒后无活动,
连接超时
错误:
读取目录列表失败
这TM什么鬼!!!
一番探寻原来是配置中没有显式指定PSV模式的端口,防火墙也没打开端口。依照以下网址修改后一切运行正常。http://*.com/questions/4723023/vsftpd-error-listing-directories

一些维护指令
w

可以查看当前活跃的用户列表
cat /etc/passwd

可以查看所有用户的列表
在系统中查找so等文件,用locate指令,用之前最好updatedb
netstat -antup | grep 5901  查看端口是谁占用
ps -au | grep 15476 查看15476进程是谁的

继续VNC!
据说使用kde可以消除vnc不好使的现象。先将 ~/.vnc/xstartup 改成这样
#!/bin/sh
unset SESSION_MANAGER
#unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc
xrdb $HOME/.Xresources
xsetroot -solid grey
startkde &
然后发现kde依然不能启动,因为:startkde: Call to lnusertemp failed (temporary directories。。。它非要往/run/users/0/XXX下面找,但是却说XXX不是文件夹,XXX明明是文件夹啊!!!这一定是因为权限问题,因为USERS下面的数字代表登陆了的用户id,一个运行在普通用户状态的vncserver为什么非要写在root用户的0文件夹呢??我上网搜lnusertemp这个程序,发现它主要为tmp、cache、socket创建链接,刚开始还找不到lnusertemp在哪儿,用locate找到了。而以下两个环境变量控制了这些链接放到哪里
KDETMP=/tmp
KDEVARTMP=/var/tmp
但是问题来了,我手动设置上述变量,然后再/usr/libexec/kde4/lnusertemp socket发现并不生效!!!骗我!!!我*!!!!!!然后我意识到,根据.vnc/xstartup中自己得配置,调用了startkde脚本启动kde的,那么错误也应该出自那里,并且命令也是在那里调用的。所以我locate startkde,然后vim打开它,查找lnusertemp,查到如下几行:
lnusertemp=`kde4-config --path exe --locate lnusertemp`
if test -z "$lnusertemp"; then
# Startup error
echo 'startkde: ERROR: Could not locate lnusertemp in '`kde4-config --path exe` 1>&2
fi


# Link "tmp" "socket" and "cache" resources to directory in /tmp
# Creates:
# - a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME to it.
# - a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
# - a directory /var/tmp/kdecache-$USER and links $KDEHOME/cache-$HOSTNAME to it.
# Note: temporary locations can be overriden through the KDETMP and KDEVARTMP
# environment variables
for resource in tmp cache socket; do
if "$lnusertemp" $resource >/dev/null; then
: # ok
else
echo 'startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
message "Call to lnusertemp failed (temporary directories full?). Check your installation."
exit 1
fi
done


这几行里说明了就是要改KDETMP and KDEVARTMP才对,那老子就给你改!老子就在这里改!改成这样:
lnusertemp=`kde4-config --path exe --locate lnusertemp`
if test -z "$lnusertemp"; then
# Startup error
echo 'startkde: ERROR: Could not locate lnusertemp in '`kde4-config --path exe` 1>&2
fi


# Link "tmp" "socket" and "cache" resources to directory in /tmp
# Creates:
# - a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME to it.
# - a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
# - a directory /var/tmp/kdecache-$USER and links $KDEHOME/cache-$HOSTNAME to it.
# Note: temporary locations can be overriden through the KDETMP and KDEVARTMP
# environment variables
KDETMP=/tmp
KDEVARTMP=/var/tmp
echo 'so far so good!'
for resource in tmp cache socket; do
if "$lnusertemp" $resource >/dev/null; then
: # ok
else
echo 'startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
message "Call to lnusertemp failed (temporary directories full?). Check your installation."
exit 1
fi
done


登陆普通用户,重启vnc 
vncserver -list
vncserver -kill :1
vncserver
换一台机器连接一下
CentOS7配置nvidia驱动远程桌面cuda8matlab和tensorflow
好使了。过了半天之后,
又不好使了!!!这个垃圾lnusertemp程序就是非要往人家root用户的目录里写!有病啊你!!!我在startkde里铺满了KDETMP KDEVARTMP的设置,依然不好使!!一番探索发现root自己能登陆。废话!!!人家/run/user/0目录就是人家root的!你也不能开放root账户用来远程vnc啊!!最终发现,切换到个人用户后,必须要用 
systemctl start vncserver@:2.service
这种命令才能正确启动。终于好使了,终于好使了吧?手工生成.Xauthority(https://ubuntuforums.org/showthread.php?t=1386329 亲测可用)
server@server:~$ HOST=`hostname`
server@server:~$ key=`perl -e 'srand; printf int(rand(100000000000000000))'`
server@server:~$ key=$key$key
server@server:~$ xauth add ${HOST}/unix:0 . $key



装CUDA8.0
啊!缺少libGLU.so 缺少libglut.so缺少。。。。。于是我挨个搜yum search libGLU  libglut libXi搜到以后都下载本体,外加下载devel。然后好使了!个屁!进入cuda样例编译时总说libGL.so不兼容,(ignoring incompatible library)然后说 -lGL option is not found or not supported我在/lib/ 和 /lib64/下分明就有我依次用file命令查看这些so文件,终于发现/lib64/libGL.so指向的1.2.0库不存在,是一个坏链接。我把它重新连接到存在的1.0.0上就能编译过了。啊啊啊啊啊啊啊之后又在机器上安装了matlab2016b配合vnc用,还是美滋滋的。明天装tensorflowtensorflow

运行CentOS自带的pip2,直接Trackback跑错,全崩,什么_call()传的参数应该是2个但是就给了一个。

SB!劳资动都没动,你自带的就是坏的pip2。
那么我就安装了py3,然后再yum安装pip3。
用pip3 升级 pip2,升级完后好用了。
再pip install tensorflow 就好了。

运行一下计算,用以下命令查看gpu情况

nvidia-smi
MATLAB

这个比较好装,整上就能用,但是一直提示在使用software rendering,这就讨厌了,根据此帖,可以使用如下命令启动matlab。

matlab -nosoftwareopengl

但是在Matlab里一运行 opengl info  opengl hardware,就总报错

。。。。。MATLAB has experienced a low-level graphics error。。。。。。。。

运行了tensorflow一个月后,发现一些警告,比如缺少FMA指令集加速,这让我想从源代码编译一下tensorflow
那么先搞一个快一点的底层代码:去computecpp官网,注册一个免费用户,下载computecpp。这个用作openCL加速。去intel developer官网,注册一个免费用户,下载MKL数学加速库。再从intel下载他们加速的python3.5。都是免费的然后看此文章 编译步骤

安装scl之后,要手动用yum安装python的附加工具包

yum search all | grep python

在这里面找python35 或者27有关的scl包,两个都装上就好。


HP 打印机


去惠普官网搜打印机型号,惠普说我们把你送到别的连接,马上就送,然后TM的什么都不做。

自己发现此网站是HPlinux驱动页面: http://hplipopensource.com/hplip-web/index.html

安装完成后提示要下载插件,但是中国一直没网速,经历了3小时查找后,在WWW的一个角落里发现了这么一个网址:
http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/

天啊!赶紧下载吧!!

 一些教程:

http://www.hplipopensource.com/hplip-web/install/manual/distros/centos.html

http://www.hplipopensource.com/hplip-web/install/manual/hp_setup.html





附录
xrdp 的一些坑:http://www.therebel.eu/2015/01/getting-xrdp-from-git-to-work-on-rhel7-centos-7/
使用xrdp,gnome时的xstartup内容(http://www.cnblogs.com/burningroy/p/3591649.html)
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session-fallback &
#x-window-manager &