在ubuntu 16.04上安装MapD问题小结

这是一个初步的小结,记录中间所踩的坑,同时在我的服务器尚有问题未解决。

从官方的github库直接下载下来,按照官方指南进行编译。

mkdir ~/mapd && cd ~/mapd
git clone https://github.com/mapd/mapd-core.git
cd mapd-core

0、准备工作

需要已经安装好nvidia cuda相关的驱动和软件包。

1、安装依赖包

cd scripts
./mapd-deps-ubuntu.sh

在安装thrift时遇到第一个坑,居然golang.org官方网站已经被墙,导致其在安装一些附加包时遇到网络错误,编译过程终止。

解决办法:可以使用github的官方镜像库下载到指定目录后安装,然后再进行编译。

在编译过程中需要用到go的net包和gomock包。

mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone https://github.com/golang/net.git net
go install net
git clone https://github.com/golang/mock.git mock
go install mock

关键要判断好$GOPATH这个路径,根据错误提示来确定对应的路径,其中一个是scripts/thrift-0.10.0/test/go/。

第二个坑是在mapd-deps-ubuntu.sh脚本中已经安装了诸多依赖,但其实还不完整。还需要安装:

sudo apt install cppcheck clang-tidy libegl1-mesa-dev

不过,这个在github上有一个issue也指出了方案。

编译完成后,其自动安装到/usr/local/mapd-deps目录下,其提示需要执行一个sh脚本,这又是一个小坑。即脚本执行完成后,运行程序还提示相关库文件找不到。

这时应该将对应的目录加入/etc/ld.so.conf.d目录下,即在此目录下添加一个文件,如名称为mapd.conf,其内容为:

/usr/local/mapd-deps/lib

然后执行:

sudo ldconfig

这样就可以将库目录搜索路径加进来了。

2、编译MapD

参照官方说明处理

cd ~/mapd/mapd-core/
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=debug ..
make -j $(nproc)
sudo make install

这样就可以安装完成,但在服务器上运行时还存在问题,待摸索后再记录。

ubuntu 16.04 cuda 9.1源代码安装tensorflow-1.7

目前默认的pip模式安装不能支持cuda 9.1版本,因此需要在ubuntu 16.04服务器上采用源代码编译模式进行安装。主要参考了这个地址:

How to install Tensorflow GPU with CUDA Toolkit 9.1 and cuDNN 7.1.2 for Python 3 on Ubuntu 16.04-64bit

在此记录一下主要的安装过程:

配置编译环境

sudo apt-get install build-essential 
sudo apt-get install cmake git unzip zip zlib1g-dev
sudo apt-get install python3.5-dev pylint python3-numpy python3-pip python3-wheel
sudo apt-get install linux-headers-$(uname -r)

安装依赖库

sudo apt-get install libcupti-dev
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

安装bazel

sudo apt-get install openjdk-8-jdk
wget https://github.com/bazelbuild/bazel/releases/download/0.11.1/bazel_0.11.1-linux-x86_64.deb
sudo dpkg -i bazel_0.11.1-linux-x86_64.deb

开始

source ~/.bashrc
sudo ldconfig

下载,开始配置

wget https://github.com/tensorflow/tensorflow/archive/v1.7.0.zip
unzip v1.7.0.zip
cd tensorflow-1.7.0

./configure
一些配置的参数:

Please input the desired Python library path to use.  Default is [/usr/local/lib/python3.5/dist-packages]
/usr/lib/python3/dist-packages
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]: y
jemalloc as malloc support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
No Google Cloud Platform support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: y
Hadoop File System support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
No Amazon S3 File System support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Apache Kafka Platform support? [y/N]: n
No Apache Kafka Platform support will be enabled for TensorFlow.

Do you wish to build TensorFlow with XLA JIT support? [y/N]: n
No XLA JIT support will be enabled for TensorFlow.

Do you wish to build TensorFlow with GDR support? [y/N]: n
No GDR support will be enabled for TensorFlow.

Do you wish to build TensorFlow with VERBS support? [y/N]: n
No VERBS support will be enabled for TensorFlow.

Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.

Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.1


Please specify the location where CUDA 9.1 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: 


Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7.1.2


Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:/usr/lib/x86_64-linux-gnu


Do you wish to build TensorFlow with TensorRT support? [y/N]: n
No TensorRT support will be enabled for TensorFlow.

Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 6.0,6.0]


Do you want to use clang as CUDA compiler? [y/N]: n
nvcc will be used as CUDA compiler.

Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: 


Do you wish to build TensorFlow with MPI support? [y/N]: n
No MPI support will be enabled for TensorFlow.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See tools/bazel.rc for more details.
	--config=mkl         	# Build with MKL support.
	--config=monolithic  	# Config for mostly static monolithic build.
Configuration finished

其中的cuda计算能力需要根据自己的显卡进行设置,默认的应该就可以。
然后进行编译

bazel build --config=opt --config=cuda --incompatible_load_argument_is_label=false //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package tensorflow_pkg

完成后安装到本机

cd tensorflow_pkg
pip3 install tensorflow*.whl

ubuntu中禁止ipv6

之前提到如何临时禁止ipv6,目前发现机房环境的ipv6基本已经瘫痪,就想长期禁止ipv6,否则在使用过程中会遇到各种奇怪的问题。

修改配置文件:

sudo nano /etc/sysctl.d/99-sysctl.conf

将其内容修改为:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

然后将其生效:

sudo sysctl -p

这样就可。

参考:
https://www.linuxbabe.com/ubuntu/disable-ipv6-on-ubuntu

ubuntu 16.04中安装oracle java7

oracle java7官方已经停止支持了,但数据中心系统集成的geonetwork版本依然需要java7才能工作良好,使用webupd8team的源里虽然还有java7的安装包,但由于oracle官方的下载源已取消,导致不能成功下载,安装持续失败。从oracle的官方存档中还可以下载,但需要有oracle的账户。

之后,发现另外一台服务器的缓存中,oracle java7的安装包依旧还在,因此可以拷贝过来直接使用:

scp user@another.server:/var/cache/oracle-jdk7-installer/jdk-7u80-linux-x64.tar.gz /var/cache/oracle-jdk7-installer/
sudo apt-get install oracle-java7-installer

这样就可以成功安装了。

使用wordcloud生成中文词云的汉字编码问题

用python对市长信箱的回复选登进行分析,需要作词云图,选择wordcloud包来实现。

网上很多都介绍了生成中文词云需要指定中文字体的路径,但我在使用中还遇到了utf8编码与unicode编码的转换问题。即utf8编码的字符串需要先转换为unicode编码,然后再送入wordcloud的fit_words方法才能正确显示中文词云。

示例代码如下:

rec=records
for i in range(0,len(records)):
	rec[i]=(unicode(records[i][0]),records[i][1])

tags=dict(rec)
wordcloud=WordCloud(font_path="/Users/wangliangxu/Desktop/SimSun.ttf",width=1200,height=600,max_words=400).fit_words(tags)

ubuntu服务器无法上网问题

服务器搬家后遇到的第二个大问题,三台机器(1台Dell PowerEdge R720,2台R920)都无法上网。分配了新的ip地址后,居然都ping不通网关。
R720最简单,将ufw关掉就解决了。

sudo service ufw stop
sudo ufw disable

但那两台R920,遇到了非常奇怪的问题。之前用ubuntu 14.04安装的时候,网卡是识别为em1的。后来升级为ubuntu 16.04后在之前机房也一直正常上网。搬迁之后使用新地址无法上网,因此直接就认为是网络地址的问题,和网管交涉后他们说没有限制。使用笔记本接入相同网络地址居然是正常的。这说明网络地址是没有问题的。

ufw关停,未解决。 tor关停,未解决。dnsmasq关停,未解决。
狠心重装了一台机器,在安装界面中注意到系统将网卡识别为eno1,但启动后无网络。ifconfig -a后发现网卡识别为em1。重新设置网络地址后,居然还不能上网。

再次搜索,发现网络上有可以在grub中设置网卡地址名称,将其设置为常规的eth0之类的网口,于是试验看看。修改/etc/default/grub
将其中的:

GRUB_CMDLINE_LINUX=””

修改为:

GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0″

然后更新grub:

sudo update-grub

设置网络地址为eth0,重新启动系统。

这样居然可以解决问题!

小结:看起来应该是这个版本的一个bug,应该是网卡识别的问题。

参考:
https://askubuntu.com/questions/767786/changing-network-interfaces-name-ubuntu-16-04

mdadm中遇到can’t read superblock问题

服务器搬家,重启后遇到了一个大问题,磁盘软阵列无法挂载,遇到了问题:

mdadm can’t read superblock

所有的数据都在这个阵列上,需要快速解决此问题。从md3060e的指示灯上可以看出是有一块磁盘损坏,直接替换为新磁盘也无法解决问题。阵列是raid5,损坏一个磁盘应该是degrade,但应该不影响使用。数据应该是安全的,但需要加载回来。

最终将mdadm知识又温习了一遍,解决方案如下:

1. 定位损坏的磁盘
使用mdadm –examine /dev/sdx命令逐块检查磁盘信息,最终发现/dev/sdg磁盘损坏。
同时在检查磁盘时确认一下该阵列的组成磁盘(即除损坏磁盘后,该阵列还包括哪几块磁盘)。

2. 重新加载磁盘
使用命令:

mdadm –assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdh /dev/sdi /dev/sdk

若提示有问题,可以加入–force –run参数,表示要强行启动。

3. 挂载及后续

mount /dev/md0 /disk1

通过mdadm –detail /dev/md0可以看出,此raid时在degrade状态下,需要补充进来一块磁盘。

mdadm /dev/md0 –add /dev/sdl

这样就可以自动rebuild了。

dell md3060e查看service tag

供应商需要md3060e的service tag,跑一趟机房太麻烦,就尝试看看命令能不能找出来。
进入/opt/dell/ServerHardwareManager/ServerHardwareManagerCLI/bin/目录,使用root账号运行:
./shmcli lpe
这样就能看到对应的service tag。

Window环境下qgis standalone程序开发环境设定

本文假定:
1. 采用qgis官方发布的安装程序(如QGIS-OSGeo4W-2.18.13-1-Setup-x86.exe安装包)
2. 使用默认的安装位置,即C:\Program Files\QGIS 2.18,如指定到其他目录,请修改对应的设定。
3. 假定示例数据目录为D:\QGIS\数据\

第一:设定环境变量

SET OSGEO4W_ROOT=C:\Program Files\QGIS 2.18
SET QGIS_PREFIX=%OSGEO4W_ROOT%\apps\qgis
SET PATH=%QGIS_PREFIX%\bin;%OSGEO4W_ROOT%\bin
SET PYTHONPATH=%QGIS_PREFIX%\python;%OSGEO4W_ROOT%\apps\Python27
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
SET GDAL_DATA=%OSGEO4W_ROOT%\share\gdal

即在cmd下执行上述命令,若路径不一致,请自行修改。

第二:运行一个样例

# -*- coding: utf-8 -*-
import os,os.path,sys

from qgis.gui import *
from qgis.core import *
from PyQt4 import QtGui

app = QtGui.QApplication([])
QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True)
QgsApplication.initQgis()

main_win = QtGui.QMainWindow()
frame = QtGui.QFrame(main_win)
main_win.setCentralWidget(frame)
grid_layout = QtGui.QGridLayout(frame)

map_canvas=QgsMapCanvas()
grid_layout.addWidget(map_canvas)
map_canvas.setCanvasColor(QtGui.QColor(255,255,255))
layer=QgsVectorLayer(ur'D:\qgis\数据\bou2_4p.shp','border','ogr')

QgsMapLayerRegistry.instance().addMapLayer(layer)
canvas_layer=QgsMapCanvasLayer(layer)
map_canvas.setLayerSet([canvas_layer])
map_canvas.zoomToFullExtent()

main_win.show()
# Need the following statement if running as a script
app.exec_()

可在前述cmd环境下运行python,将此代码粘贴进来运行。

第三,说明:
layer=QgsVectorLayer(ur'D:\qgis\数据\bou2_4p.shp','border','ogr')
这个语句,如目录名称中不含中文,则路径前的u可以移除。当然,也可以这样写:
layer=QgsVectorLayer(u'D:\\qgis\\数据\\bou2_4p.shp','border','ogr')
同时,建议在python下逐行执行来理解代码。

safari遭遇ssp.fwrd.com弹窗病毒

最近,突然发现safari会随机遭遇弹窗病毒,即会自动跳转几个网站,包括ssp.fwrd.com、ab4hr.com等网站,搜索发现有建议安装malwarebytes软件,尝试了之后,并不能解决问题。还有说reset safari可以解决问题的,也不能解决问题。
最终参考这个网站解决了问题:https://medium.com/@preitsma/how-to-remove-vsearch-adware-and-trovi-search-from-your-mac-osx-4b96555e68ff

具体步骤:
1. 进入~/Library/LaunchDaemons目录,发现是否有异常文件。在我的机器上发现了一个奇怪的文件:

com.apple.nalen.plist

cat这个文件,发现其中指向/Library/nalen文件。
于是将这两个文件都删除:
rm com.apple.nalen.plist
rm /Library/nalen

2. 删除已经运行的nalen文件:

ps aux | grep nalen

找到具体的pid,然后kill掉即可。