极光城

centos7计算服务站装机问题指南

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

CentOS7 with nvidia, vnc, cuda8, cudnn5, matlab16b, tensorflow…

An article by me introducing how to assemble and maintain an Xeon+GTX1080 Computer shared to a group of idiots.

Yes, with nvidia, ftpserver, vnc, xrdp, printer, cuda8, cudnn5, matlab16b, tensorflow…

Didn’t it drive me crazy?

In case you are concerned,

Of course it did.

Just look at the sh*t

多么痛的领悟——硬刚起步装系统

在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

换一台机器连接一下

好使了。

过了半天之后,

又不好使了!!!

这个垃圾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 <USER> -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 <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 <USER> -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 <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。。。。。。。 ——————— 作者:RockHell 来源:CSDN 原文:https://blog.csdn.net/u010469993/article/details/57958762 版权声明:本文为博主原创文章,转载请附上博文链接!

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

作者:RockHell 来源:CSDN 原文:https://blog.csdn.net/u010469993/article/details/57958762 版权声明:本文为博主原创文章,转载请附上博文链接!

附录

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 &