配置我的linux

这篇博客从我以前的博客搬运过来,备份系统可以使用Remastersys,网上的教程一搜一大把。为了省心,我一直坚持使用ubuntu16.04,以下是系统环境的配置。

一些基础的安装和依赖

1
2
3
4
5
6
7
8
9
sudo apt install 
sudo snap install mathpix-snipping-tool
sudo apt-get install build-essential
sudo apt-get install git cmake cmake-qt-gui

git config --global user.name "yourname"
git config --global user.email "youremail@example.com"

ssh-keygen -t rsa -C "youremail@example.com"

安装Opencv:Install opencv in linux — opencv.org

以下是从网站上摘录的依赖,可能会更新,以官网为准。

1
2
3
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

opencv的依赖中,很推荐Eigen3,特别适合在自己的项目中使用。

如果安装了opencv的再安装ros,原来的opencv系统变量什么的就会被ros自带的opencv覆盖掉,ros自带的opencv会随着ros更新而更新,挺方便的,而且也需要用到ros。

与ubuntu16.04对应的是ROS-kinetic.

安装ROS-kinetic:Install ros in linux — wiki.ros.org

以下是从网站上摘录的依赖,可能会更新,以官网为准。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 添加 sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

## 添加 ksys
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update

## 环境变量配置
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

## 构建工厂依赖
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

Nvidia 相关的安装与配置

安装驱动

首先是显卡驱动,可以在NVIDIA官网在下载相应的驱动并且安装,有可能会遇到无限重启的Bug,其实直接使用系统自带的方法就能很好安装驱动:

Ubuntu System Settings — Software && update — Others 选中Nvidia,安装完成以后重启。

1
2
3
4
5
6
nvidia-smi
## 查看GPU列表

nvidia-settings
## 调出Nvidia驱动程序面板,可以选择显卡
## 在System Settings — More detail 可以查看当前使用的是哪个显卡。

CUDA

其次是CUDA,我现在使用的是CUDA9.0

下载:https://developer.nvidia.com/cuda-downloads

推荐选择runfile. 这样避免出现很多问题。

1
sudo sh cuda_x.x_xxx_xxx_.run

安装过程中,会有一系列选项,其中有两个选项要注意一下
1
2
是否安装驱动(Y/N)?N
是否创建软链接(Y/N)?N

软链接那里,会创建/usr/local/cuda/的链接,其实就是原本安装位置和文件的快捷方式,选择No,反而会方便很多,cuda原本的安装位置是有版本号的,比如cuda-9.0,如果后面的配置都是声明/usr/local/cuda/而不是/usr/local/cuda-x.0/的话,最后配置在了快捷方式上,而没有配置到原本的安装位置上,以后就会很多**问题。

其他选项的根据情况自己做选择。一般都是Yes。

配置cuda之后要加上的环境变量声明,在文件~/.bashrc之后加上

1
2
3
gedit ~/.bashrc
export PATH=/usr/local/cuda-x.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-x.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后设置环境变量和动态链接库,在命令行输入

sudo gedit /etc/profile
在打开的文件里面加上(注意等号两边不能有空格)

1
2
export PATH=/usr/local/cuda-x.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-x.0/lib64:$LD_LIBRARY_PATH

保存之后,创建链接文件
1
sudo gedit /etc/ld.so.conf.d/cuda.conf

在打开的文件中添加如下语句:
1
/usr/local/cuda/lib64

保存退出执行命令行:

1
sudo ldconfig

网上的一些博客说需要编译器的升降级别,其实是不用的。关于编译器升降级我放到Blog的最后。

测试cuda的Samples

1
2
3
4
5
6
7
8
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery
....
....
....
... = PASS ## 成功
... = FAILED ## 失败

如果显示的是一些关于GPU的信息,则说明安装成功了。

CuDnn

cudnn的官网下载好像瞎了,但是在网络资源丰富的今天不难找到,什么百度云啊等等。(这里我安装的是cudnn7.0)

cudnn不需要install,将cuDnn里面的include/ 和 lib64/ 下面所有的头文件和库文件拷贝到 /usr/local/cuda-x.0/ 下面即可。

首先是把cudnn/include目录下的cudnn.h头文件扔到cuda-x.0/include/里

1
sudo cp cudnn.h /usr/local/cuda-x.0/include/ 

再把cudnn/lib64/目录下的所有的lib开头的动态文件扔到/usr/local/cuda-x.0/lib64/里
1
2
sudo cp lib* /usr/local/cuda-x.0/lib64/    
#复制动态链接库

在lib64/文件夹下,libcudnn.so 和 libcudnn.so.x 都是链接

经过复制以后,原有的链接就已经失效了,即快捷方式,因此就需要重新生成新的快捷方式

1
2
3
4
cd /usr/local/cuda-x.0/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7 #删除原有动态文件
sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7 #生成软链接
sudo ln -s libcudnn.so.7 libcudnn.so #生成软链接

安装Caffe

按照官网的流程走,不会有大问题。官网地址:Caffe installation

配置universe仓库然后更新

1
2
sudo add-apt-repository universe  
sudo apt-get update -y

安装依赖

通用的依赖

1
2
3
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev \  
libhdf5-serial-dev protobuf-compiler -y
sudo apt-get install --no-install-recommends libboost-all-dev -y

其中,protobuf我很推荐,建议自己的项目里积极使用。

BLAS是Basic Linear Algebra Subprograms(基础线性代数程序集)。它还被用于创建更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。Caffe也需要BLAS,CUDA有自己的cuBALS。

1
sudo apt-get install libatlas-base-dev -y  

以下是建议安装的依赖:
1
2
3
4
5
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev -y  
sudo apt-get install python-dev python-numpy –y
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

以上都推荐在自己的项目中积极使用。

配置编译

下面开始源码编译 Caffe,目录下有一份config.example需要配置,把它复制并重命名一份出来,然后修改它就可以配置Caffe的编译选项。

1
2
3
git clone https://github.com/BVLC/caffe.git  
cd caffe
cp Makefile.config.example Makefile.config

Makefile.config这个配置文件还是挺重要的,编译过不过,就看它了。
1
2
3
4
5
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

# Uncomment if you're using OpenCV 3 如果用的是opencv3版本
OPENCV_VERSION := 3

这里的OPENCV_VERSION其实可以不配,在用ros的opencv3的时候,勾选了这个会报很多错误。

另外ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径

1
2
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial 
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

打开makefile文件,将
1
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

替换为
1
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

编辑/usr/local/cuda-x.0/include/host_config.h(这个看你之前cuda是怎么配置的了)

把这一行注释掉:

1
#error-- unsupported GNU version! gcc versions later than 5 are not supported!

编译Caffe

完成以上所有工作,就可以编译Caffe了

1
2
3
make all -j8
make runtest
make pycaffe

中间出任何问题,及时google。这块内容主要参考自这三个博客:

http://blog.csdn.net/u010167269/article/details/50703923

http://blog.csdn.net/hit2015spring/article/details/53510909

http://blog.csdn.net/autocyz/article/details/52299889

Anaconda多版本配置

Anaconda是python科学计算包,因为py2/3有区别,所有Anaconda也去分2和3,这里Ubuntu安装Anaconda版本共存,默认py2,需要py3环境时,用下面命令切换。

1
source activate py3

系统配置Anaconda后,python就换成Anaconda的环境,和ros会有很多兼容问题,caktin_make编译无法通过。我暂时还没有解决。


需要提前去网站下载 Anaconda的安装包,推荐在国内的镜像源下载,官网的下载实在是太慢了。

安装 Anaconda2就一行命令

1
bash Anaconda2-4.3.1-Linux-x86_64.sh

安装 Anaconda3不需要create新环境,直接运行以下代码,其中py3是新的环境名:
1
2
3
4
5
6
7
8
9
bash Anaconda3-4.3.0-Linux-x86_64.sh -b -p $HOME/anaconda2/envs/py3
rm -f $HOME/anaconda2/envs/py3/bin/conda*
rm -f $HOME/anaconda2/envs/py3/conda-meta/conda-*
rm -f $HOME/anaconda2/envs/py3/bin/activate
rm -f $HOME/anaconda2/envs/py3/bin/deactivate
cd $HOME/anaconda2/envs/py3/bin
ln -s ../../../bin/conda .
ln -s ../../../bin/activate .
ln -s ../../../bin/deactivate .

打开一个新终端,输入下面命令来查看它:
1
conda info --envs

如果提示错误,则说明没有配置好,需要进行下面的步骤:
1
sudo gedit ~/.bashrc

打开文件后在末尾输入
1
export PATH="/home/yourname/anaconda2/bin:$PATH"

此处anaconda2的路径根据你自己的做相应的修改即可。


由于墙的问题,需要设置国内的anaconda源

1
2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/

TUNA的help中镜像地址加有引号,需要去掉。

设置搜索时显示通道地址

1
conda config --set show_channel_urls yes

执行完上述命令后,会生成~/.condarc文件,记录着对conda的配置,直接手动创建、编辑该文件是相同的效果。

系统的主题

安装 Unity Tweak Tool

1
sudo apt-get install unity-tweak-tool

我个人推荐Flatabulous这个主题

下载:https://github.com/anmoljagetia/Flatabulous/releases

系统Icon我很喜欢这个风格,淡淡的蓝色

1
2
3
sudo add-apt-repository ppa:noobslab/icons
sudo apt-get update
sudo apt-get install ultra-flat-icons

最后是ununtu安装shadowsocks-qt5,通过PPA源安装,如果需要的话。
1
2
3
sudo add-apt-repository ppa:hzwhuang/ss-qt5
sudo apt-get update
sudo apt-get install shadowsocks-qt5

Linux串口通信

做机器人需要用到Linux的串口,但是16.04普通用户会没有权限访问ttyS设备

1
2
ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 1月21 21:53 /dev/ttyS0

ttyS设备的用户主是root,而所属的组是dialout,并且owner和group都是有相同的rw权限的,但others是没有任何权限的。

这个可以通过用户组设置的来解决,输入

1
sudo usermod -a -G dialout user_name

这样,重启系统后,把“user_name”就会加入dialout组了,之后就能自由访问ttyS设备了。

安装QT

一种方法,直接一行命令搞定

1
sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qt5-default qtcreator -y

另一种方法,安装.run包来安装,使用qt只是偶尔需要用到图形化的东西。很少做开发,只装一个qt4就够了。

编译器升降级、LLVM、Clang

关于gcc/g++

之前在安装CUDA的时候,有提到CUDA不支持gcc5以上编译器的问题,属于历史遗留。抛开CUDA,有的时候需要编译器升降级,以下是方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt-get install gcc -4.9 gcc-5 g++-4.9 g++-5

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

这一步好像不是必须的,但是如此配置以后,就可以自由切换gcc/g++的编译器版本,感觉非常方便。
1
2
sudo update-alternatives --config gcc  ## 选择gcc编译器版本
sudo update-alternatives --config g++ ## 选择g++编译器版本

关于LLVM / Clang

最近转了LLVM+Clang编译C++,体验比以前上升不少。目前在使用llvm-4.0和clang-5.0,这是源上就有的版本,没有更新的版本需求,就不要给自己找源码编译的坑,能二进制安装就二进制。

1
2
3
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install clang-5.0

这里的配置方法和上面几乎一样。
1
2
3
4
5
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-5.0 1000

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 100
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 1000

如此配置,能自由切换clang/clang++的编译器版本。
1
2
sudo update-alternatives --config clang
sudo update-alternatives --config clang++

关于C/C++编译器,可以选择。
1
2
sudo update-alternatives --config cc
sudo update-alternatives --config c++

google工具链

通过apt安装Ceres-Solver的依赖

这部分已经包含了命令行解析gflags、日志系统glog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse and CXSparse (optional)
# - If you want to build Ceres as a *static* library (the default)
# you can use the SuiteSparse package in the main Ubuntu package
# repository:
sudo apt-get install libsuitesparse-dev
# - However, if you want to build Ceres as a *shared* library, you must
# add the following PPA:
sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
sudo apt-get update
sudo apt-get install libsuitesparse-dev

命令行解析gflags、日志系统glog、代码测试gtest、优化Ceres-Solver

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/gflags/gflags.git
git clone https://github.com/google/glog.git
git clone https://github.com/google/googletest.git
git clone https://github.com/ceres-solver/ceres-solver
cd <source-dir>
mkdir <build-dir>
cd <build-dir>
cmake ..
make
sudo make install

参考:

http://ceres-solver.org/installation.html#options-controlling-ceres-configuration
http://senlinzhan.github.io/2017/10/07/glog/