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

多么痛的领悟

在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盘。用win32DiskImager软件才可以正确制作启动盘。

Win32DiskImager要img格式的输入?什么鬼?我只有ISO,谁tm有img。查了发现用UltraISO打开ios文件,另存为img格式就行了。

然后安装失败了!原来是UltraISO另存为img时,文件名不能有空格,否则会丢失100KB的数据,导致同步问题。

第二次安装centos7-1804版本时,上述方法也不行了,只能采用网络安装,安装地址的格式如下:

http://mirrors.zju.edu.cn/centos/7.5.1804/os/x86_64/

想使用网络安装的,要在centos镜像中找这种格式的位置才行。指向一个iso文件地址是不行的。

最终,发现linux/mac 的 dd命令制作安装盘是比较好的. 于是根据网上资料尝试如下命令:

查看有哪些设备被识别挂载了
mount
卸载设备,否则会提示正在占用无法写入,但是设备依然在/dev 中
diskutil unmount /Volumes/xxx
写入到目的u盘
dd if=Centosxxxx.iso of=/dev/disk2s1 bs=4M

失败,根本亮不起来. 查了半天才知道,disk2s1被挂到磁盘中,是因为它只是一个分区而已. 而iso内包含的内容要从u盘 0x00位置开始写入,也就是要连分区表一起覆盖, disk2s1不能代表整个盘, disk2 才表示整个盘. 向其写入信息的话,分区信息也都被覆盖了. 这就对了.

dd if=Centosxxxx.iso of=/dev/disk2 bs=4M

成功.

 


为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/[email protected] 作为模板

复制到/etc/systemd/system/vncserver@:5.service 并修改里面值,就定义了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吧。

 


继续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_第1张图片

好使了。

过了半天之后,

又不好使了!!!

这个垃圾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

我的妈啊用了一年之后VNC又tm的坏了。

客户端能正常启动vncserver,vncserver -list 也显示有vnc进程正常运行,但是使用vnc-gui远程连接服务器的时候,界面迟迟不出来,只显示一个警告:“dbus 无法链接,不信你尝试一下pdbus”。 我尝试了一下pdbus果然说无法找到dbus 的socket连接。

解决方案:

  在profile 或者 .bashrc 中加一句:

export $(dbus-launch)

之后把vncserver 关掉,vncserver@:x.service 统统删了重新建立,重开vncserver,就好了。

在vnc中想动态修改分辨率可使用xrandr程序,该命令直接作用于屏幕驱动。

先输入xrandr,会显示支持的分辨率

Screen 0: minimum 32 x 32, current 1024 x 768, maximum 32768 x 32768
VNC-0 connected primary 1024x768+0+0 0mm x 0mm
   1024x768      60.00*+
   1920x1200     60.00  
   1920x1080     60.00  
   1600x1200     60.00  
   1680x1050     60.00  
   1400x1050     60.00  
   1360x768      60.00  
   1280x1024     60.00  
   1280x960      60.00  
   1280x800      60.00  
   1280x720      60.00  
   800x600       60.00  
   640x480       60.00  

当前屏幕是 VNC-0 支持的分辨率如上

那么我们选择一种设置,就立刻生效了:

xrand --output VNC-0 --mode 1200x800

 

他妈的今天VNC又不好使了,使用如下命令打不开:

sudo systemctl start vncserver@:1.service

提示服务开启失败,这个错那个错的,让我用如下命令看错误内容。

systemctl status vncserver@:1.service

于是看到了:

?vncserver@:7.service - Remote desktop service (VNC)
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2018-12-29 10:39:43 CST; 44min ago
  Process: 196189 ExecStart=/usr/sbin/runuser -l  -c /usr/bin/vncserver %i (code=exited, status=1/FAILURE)
  Process: 196185 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

Dec 29 10:39:43 cilab249 systemd[1]: Starting Remote desktop service (VNC)...
Dec 29 10:39:43 cilab249 runuser[196189]: runuser: user  does not exist
Dec 29 10:39:43 cilab249 systemd[1]: vncserver@:7.service: control process exited, code=exited status=1
Dec 29 10:39:43 cilab249 systemd[1]: Failed to start Remote desktop service (VNC).
Dec 29 10:39:43 cilab249 systemd[1]: Unit vncserver@:7.service entered failed state.
Dec 29 10:39:43 cilab249 systemd[1]: vncserver@:7.service failed.
[haomeng@cilab249 ~]$ sudo systemctl stop vncserver@:7.service 
[haomeng@cilab249 ~]$ sudo systemctl start vncserver@:7.service 
Job for vncserver@:7.service failed because the control process exited with error code. See "systemctl status vncserver@:7.service" and "journalctl -xe" for details.
[haomeng@cilab249 ~]$ systemctl status vncserver@:7.service -l
鈼?vncserver@:7.service - Remote desktop service (VNC)
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sat 2018-12-29 11:24:37 CST; 5s ago
  Process: 197615 ExecStart=/usr/sbin/runuser -l  -c /usr/bin/vncserver %i (code=exited, status=1/FAILURE)
  Process: 197607 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

Dec 29 11:24:37 cilab249 systemd[1]: Starting Remote desktop service (VNC)...
Dec 29 11:24:37 cilab249 runuser[197615]: runuser: user  does not exist
Dec 29 11:24:37 cilab249 systemd[1]: vncserver@:7.service: control process exited, code=exited status=1
Dec 29 11:24:37 cilab249 systemd[1]: Failed to start Remote desktop service (VNC).
Dec 29 11:24:37 cilab249 systemd[1]: Unit vncserver@:7.service entered failed state.
Dec 29 11:24:37 cilab249 systemd[1]: vncserver@:7.service failed.

经过长达5小时的排查,否定了网上绝大多数方案,解决方法如下:

关闭该用户的所有vnc进程,利用vncserver -kill 配合 ps + kill

删掉该用户所有vnc配置  ~/.vnc

删除其vncserver@:???.service

重新配置该用户的这些配置文件

重点: 执行 systemctl daemon-reload

 

 


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://stackoverflow.com/questions/4723023/vsftpd-error-listing-directories

 

一些维护指令

w


可以查看当前活跃的用户列表

cat /etc/passwd


可以查看所有用户的列表

在系统中查找so等文件,用locate指令,用之前最好updatedb

netstat -antup | grep 5901  查看端口是谁占用
ps -au | grep 15476 查看15476进程是谁的

用了一阵,发现 ECONNREFUSED 这说明服务器主动拒绝链接。

经过排查,发现是filezilla使用了FTP协议,而服务器要求 Secure FTP SFTP协议。 在filezilla修改设置就好了。

 

 


装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用,还是美滋滋的。

明天装tensorflow

 


tensorflow

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

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

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

 

nvidia-smi

运行了tensorflow一个月后,发现一些警告,比如缺少FMA指令集加速,这让我想从源代码编译一下tensorflow

那么先搞一个快一点的底层代码:

去computecpp官网,注册一个免费用户,下载computecpp。这个用作openCL加速。

去intel developer官网,注册一个免费用户,下载MKL数学加速库。

再从intel下载他们加速的python3.5。

都是免费的

然后看此文章 编译步骤

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

yum search all | grep python

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

 

 


MATLAB

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

 

matlab -nosoftwareopengl


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

 

 

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

 


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 &

 

你可能感兴趣的:(Tech)