配置我的linux
这篇博客从我以前的博客搬运过来,备份系统可以使用Remastersys,网上的教程一搜一大把。为了省心,我一直坚持使用ubuntu16.04,以下是系统环境的配置。
一些基础的安装和依赖
1 | sudo apt install |
安装Opencv:Install opencv in linux — opencv.org
以下是从网站上摘录的依赖,可能会更新,以官网为准。1
2
3sudo 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 | nvidia-smi |
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
3gedit ~/.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
2export 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
1 | sudo ldconfig |
网上的一些博客说需要编译器的升降级别,其实是不用的。关于编译器升降级我放到Blog的最后。
测试cuda的Samples1
2
3
4
5
6
7
8cd /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
2sudo cp lib* /usr/local/cuda-x.0/lib64/
#复制动态链接库
在lib64/文件夹下,libcudnn.so 和 libcudnn.so.x 都是链接
经过复制以后,原有的链接就已经失效了,即快捷方式,因此就需要重新生成新的快捷方式1
2
3
4cd /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
2sudo add-apt-repository universe
sudo apt-get update -y
安装依赖
通用的依赖1
2
3sudo 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
5sudo 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
3git 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
2INCLUDE_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
3make 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
9bash 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
2conda 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 Tool1
sudo apt-get install unity-tweak-tool
我个人推荐Flatabulous这个主题
下载:https://github.com/anmoljagetia/Flatabulous/releases
系统Icon我很喜欢这个风格,淡淡的蓝色1
2
3sudo add-apt-repository ppa:noobslab/icons
sudo apt-get update
sudo apt-get install ultra-flat-icons
最后是ununtu安装shadowsocks-qt5,通过PPA源安装,如果需要的话。1
2
3sudo add-apt-repository ppa:hzwhuang/ss-qt5
sudo apt-get update
sudo apt-get install shadowsocks-qt5
Linux串口通信
做机器人需要用到Linux的串口,但是16.04普通用户会没有权限访问ttyS设备1
2ls -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
13sudo 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
2sudo update-alternatives --config gcc ## 选择gcc编译器版本
sudo update-alternatives --config g++ ## 选择g++编译器版本
关于LLVM / Clang
最近转了LLVM+Clang编译C++,体验比以前上升不少。目前在使用llvm-4.0和clang-5.0,这是源上就有的版本,没有更新的版本需求,就不要给自己找源码编译的坑,能二进制安装就二进制。1
2
3sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install clang-5.0
这里的配置方法和上面几乎一样。1
2
3
4
5sudo 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
2sudo update-alternatives --config clang
sudo update-alternatives --config clang++
关于C/C++编译器,可以选择。1
2sudo update-alternatives --config cc
sudo update-alternatives --config c++
google工具链
通过apt安装Ceres-Solver的依赖
这部分已经包含了命令行解析gflags、日志系统glog1
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 | git clone https://github.com/gflags/gflags.git |
参考:
http://ceres-solver.org/installation.html#options-controlling-ceres-configuration
http://senlinzhan.github.io/2017/10/07/glog/