IT開發技能:系統配置與庫編譯


1.Windows10配置

1.1 系統安裝

1.重要鏈接

Windows10 dev: https://developer.microsoft.com/en-us/windows/downloads/

Windows10 vm: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines

Windows10 pre: https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewadvanced

Windows10 ver: BuildXXX.YYYYVersionYearMonthYearH1YearH2H=HalfYear

WSL changelog: https://docs.microsoft.com/en-us/windows/wsl/release-notes

WSL instruction: https://docs.microsoft.com/en-us/windows/wsl/reference

WSL download: https://docs.microsoft.com/en-us/windows/wsl/install-manual

ROS2 guidance: https://github.com/ros2/ros2

vcredist all links: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

suitesparse-metis-for-windows: https://github.com/jlblancoc/suitesparse-metis-for-windows

2.安裝說明

安裝穩定版本:將下載的虛擬機安裝為物理機后並破解

安裝最新版本:將下載的預覽鏡像安裝為物理機並破解

安裝優化版本:將下載藍色動力系統安裝為物理機並破解

3.整體流程

1.啟用Administrator並登錄

2.安裝SystemCare等基本APP

3.啟用相關功能並安裝WSL2

4.安裝ROS2和相關開發軟件

5.激活Windows10操作系統

4.啟用功能

SMB 1.0/CIFS File Sharing Support

SMB Direct

NFS Service

Telnet Client

Telnet Server

OpenSSH Client

OpenSSH Server

FTP Server

Virtual Machine Platform

Windows subsystem for Linux

Hyper-V

Windows sandbox

5.安裝軟件


1.2 WSL配置

1.Basic

下載UbuntuXXXMSStore下載並備份到期望位置后卸載之

安裝UbuntuXXX:命令導入install.tar.gz(避免新建用戶)或運行EXE正規安裝

配置WinTerminal:命令行為wsl.exe -d ubuntuxxx -u root


passwd root

apt-get update

apt-get upgrade

apt-get install minicom


2.Telnet

apt-get install openbsd-inetd telnetd

vim /etc/inetd.conf

mv /etc/securetty /etc/securetty.bak #allow root login

/etc/init.d/openbsd-inetd restart

netstat -a | grep telnet #display{tcp…telnet…}


telnet ip


3.SSH

apt-get install openssh-server openssh-client

vim /etc/ssh/sshd_config

dpkg-reconfigure openssh-server

/etc/init.d/ssh restart

ps -e |grep ssh #display{…sshd}


ssh username@ip


4.Samba

apt-get install samba samba-common smbclient cifs-utils

vim /etc/samba/smb.conf

smbpasswd -a root

/etc/init.d/smbd restart

smbclient -L ip -N


mount -t cifs -o username=root,password=aaron //ip/sharedPath localPath

umount localPath


#windows10: \\ip in Explorer

#clear cache: net use * /del /y


5.NFS

apt-get install nfs-kernel-server nfs-common rpcbind

vim /etc/exports

/etc/init.d/rpcbind restart

/etc/init.d/nfs-kernel-server restart

showmount -e ip


mount -t nfs -o nolock ip:/sharedPath localPath

umount localPath


#Window10

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\

ClientForNFS\CurrentVersion\Default

create AnonymousUid QWORD 0

create AnonymousGid QWORD 0

reboot windows

mount -o nolock \\ip\sharedPath driveNames:

umount driveNamess


6.FTP

apt-get install vsftpd ftp

vim /etc/vsftpd.conf

vim /etc/ftpusers

vim /etc/ftpusers_allowed

vim /etc/ftpusers_unlimited

/etc/init.d/vsftpd restart


ftp ip

ftp>help [cmd] ftp>quit ftp>status

ftp>dir [dir] ftp>ls ftp>verbose

ftp>pwd ftp>cd dir0 ftp>lcd [dir1]

ftp>delete file ftp>rename src dst

ftp>mkdir dir ftp>rmdir dirname

ftp>get file0 [file1] ftp>put file1 [file0]


7.Git Sever

apt-get install git git-core apache2 apache2-utils

1.wsl基本命令

設置默認版本:wsl --set-default-version wslVersion

設置默認系統:wsl --set-default osName

設置指定系統為指定版本:wsl --set-version osName wslVersion


關閉指定系統:wsl --terminate osName

關閉所有系統:wsl --shutdown

移除指定系統:wsl --unregister osName (刪除對應的vhdx文件)


查看系統:wsl --list --all/--running/--quiet/--verbose

導入系統:wsl --import osName installDir tarPath

導出系統:wsl --export osName tarPath

導出/導入的實質:tarvhdx之間的轉換(於是若不介意vhdx可直接備份vhdx)

直接vhdx備份還原:備份的vhdx在還原時用之替換原vhdx、優點是簡單快捷、缺點是vhdxtar

用導入方式安裝系統:直接導入install.tar.gz、避免新建用戶而直接默認root登錄


登錄系統:wsl [--distribution osName] [--user userName]


2./etc/inetd.conf應有

telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd


3./etc/ssh/sshd_config設置

PermitRootLogin yes

PasswordAuthentication yes


4./etc/samba/smb.conf追加

[root]

comment = root directory

path = /root

writeable = yes

browseable = yes

valid users = root


[ubuntu]

comment = system directory

path = /

writeable = yes

browseable = yes

valid users = root


5./etc/exports追加

/root *(insecure,rw,sync,no_subtree_check,no_root_squash)

/ *(insecure,rw,sync,no_subtree_check,no_root_squash)

#*: 所有能ping到的主機可掛載

#192.168.0.*: 指定網段的主機可掛載

#192.168.1.12: 僅此主機能掛載

#ro/rw:只讀/讀寫

#sync:同步

#no_root_squash: 不降低root用戶的權限


6./etc/vsftpd.conf模板

local_enable=YES

local_root=/home

local_umask=000

local_max_rate=0

write_enable=YES

userlist_enable=YES

userlist_deny=NO

userlist_file=/etc/ftpusers_allowed

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/ftpusers_unlimited

seccomp_sandbox=NO

/etc/ftpusers應無root和其它期望用於登錄的賬戶

/etc/ftpusers_allowed應有root和其它期望用於登錄的賬戶

/etc/ftpusers_unlimited應有root和其它訪問位置不受限的賬戶

1.3 ROS配置

1.手動安裝

(1)下載並解壓ROS2XXXD:\app\ros2

(2)基於D:\app\ros2\Scripts\xxx.py安裝相應的Python版本相應的路徑

(3)安裝OpenSSLD:\app\openssl和編譯OpenCVD:\app\opencv

(4)添加環境變量

setx -m OPENSSL_CONF D:\app\openssl\bin\openssl.cfg

setx -m OpenCV_DIR D:\app\opencv\build\install

(5)確認系統環境變量path包含

~\PythonXXX

~\PythonXXX\Scripts

D:\app\openssl\bin

D:\app\opencv\build\install\x64\vc14\bin

2.Choco安裝

下載包:choco download <pkg> [others] patch curl

安裝包:choco install -y -s D:\tmp asio cunit tinyxml-usestl tinyxml2 log4cxx

3.Python安裝

下載包:python -m pip download catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-python pyparsing pyyaml setuptools PyQt5 vcstool colcon-common-extensions-d D:\tmp

安裝包:python -m pip install --no-index --find-links=D:\tmp catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-python pyparsing pyyaml setuptools PyQt5 vcstool colcon-common-extensions

4.默認已安裝visualstudio opencv eigen

5.測試可用性

call D:\app\ros2\setup.bat

ros2 run demo_nodes_cpp talker

ros2 run demo_nodes_py listener

D:\app\qt\5.9.9\msvc2015_64\bin

D:\app\vtk\build\install\bin

D:\app\opencv\build\install\x64\vc14\bin

D:\app\suitesparse\lapack_windows\x64

C:\Program Files\Git\cmd

C:\Program Files\CMake\bin

C:\Python37

C:\Python37\Scripts

D:\wks\ams\colcon\install\ams\bin

D:\app\openssl\bin

D:\app\ros2\bin

D:\app\ros2\Scripts

D:\app\ros2\opt\libcurl_vendor\bin

D:\app\ros2\opt\yaml_cpp_vendor\bin

D:\app\ros2\opt\rviz_ogre_vendor\bin

D:\app\ros2\opt\rviz_assimp_vendor\bin


C:\ProgramData\chocolatey\bin

C:\ProgramData\chocolatey\lib\cunit\lib

C:\ProgramData\chocolatey\lib\tinyxml2\lib

C:\ProgramData\chocolatey\lib\log4cxx\lib


D:\app\octomap\build\install\bin


D:\app\flann\build\install\bin

D:\app\qhull\build\install\bin

D:\app\pcl\build\install\bin


C:\Windows

C:\Windows\System32

C:\Windows\System32\Wbem

C:\Windows\System32\OpenSSH

C:\Windows\System32\WindowsPowerShell\v1.0

C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit

C:\Program Files\Microsoft SQL Server\120\Tools\Binn

1.4 系統備份


2.庫編譯與安裝

2.1 git + cmake + python + qt(qglviewer) + openvino

1.安裝git:安裝到系統盤的默認路徑(確認環境變量)

2.安裝cmake:安裝到系統盤的默認路徑(確認環境變量)

3.安裝python安裝到ROS2期望版本到期望路徑(確認環境變量)

4.安裝qt安裝到D:/app/qt並設置D:/app/qt/5.9.9/msvc2015_64/binPath(非常重要)

(1)Qt5.9組選擇msvc2015-64bitdesktop-gcc-64bit及除QtScript外所有Qt打頭的庫

(2)DevDes組成選擇CBDebugerMinGW

(3)移除*d.lib*d.prl*d.dll的庫(因增強CMakeList.txt此操作無需再執行)

(4)移植到第三方時用C:\Windows\System32\WindowsPowerShell\v1.0作為目標路徑

(5)移植到第三方時根據實際需求還需要將~/plugins中的某些目錄復制到與運行程序相同的目錄,當前有:imageformats, sqldrivers, platforms

(6)安裝qglviewer

1)qt打開QGLViewer.pro,設置C/C++編譯器為MVCM14.0(amd64)

2)構建Release版本,無需理會找不到QGLViewer2.lib的錯誤

3)復制QGLViewer2.lib~\qt\version_id\msvc2015_64\lib

4)復制QGLViewer2.dll~\qt\version_id\msvc2015_64\bin

5)復制libQGLViewer-qt5.prllibQGLViewer-qt5.so*~\qt\version_id\gcc_64\lib

6)復制QGLViewer中所有h文件和VRender~qt\version_id\msvc2015_64

7)復制QGLViewer中所有h文件和VRender~qt\version_id\_gcc_64\include

8)QGLViewer中增加文件QGLViewer

#ifndef QT_QGLVIEWER_MODULE_H

#define QT_QGLVIEWER_MODULE_H

#include "camera.h"

#include "config.h"

#include "constraint.h"

#include "domUtils.h"

#include "frame.h"

#include "keyFrameInterpolator.h"

#include "manipulatedCameraFrame.h"

#include "manipulatedFrame.h"

#include "mouseGrabber.h"

#include "qglviewer.h"

#include "quaternion.h"

#include "vec.h"

#endif

9)這些頭文件中包含的關於QT的頭文件要作修改,主要是增加包含目錄

10)復制examples~\qt\Examples\version_id\qglviewer

11)備份以上文件,對Qt5.9.x全適用,對5.x.x只需更新dlllib文件

4.安裝openvino

(1)安裝過程詳細

1)選擇D:/app后將自動創建快捷目錄D:/app/openvino和原始目錄D:/app/openvino_year.month.id

2)安裝組件包括:ModelOptimizer(用於模型轉換)OpenModelZoo(避免再次下載)

IEDevKit(OpenMoelZoo引入)IERuntimeForXXX(占極小空間)、於是僅OpenCV被排除

3)安裝后刪除D:/app/openvino而將D:/app/openvino_year.month.id重命名為D:/app/openvino

4)通過BeyondCompare比較復制的與原始的D:/app/openvino來移除其中的快捷目錄

5)不為之添加任何永久環境變量而僅針對即時的命令窗口(因為主要想使用它的模型轉換器)

6)備份須知:無需單獨備份、因為備份文件沒比原文件小多少且重裝如同解壓、所以需要時直接安裝即可

(2)最終文件結構

python

opencv

licensing

documentation

bin\setupvars.bat:環境變量設置腳本

data_processing\audio\speech_recognition:語音識別庫API

deployment_tools

demo:安裝驗證腳本

tools:模型處理工具

open_model_zoo:推理引擎實例SRC

model_optimizer:模型優化器APP

ngraph:模型優化庫API

inference_engine:推理引擎庫API、推理引擎驅動DLL、推理引擎示例SRC

(3)環境變量說明

C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64_win\compiler

D:\app\openvino\deployment_tools\ngraph\lib

D:\app\openvino\deployment_tools\inference_engine\external\tbb\bin

D:\app\openvino\deployment_tools\inference_engine\external\hddl\bin

D:\app\openvino\deployment_tools\inference_engine\bin\intel64\Release

D:\app\openvino\deployment_tools\inference_engine\bin\intel64\Debug

D:\app\openvino\deployment_tools\model_optimizer

(4)配置驗證詳細

設置環境變量:D:\app\openvino\bin: setupvars.bat

配置所有優化器:D:\app\openvino\deployment_tools\model_optimizer\install_prerequisites: install_prerequisites.bat

轉為DLDT模型:D:\app\openvino\deployment_tools\demo: demo_squeezenet_download_convert_run.bat

推理DLDT模型:D:\app\openvino\deployment_tools\demo: demo_security_barrier_camera.bat

2.2 spdlog + vtk + opennivio + opencv + octomap

1.安裝spdlog解壓到D:/app/spdlog

2.安裝vtk

(1)安裝路徑:CMAKE_INSTALL_PREFIX=D:/app/vtk/build/install

(2)環境變量:D:/app/vtk/build/install/bin

(3)手動確認:無

(4)安裝須知:若自動找到依賴QT則殘廢之

3.安裝opencv

(1)安裝路徑:CMAKE_INSTALL_PREFIX=D:/app/opencv/build/install

(2)環境變量:D:\app\opencv\build\install\x64\vc14\bin

(3)手動確認:WITH_QT&VTK&INF_ENGINE&TBB

0)D:\app\opencv\contribs\modules\cvv\src\stfl\stringutils.cppu8”…”u8”...”

1)OPENCV_ENABLE_NONFREE=ON

2)OPENCV_DOWNLOAD_PATH=D:/app/opencv/sources/.cache

3)OPENCV_EXTRA_MODULES_PATH=D:/app/opencv/contrib/modules

4)QT5Core_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5Core

5)QT5Gui_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5Gui

6)Qt5Widgets_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5Widgets

7)QT5Concurrent_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5Concurrent

8)QT5OpenGL_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5OpenGL

9)QT5Test_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/Qt5Test

10)VTK_DIR=D:/app/vtk/build/install/lib/cmake/vtk-8.2

11)IE_XXX=D:/app/openvino/deployment_tools/inference_engine/xxx

12)TBB_DIR=D:/app/openvino/deployment_tools/inference_engine/external/tbb/cmake

13)BLAS_XXXCeres_DIR后續需要加入

14)排除:WITH_CUDABUILD_CUDA_STUBSBUILD_TBBBUILD_TESTSBUILD_PER_TESTSBUILD_EXAMPLESBUILD_opencv_appsBUILD_opencv_cvv(opencv _world沖突)OGRE_DIR(ROS2引入但無效)

(4)備份須知

1)完成CMakeGenerate后備份為build.zip

2)安裝並復制OpenCVDLDT中除*.pbd*.exeopencv_*外的所有到~\install\x64\vc14\bin

3)刪除除build.zipinstall外后的所有並進行整體備份

4.安裝octomap

(1)安裝路徑:CMAKE_INSTALL_BIN_DIR=D:/app/octomap/build/install

(2)環境變量:D:/app/octomap/build/install/bin

(3)手動確認

1)OCTOVIS_OT5=TURE

2)BUILD_OCTOVIS_SUBPROJECT=TRUE

3)BUILD_DYNAMICETD3D_SUBPROJECT=TRUE

4)QT_QMAKE_EXECUTABLE=D:/app/qt/5.9.9/msvc2015_64/bin/qmake.exe

5)QGLViewer_INCLUDE_DIR=D:/app/qt/5.9.9/msvc2015_64/include/QGLViewer

6)QGLViewer_LIBRARY_DIR_WINDOWS=D:/app/qt/5.9.9/msvc2015_64/lib/QGLViewer2.lib

(4)安裝須知

1)刪除~/octovis/src/extern以免調用本身提供的舊版本的libqglviewer

2)修改源碼中的updateGLupdate並注釋qglColorqglClearColor

3)在源碼中為octovis-shared工程添加${QT_LIBRARIES}依賴

4)繼承關系變化:ViewerWidgetQGLViewerQOpenGLWidget( instead of QGLWidget)

2.3 suitesparse + eigen + sophus + gflags + glog + ceres

1.安裝eigen:解壓源文件到D:/app/eigen

2.安裝sophus:解壓源文件D:/app/sophus

3.安裝gflags安裝到CMAKE_INSTALL_PREFIX=D:/app/gflags/build/install且用靜態庫

4.安裝glog安裝到CMAKE_INSTALL_PREFIX=D:/app/glog/build/install且用靜態庫

5.安裝ceres安裝到CMAKE_INSTALL_PREFIX=D:/app/ceres/build/install且用靜態庫

(1)手動確認:gflags_DIR&glog_DIR=D:/app/gflags/build/install/lib/cmake/gflags&glog

(2)安裝須知:解壓后先刪除BUILD,否則無法新建build目錄

(3)補充說明:直接包含lib文件會缺少宏定義使得在Debug模式下會出錯,可通過find_package生成工程找到宏后再在簡易配置中加上宏

6.安裝suitesparse

(1)安裝路徑:SUITESPARSE_INSTALL_PREFIX=D:/app/suitesparse/build/install

(2)環境變量:D:/app/suitesparse/lapack_windows/x64

(3)手動確認:無

(4)安裝須知

1)復制~/lapack_windows/x64中的libblas.libliblapack.lib~/install/lib使以簡化配置

2)刪除~/build/install/lib64,其中的文件來源於~/lapack_windows/x64

(5)補充說明

1)suitesparseefficientcsparsecxsparse組成

2)efficient依賴lapackblas(suitesparse-metis中包含這兩個依賴),但效率高

3)csparse不依賴lapackblas,但效率低

4)cxsparsecsparse超集,擴展支持復數和整型及長整型,用csparse的地方都可用之替換

5)suitesparse算法組成:算法庫11+配置庫1+csparsecxsparse擴展庫1

6)suitesparse文件組成:頭文件包含11(含配置頭文件),庫文件包含12(含配置頭文件)

7)lapacklapacke區別:lapackec接口的lapack,因為blaslapack本身是用fortan語言寫的

2.4 flann + qhull + pcl + boost

1.安裝flann

(1)安裝路徑:CMAKE_INSTALL_BIN_DIR=D:/app/flann/build/install

(2)環境變量:D:/app/flann/build/install/bin

(3)手動確認:無

(4)安裝須知:生成了多個庫但尚未明其義

2.安裝qhull

(1)安裝路徑:CMAKE_INSTALL_BIN_DIR=D:/app/qhull/build/install

(2)環境變量:D:/app/flann/build/install/bin

(3)手動確認:無

(4)安裝須知:生成了多個庫但尚未明其義

3.安裝boost

(1)安裝路徑:D:/app/boost

(2)手動確認:無

(3)環境變量:D:/app/boost/lib64-msvc-14.0

(4)安裝須知:僅保留~/lib64-msvc-14.0中滿足*mt-x64-1_*(動態38*2+靜態40=116)

(5)補充說明:lib靜態庫,vcx編譯器版本,mt多線程編譯,s靜態調試,g診斷調試,d調試版本

4.安裝pcl

(1)安裝路徑:CMAKE_INSTALL_BIN_DIR= D:/app/pcl/build/install

(2)環境變量:D:/app/pcl/build/install/bin

(3)手動確認:無

flann

qhull

boost

eigen

qt

vtk

(4)安裝須知:生成了多個庫但尚未明其義

1)CMakeLists添加set(BOOST_ROOT D:/app/boost)

2)USE_PROJECT_FOLDERS=ON

3)設為ON的項:_ENABLE_SSE, _SHEARD_LIBS

5)選擇除WITH_CU*外的所有WITH項以引出第三方庫,做法同OpenCV

4)排除的BUILD項:_CUDA, _GPU, _all_in_one_installer, _apps, _examples, _global_tests

2.5 orbslam2

2.安裝orbslam2(fbow + g2o +pangolin)

(1)安裝路徑:CMAKE_INSTALL_BIN_DIR=D:/app/octomap/build/install

(2)環境變量

(3)手動確認

(4)安裝須知

1)可對比原始源碼與Window版本源碼的區別,然后按readme安裝

2)ORBextractor.cc中添加頭文件#include <iterator>

3)刪除提供的Thirdparty/eigen而用D:/app/eigen

4)生成g2o工程打開后添加預處理選項WINDOWS

5)編譯pangolin時會不能打開”pthread.lib”的錯誤無需理會

(5)測試用例:解壓Vocabulary/ORBvoc.txt.tar.gz到當前目錄

1)單目KITTI.\Examples\Monocular\Release\mono_kitti .\Vocabulary\ORBvoc.txt .\Examples\Monocular\KITTI03.yaml G:\data_odometry_gray\03

2)單目EuRoc

3)單目TUM.\Examples\Monocular\Release\mono_tum .\Vocabulary\ORBvoc.txt .\Examples\Monocular\TUM1.yaml G:\rgbd_dataset_freiburg1_desk

4)雙目KITTI.\Examples\Stereo\Release\stereo_kitti .\Vocabulary\ORBvoc.txt .\Examples\Stereo\KITTI03.yaml G:\data_odometry_gray\03

5)雙目EuRoC

6)深度TUM.\Examples\RGB-D\Release\rgbd_tum .\Vocabulary\ORBvoc.txt Examples\RGB-D\TUM1.yaml G:\rgbd_dataset_freiburg1_desk G:\rgbd_dataset_freiburg1_desk\associations.txt

3.Ubuntu1604配置

3.1 初始設置

(1)開戶root賬號並重啟系統:

打開gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

添加greeter-show-manual-login=true

設置密碼sudo passwd root

(2)登錄root賬號並更改語言為英語

打開gedit /etc/default/locale修改

LANG="en_US.UTF-8"

LANGUAGE="en_US:en"

(3)解決root登陸報錯:

打開gedit /root/.profile

注釋mesg n

添加tty -s && mesg n

回到終端執行init 6

(4)安裝vmwaretools

提取iso文件中的壓縮文件中的wmware-tools-distrib

進入此目錄執行./vmware-install.pl之后一路回車即可

windows共享的目錄位於/mnt/hgfs

(5)修改源: gedit /etc/apt/sources.list

deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse

deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

#測試版源

deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse

#源碼

deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse

deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

#測試版源

deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse

#Canonical 合作伙伴和附加

deb http://archive.canonical.com/ubuntu/ xenial partnerlibe

#deb http://extras.ubuntu.com/ubuntu/ xenial main

(6)安裝基本

add-apt-repository ppa:nemh/systemback

apt-get update

apt-get upgrade

apt-get dist-upgrade

apt-get install synaptic gparted systemback fcitx-table-all bleachbit adobe-flashplugin guvcview vlc audacious uget aria2 ubuntu-restricted-extras

apt-get install xrdp dconf-editor samba system-config-samba gksu vsftpd filezilla openssh-client openssh-server git git-core apache2 apache2-utils

apt-get install minicom picocom cutecom nfs-common portmap nfs-kernel-server

打開LanguageSupport配置KeyboardInputMethodSystemfcitx

打開bleachbit選中除PackageListsFreeDiskSpace外的所有

打開rmvb+mkv+mp4+mp3安裝提示插件

3.2 個性配置

(1)個性配置

桌面無任何圖標

輸入法僅五筆和拼音

窗口菜單在本窗口並一直顯示

任務欄無多余程序停靠(包括不含桌面圖標和工作空間圖標)且任務欄圖標尺寸30

(2)標簽配置

打開/etc/xdg/user-dirs.defaults注釋所有

打開~/.config/user-dirs.dirs注釋只剩下XDG_DESKTOP_DIR="$HOME/Desktop"從而完成位置欄配置

打開菜單欄上的書簽欄完成書簽欄配置

(3)辦公配置

見后文

(4)制本地源

復制/var/cache/apt/archives/*.deb/root/app/aptget(若軟件包被刪除或更新則進入synaptic選擇全部重新但僅下載)

進行入/root/app執行{dpkg-scanpackages aptget /dev/null | gzip > aptget/Packages.gz}生成源信

打開gedit /etc/apt/sources.list后刪除所有並添加deb file:/root/app/ aptget/然后打開synapticreload即可

可以通過dpkg -i /root/app/aptget/*.deb安裝強制安裝deb軟件(確保彼此依賴都存在)

(5)清理緩存

bleachbit: 清理垃圾

autoclean: 清理已被卸載的軟件的deb安裝包

clean: 清理所有deb安裝包

autoremove: 刪除系統認為不再使用的孤立軟件

remove softname: 卸載指定軟件但保留配置

remove --purge softname: 卸載指定軟件且刪除配置

synaptic: 清除殘留配置

(6)備份系統

systemback備份系統為LiveCD

直接用LiveCD工作時可能無權限時則執行chmod u+x file/dir

直接進行安裝模式..../ubuntu160403-dzy.iso ro finstall quiet splash locale=zh_CN.UTF-8

在不同配置的電腦上安裝或試用LiveCD時,驅動有問題首先更新或重裝內核(此方法可聯網可離線),若都不行則在軟件更新界面的附加驅動中安裝(此方法要聯網)

(7)壓縮數據

常用功能

常用壓縮

常用選項

常用格式

-c新建壓縮

-x解壓文件

-t查看文件

-r追加文件

-Jlmzma壓縮(后綴tar.xz)

-zgzip壓縮(后綴tar.gz)

-jbzip2壓縮(后綴tar.bz2)

-Z為傳統壓縮(后綴tar.Z)

-f壓縮名

-v顯示過程

--exclude=path排除路徑

-C解壓位置

壓縮: tar -cvJf file.tar.xz --exclude=path1 --exclude=path2 srcPath

解壓: tar -xvJf file.tar.xz -C dstPath

壓縮用例: tar -cvzf /root/app.tgz --exclude=/root/app/tmp1 --exclude=/root/app/tmp2 /root/app/

解壓用例: tar -xvzf /root/app.tgz -C /root/app/

.

3.3 開發配置

(1)從源安裝

apt-get install libqt5multimedia5-plugins qtmultimedia5-dev libsuitesparse-dev CMakeLists添加: /usr/include/suitesparse

apt-get install git cmake cmake-qt-gui python3 libqt5*5-dev libboost-all-dev libeigen3-dev liboctomap-dev libdynamicedt3d-dev liboctovis-dev octomap-tools octovis 手動: sophus

apt-get install libvtk6-dev libopencv-dev 手動: opencv

apt-get install libgflags-dev libgoogle-glog-dev 手動: ceres

apt-get install libflann-dev libqhull-dev libpcl-dev pcl-tools libproj-dev

(2)手動安裝

sophus: win相似,直接復制到/usr/include/sophus-dzy

opencv: 除安裝路徑外與win相同, 包括重建本地本可以提供的第三項

pangolin: 除安裝路徑外與win相同, 但不重建本地已存在的第三項,若所需第三方項不存在會提示錯誤,基於之前安裝這里就需要再安裝libglew-dev

ceres: 除安裝路徑外與win相同

qt&&vscode&&vscode-plugins: vscode-icons, CMake, CMake Tools, CMake Tools Helper, C/C++

(3)備份恢復

1)備份:復制/usr/local/*/root/app/local,復制所有deb包到root/app/base-dev,刪除所有build中除build.zip外的文件

2)恢復:以base-dev制作本地源安裝,復制local覆蓋/usr/local,終端執行ldconfig

3.4 環境變量配置

(1)可設置處

/etc/environment:系統啟動時加載

/etc/profile:每個用戶首次登錄時加載

/etc/bash.bashrc:每個用戶每次打開shell時加載

~/.profile:對應用戶首次登錄時加載

~/.bashrc:對應用戶每次打開shell時加載

立即生效:source /etc/bash.bashrc source ~/.bashrc

(2)設置變量

C頭文件:export C_INCLUDE_PATH = dzypath:${C_INCLUDE_PATH}

CXX文件:export CPLUS_INCLUDE_PATH = dzypth:${CPLUS_INCLUDE_PATH}

對靜態庫文件:export LIBRARY_PATH = dzypath: ${LIBRARY_PATH}

對動態庫文件:export LD_LIBRARY_PATH = dzypath:${LD_LIBRARY_PATH} 或 修改/etc/ld.so.conf並執行ldconfig

對可執行文件:export PATH = dzypath:${PATH}

4.移動系統定制

4.1 BIOSUEFI的硬件差異

1.BIOS硬盤結構

(1)LBA0:因該扇區中,引導代碼占有絕大部分的空間,故將此扇區稱為MBR扇區

MBR446字節,存儲系統的引導程序

PEs64字節,每16字節描述描述一個PE(Partition Entry),所以最多共4個分區

End2字節,值為0xAA55

(2)LBA1~LBA62隱藏扇區,保留備用。

(3)LBA63:第一分區的起始位置。

(4)LBA64~LBAEnd:參見《挨踢_硬盤結構+文件系統+系統啟動+數據恢復1st.doc


2.UEFI硬盤結構

(1)LBA0MBR扇區,記錄了啟動代碼和分區信息。

LBA0記錄了僅0xEE標志的分區或LBA0后存在PHs(Partition Headers),說明此硬盤為UEFI獨占模式,只能由UEFI主板啟動

LBA0記錄了非0xEE標志的分區且LBA0后存在PHs,說明此硬盤為UEFI/BIOS混合模式,兩類主板或混合主板都能啟動

LBA0記錄了非0xEE標志的分區且LBA0后沒有PHs,說明此硬盤為BIOS獨占模式,只能由BIOS主板啟動

(2)LBA1:主PTH(Partition Table Header),記錄硬盤的GUID、分區可用的始末LBAPEs包含的項數及每項占用的字節數等信息

Offset

Length

Contents

0 (0x00)

8 字節

簽名,"EFI PART",值為0x54 52 41 50 20 49 46 45

8 (0x08)

4 字節

修訂,對GPT 1.0,值為0x00 01 00 00

12 (0x0C)

4 字節

PTH尺寸,值為0x00 00 00 5C = 92

16 (0x10)

4 字節


20 (0x14)

4 字節

保留,必須是0

24 (0x18)

8 字節

當前PTHLBA位置(對主PTH恆為1)

32 (0x20)

8 字節

另一PTHLBA位置(對副PTH恆為總LBA數減2)

40 (0x28)

8 字節

分區可用的第一LBA位置(PEs的最后LBA1=LB34)

48 (0x30)

8 字節

分區可用的最后LBA位置(PEs的第一LBA1=LB-34)

56 (0x38)

16 字節

硬盤GUID (UNIX及派生系統中也叫UUID)

72 (0x48)

8 字節

PEsLBA位置(恆為2)

80 (0x50)

4 字節

PEs包含的PTE(即分區數)

84 (0x54)

4 字節

每個PE的尺寸(通常為128字節)

88 (0x58)

4 字節

PEsCRC32校驗碼

92 (0x5C)

*

保留,必須是0(512字節的LBA,剩余420字節)

(3)LBA2~LBA33:主PEs,每個PE128字節描述

Offset

Length

Contents

常用分區類型GUID

EFI/ESP分區:C12A7328-F81F-11D2-BA4B-00A0C93EC93B,與操作系統無關

基本數據分區:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7,對WindowsLinux相同

微軟保留分區:E3C9E316-0B5C-4DB8-817D-F92DF00215AEWindows專用

Linux交換分區:0657FD6D-A4AB-43C4-84E5-0933C84B4F4FLinux專用

0 (0x00)

16 字節

分區類型標志GUID

16 (0x10)

16 字節

分區唯一標志GUID

32 (0x20)

8 字節

起始LBA

40 (0x28)

8 字節

終止LBA

48 (0x30)

8 字節

屬性標志(60代表只讀)

56 (0x38)

72 字節

分區名(36UTF-16字符)

(4)LBA34:第一分區的起始位置

(5)LBA-2~LBA-33:副PEs

(6)LBA-1:副PTH

4.2 BIOSUEFI的軟件差異

1.電腦主板固件程序分別:BIOSUEFI

2.BIOS分區結構將MBRPEs存儲在了一個扇區LBA0

3.UEFI分區結構將MBR存儲在一個扇區LBA0,將PEs存儲在多個扇區(LBA2~LBA33),還增加了PTH(存儲在LBA1扇區)

4.UEFI必須有一個ESP分區,ESP用於存儲系統啟動相關的文件

5.BIOS硬盤啟動過程概要

(1)開機自檢

(2)加載硬盤主引導記錄(每類系統的主引導記錄都不相同)

(3)搜索並激活系統引導文件(winnt5_ntldrwinnt6_bootmgrubuntu_)

(4)加載啟動配置文件(winnt5_boot.iniwinnt6_bcdubuntu_grub.cfg)

(5)加載系統核心文件

6.UEFI硬盤啟動流程詳細

(1)開機自檢

(2)加載系統引導文件:自動加載/esp/efi/boot/bootx64.efi(可由任何系統的efi文件或uefishell.efi重命名得到),可手動添加多個不同路徑的efi文件

Windows默認安裝在:/esp/efi/microsoft/boot/bootmgrfw.efi

Ubuntu默認安裝:/esp/efi/ubuntu/shimx64.efi/esp/efi/ubuntu/grubx64.efi

(3)加載啟動配置文件:不同的efi文件,其指向的啟動配置文件不同

Windows操作系統:/esp/efi/microsoft/boot/bootmgrfw.efi/esp/efi/microsoft/boot/bcd

Windows安裝鏡像:/iso/efi/boot/bootx64.efi/esp/efi/microsoft/boot/bcd

Ubuntu操作系統:/esp/efi/ubuntu/shimx64.efi/esp/efi/ubuntu/grubx64.efi/esp/efi/ubuntu/grub.cfg

Ubuntu安裝鏡像:/iso/efi/boot/bootx64.efi/iso/efi/boot/grubx64.efi/esp/boot/grub/x86_x64-efi/*/esp/boot/grub/grub.cfg

(4)加載系統核心文件:不同的啟動配置文件,其指向的系統核心文件不同

7.UEFI啟動盤制作須知

(1)基於《UEFI硬盤啟動流程》可知,從操作系統或安裝盤復制相應的文件到esp分區后,此硬盤就是UEFI啟動盤

(2)為使用grub2的附加功能,將Ubuntu操作系統中的boot/grub/x86_x64-efi目錄也復制到/esp/efi/ubuntu目錄中(若復制到其它位置則insmod時就需要指定模塊詳細路徑)

(3)為引導鏡像(.iso.ima.wim),復制ubuntu操作系統中的/usr/lib/syslinux/memdisk/esp/efi/ubuntu(可復制到其它任何位置反正加載時都要指定具體位置)

(4)開發者希望開機啟動uefishell.efi,使用者角度希望開機啟動grub2,折中方案是將shimx64.efi復制重合名為bootx64.efi(即將grub2設置默認),因為可以從grub2中啟動任何efi

:暫沒實現grub2啟動winpe.iso。當前,grub2只負責啟動ubuntu系統和ubuntu鏡像及efi文件,BCD負責啟動windowswinpe.wimwinos.vhd

8.UEFIBIOS相互轉換

(0)BIOS啟動盤制作:用grub4dos作為主干(即用grub4dos的引導代碼作為硬盤的MBR)引導相關操作系統,詳細制作流程略。

(1)BIOS轉換為UEFI:不論bios硬盤如何分區及有多少個分區

MBR(001~446):被置0

DPT1(447~462):被修改為恆定值且分類類型被置為0xEE

0x00, 0x00, 0x02, 0x00,0xEE,0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,

DPT2(463~478):被置0

DPT3(479~494):被置0

DPT4(495~410):被置0

END(411~412):不變。

(2)UEFI轉換為BIOS:不論uefi硬盤如何分區及有多少個分區

MBR(001~446):被修改為某系統的引導代碼

DPT1(447~462):被修改為第一分區的信息數據,若無第一分區則置為0

DPT2(463~478):被修改為第二分區的信息數據,若無第二分區則置為0

DPT3(479~494):被修改為第三分區的信息數據,若無第三分區則置為0

DPT4(495~410):被修改為第四分區的信息數據,若無第四分區則置為0

END(411~412):不變。uefi模式的第五及之后的分區在bios將不能被識別,或某些分區軟件直接提示不能轉換為bios硬盤。

4.3 WinPE啟動盤制作

1.WinPE.ISO目錄(仿照安裝鏡像生成):打開從Windows安裝鏡像並刪除所有文件后添加如下文件

bootmgr WindowsNT6安裝鏡像中獲取(使bios主板能啟動)

bootmgr.efi WindowsNT6安裝鏡像中獲取(使uefi主板能啟動)

boot 新建目錄

boot.sdi WindowsNT6安裝鏡像中獲取

winpe.wim 從第三方獲取 (本質上就是windowsNT6安裝鏡像中install.win的精簡)

BCD WindowsNT6安裝鏡像中獲取並作修改:設備文件由\sources\install.wim改為\boot\winpe.wim

2.BCD啟動WinPE.wim:打開BCD增加一項並指定boot.sdiwinpe.wim路徑即可

3.BCD啟動WinPE.iso:不支持

4.grub4dos啟動WinPE.wim:不支持

5.grub4dos啟動WinPE.iso

title winpe.iso

map --mem /hitsz/iso/winpe.iso (hd32)

map --e820cycles=0 ###解決藍屏問題

map --hook

chainloader (hd32) ###grub4dos不支持uefi啟動,據說開發團隊也不打算支持,所以拋棄grub4dos而轉向grub2

6.grub2啟動WinPE.wimuefi模式下試驗未成功,bios模式下未實驗

7.grub2啟動WinPE.isouefi模式下試驗未成功,bios模式下未實驗

4.4 UEFIGrub2常用命令

1.UEFI命令

exit:退出uefishell(將執行下一uefi啟動項)

fsX:進入指定分區

ls [dir]:列舉指定目錄下的所有文件及目錄

cd dir:進行指定目錄

path.efi:啟動指定efi文件

2.Grub2命令

halt:關機

reboot:重啟

ls:列舉所有分區

ls (hdX,Y):顯示分區類型

ls (hdX,Y)/dir:列舉指定目錄下的所有文件及目錄


set [var=value]:設置指定變量(包括環境變量和自定義變量)的值或顯示所有變量(包括環境變量和自定義變量)的值

unset var:刪除指定變量(包括環境變量和自定義變量)

echo $var:顯示指定變量的值,pager=1表示逐頁交互顯示,root表示當前所有分區,prefix表示grub.cfg所有目錄


timeout:倒計時

search --file filepath --set=root:在所有分區查找指定文件並將第一次找到的該文件所在分區設為根分區

loopback loopX isopath:將指定鏡像文件掛載到loopX

insmod module:加載指定grub模塊,如fat, ntfs, memdisk, ntldr, linux16, initrd16

chainloader filepath:鏈式加載指定文件

chainloader +1表示加載當前分區引導記錄

chainloader (hdX,Y)+1表示加載指定分區引導記錄

chainloader (hdX)+1表示加載指定硬盤主引導記錄

chainloader efifilepath表示加載指定的efi文件

boot:執行引導,在內核已經加載或chainloader后執行

 

configfile filepath:加載配置文件

cat filepath:顯示指定文件的內容

cmp file1path file2path:比較兩個文件是否相同(若相同則無任何顯示)


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM