美文网首页
开发环境

开发环境

作者: 咚咚董dyh | 来源:发表于2023-06-24 21:47 被阅读0次

Linux

查看Unbuntu版本

lsb_release -a
uname -a
cat /proc/version

用户管理

useradd [-m 建立用户目录][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]

user=NAME
useradd $user -d /home/$user -g HwHiAiUser; cp -r /etc/skel/. /home/$user/
useradd -m -s /bin/bash $user; usermod -g HwHiAiUser $user
useradd -m -s /bin/bash -g HwHiAiUser $user
chown -R $user:HwHiAiUser /home/$user/
passwd $user

# 修改用户组
usermod -a -G HwHiAiUser $user

useradd通过命令添加用户,adduser在Ubuntu上通过交互式命令添加用户,Centos上两者没区别。

Linux 使用 adduser 与 useradd 添加普通用户

CentOS

清除yum缓存:

yum clean all
# 可选清除缓存,rm -rf /var/cache/yum/*

增删改yum源后,重新构建缓存:

yum makecache

CentOS上yum源在官方源的基础上,可配置EPEL(Extra Packages for Enterprise Linux)源,或安装Software collections(即centos-release-scl,具有持续更新的软件包)。

配置本地源,如配置EulerOS-2.0SP8源:

yum_path=/etc/yum.repos.d/euleros_aarch64.repo
echo "[base]" > ${yum_path}
echo "name=EulerOS-2.0SP8 base" >> ${yum_path}
echo "baseurl=MIRROR.DOMAIN/euler/2.8/os/aarch64/" >> ${yum_path}
echo "enabled=1" >> ${yum_path}
echo "gpgcheck=1" >> ${yum_path}
echo "gpgkey=MIRROR.DOMAIN/euler/2.8/os/aarch64/RPM-GPG-KEY-EulerOS" >> ${yum_path}

安装GCC/G++,若yum无法安装最新版本,则通过SCL安装

yum install devtoolset-7
ln -s /opt/rh/devtoolset-7/root/usr/include/c++/7 /usr/include/c++/7
source /opt/rh/devtoolset-7/enable  # 可将该行写入.bashrc

CentOS C++开发环境配置,仅供参考,有部分错误。

SSH

SSH登录很卡,关闭selinux(重启生效),Arm系统默认是打开的:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0
/usr/sbin/sestatus -v

设置ssh不断开:

sed -i "s/^export TMOUT.*/export TMOUT=0/g" /etc/profile
sed -i "s/.*ClientAliveInterval.*/ClientAliveInterval=600/g" /etc/ssh/sshd_config
sed -i "s/.*ClientAliveCountMax.*/ClientAliveCountMax=300/g" /etc/ssh/sshd_config
service sshd restart
export TMOUT=0

端口放开

新装系统默认开启了防火墙,可以放开端口:

# 永久放开
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 临时放开
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -I INPUT -p tcp --dport 1080 -j ACCEPT

查看进程

ps仅能查看进程启动命令的相对路径。启动一个进程时,在/proc/目录下会生成以进程号命名的文件夹,里面有多个文件记录了进程的详细信息:

  • cwd软链接是进程运行目录;
  • exe软链接是执行程序的绝对路径;
  • cmdline文件记录了命令行命令;
  • environ文件记录了运行时的环境变量;
  • fd目录保存了使用文件的软连接。

删除进程

批量删除/杀死CMD中包含KEYWORD(如train.py)的进程:

kill -9 `ps -ef | grep <KEYWORD> | awk '{print $2}' `

在上述要求的基础上排除root进程:

ps -ef | grep <KEYWORD> | grep -v root | awk '{print $2}' | xargs kill -9

其中:

  • awk的作用是输出某一列,{print $2}就是输出第二列,如上为pid列。
  • grep -v的作用是排除某个字符,如上排除了root用户的命令。
  • xargs从前面的命令获取输出作为参数来执行下一个命令。

硬盘管理

查看目录所在硬盘空间信息

df -lh /home/

Linux中查看硬盘信息 (daemon369.github.io)

查看块设备,不带参数时列出所有硬盘,根节点代表硬盘,二级节点代表磁盘上的分区。使用-d选项只列出硬盘,不列出分区。

lsblk [-d]

常用命令

zip -qr html.zip /home/html

Linux 软连接,不要在目录最后加/。软连接实际是字符串映射,源路径(已存在)会被当作字符串,路径不存在也不会报错。源路径请用绝对路径,或在目标(软连接)所在父目录下能访问的路径。目标路径可相对/绝对,父路径不存在会报错,文件/目录已存在则失败(无提示)。

# ln [参数][源文件或目录][目标文件或目录]
ln -s /PATH/TO/data /home/USER/data
# 删除软连接
rm /home/USER/data
# 修改软连接
ln -s /PATH/TO/new_data /home/USER/data

Bash历史管理。

# 全部清除
history -c
# 删除某行
history -d <行号>
# 修改文件
vim ~/.bash_history
# 修改文件后需刷新缓存
history -r 

rsync同步文件到本地,中断后本地文件夹/文件无法删除,提示没有权限。可使用空文件夹/小文件覆盖,然后删除。可能要注意原命令里文件夹是否带有/,保持一致,否则可能失败。

rsync -rtv --delete USER@HOST:EMPTY_FOLDER DEL_FOLDER

?

sed -i "s/\r//" install.sh

系统代理

在打开的终端窗口里配置,仅在当前窗口有效,关闭后失效。

# no_proxy为例外,非必须
export no_proxy="127.0.0.1, localhost"
export http_proxy="http://[USER:PASSWORD@]PROXY.DOMAIN:PORT"
export https_proxy="http://[USER:PASSWORD@]PROXY.DOMAIN:PORT"

IDE

  • Windows本地IDE,如PyCharm, CLion, VScode,配置远程开发环境。
    • PyCham配置远程解释器。如需要可进一步修改(可选)远程服务器配置
    • CLion配置远程部署。如需要可进一步修改(可选)远程服务器
    • Pycharm/CLion配置代理,用于自动安装Plugins等:File>Settings>Appearance & Behavior>System Settings>HTTP Proxy>Manaual proxy configuration,内容参考下方系统代理设置。注意:No proxy for请填写*.公司域名,否则License会激活失败。
  • Linux服务器IDE,如PyCharm, CLion,已解压安装到programs。启动示例pycharm xxx/./pycharm/bin/pycharm.sh xxx/(需X11,可安装MobaXterm获取)。简单但仅支持同时一个设备运行。

Conda

Miniconda — Conda documentation

配置国内镜像源:

新建环境:

# 查看环境
conda env list
# 或
conda info --envs
# 新建环境
conda create -n NAME pyton=3.9  # ==锁死小版本3.9.0,=不锁死小版本3.9.x
# 或拷贝已有环境,节省下载时间
conda create -n NEW --clone OLD

如果是非联网环境,可以通过打包并拷贝conda环境的方式,拷贝到相同目录后conda可以自动识别。要求绝对路径相同,如其他机器的同样用户名下的conda环境/root/miniconda3/envs

激活环境:

# 在base或某个conda环境下
conda activate ENV
# 若未在某个conda环境下
source ~/miniconda3/bin/activate ENV

设置代理:

# 配置(注意对特殊字符做URL Encode)
conda config --set proxy_servers.http http://[USER:PASSWORD@]PROXY.DOMAIN:PORT
conda config --set proxy_servers.https http://[USER:PASSWORD@]PROXY.DOMAIN:PORT
conda config --set ssl_verify false
# 删除
conda config --remove-key proxy_servers
# 查看
conda config --show proxy_servers

删除环境:

# 删除环境及所有包
conda remove -n ENV --all

conda安装环境时,可能会安装CUDA-Toolkit之类的库在~/miniconda3/lib下,部分程序可能默认访问/usr/local/cuda/lib64/下的库文件,导致报错,例如:

ImportError: torch/lib/libtorch_cuda_cpp.so: symbol cudaGraphRetainUserObject version libcudart.so.11.0 not defined in file libcudart.so.11.0 with link time reference

可以手动设置export LD_LIBRARY_PATH=~/miniconda3/lib/:$LD_LIBRARY_PATH解决问题。

如遇到CondaHTTPError: HTTP 000 CONNECTION FAILED,通常是网络不稳定,可在conda配置中删除channels, default_channels项,或者修改custom_channels项。目前发现:

  • 安装包conda install XXX,使用阿里源可行。
  • 将错误信息里的包链接XXX.tar.bz2手动下载之后,执行conda install xxx.tar.bz2进行安装,然后重新执行原安装命令,安装依赖项。不推荐,会丢失来源。

如果在conda create ENV时遇到如下错误,可在conda配置中删除channels, default_channels项,因为镜像源可能不适合用于创建环境,使用默认的pkgs能解决。

Collecting package metadata (current_repodata.json): failed
UnavailableInvalidChannel: The channel is not accessible or is invalid.
  channel name: anaconda/pkgs/main
  channel url: http://mirrors.aliyun.com/anaconda/pkgs/main
  error code: 403

如果遇到如下索引错误,通常是因为缓存中的索引文件因异常中断导致格式错误,可以使用conda clean -i清除索引缓存。

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
ERROR conda.auxlib.logz:stringify(163): Expecting value: line 1 column 1 (char 0)

如果遇到如下包安全检查错误,通常是因为通过不同方式安装了相同的包,手动删除路径对应的tar包和目录即可。

SafetyError: The package for xxx located at /home/xxx/anaconda/... 
appears to be corrupted. The path ... 
has an incorrect size.
    reported size: 7680 bytes
    actual size: 5695 bytes

Python

# 配置清华源
pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
# 删除配置
pip config unset global.index-url
pip config unset global.trusted-host
# 查看配置
pip config list

安装whl文件

pip install xxx.whl
# 卸载
pip uninstall xxx

源码安装库

cd xxx
python setup.py install
# 卸载
pip uninstall xxx

源码安装Python

cd Python-3.7.5
./configure --prefix=/root/miniconda3/envs/ci --enable-shared
make -j72
make install -j72
./configure --prefix=/root/miniconda3/envs/ci
make -j72
make install -j72

Jupyter

后台运行Jupyter,log会输出到nohup.out

nohup jupyter lab --ip=10.175.105.195 --port=1080 --allow-root &

CMake

支持非root用户安装:

  • Download | CMake页面找到“Binary distributions”,下载对应版本.sh文件,在希望安装的目录执行文件sh XXX.sh,根据提示完成安装。或者下载对应的压缩包,解压希望安装的目录。
  • 修改.bashrc,将安装目录下的bin/所在路径添加到PATH环境变量里,source .bashrc或者重新打开终端窗口。
  • 检查安装版本cmake --version

OpenCV

官网:Home - OpenCV
安装:OpenCV: Installation in Linux
支持非root用户安装,配置CMAKE_INSTALL_PREFIX

# 从Github或者官网下载:[Releases - OpenCV](https://opencv.org/releases/)
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
unzip opencv.zip

# Create build directory
mkdir -p build && cd build

# Configure
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=$HOME/programs/opencv/ ..

# Build,或者make -j4,通过nproc命令查询线程数
cmake --build . -j4

# Install,将include目录和lib目录拷贝到`CMAKE_INSTALL_PREFIX`
# 如果不拷贝到系统目录,则无需sudo
sudo make install

CUDA支持,WITH_CUDA=ON, OPENCV_DNN_CUDA=ON。OpenCV 4.0之后所有CUDA加速库被移到opencv_contrib下,需要将opencv和opencv_contrib一起build,即增加配置OPENCV_EXTRA_MODULES_PATH

# build with all modules in opencv_contrib
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# build with one of opencv_contrib modules
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/cudaarithm ../opencv

# 示例
cmake .. -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=$HOME/programs/opencv/ \
-D WITH_CUDA=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D WITH_CUBLAS=1 -D WITH_CUFFT=ON -D WITH_NVCUVID=ON \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.5/modules/

# 可选指定,未指定时自动识别
-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.3.3 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  \
-D CUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so

TensorRT

若使用root权限使用apt-get/yum安装,请下载deb/rpm包,否则请下载tar包,NVIDIA TensorRT 8.x Download

安装方法参考官方Install Guide,含deb、rpm、tar包等安装方法。

安装Boost

参考官网安装指导,支持非root用户安装,支持安装部分lib。在页面前部Get Boost获取源码下载链接,下载并解压,执行:

cd path/to/boost_1_82_0
./bootstrap.sh --prefix=$HOME/programs/boost_1_82_0/
./b2 install

安装GoogleTest/gtest

参考官方仓库使用指导,通常无需安装,直接下载源码,然后将源码集成到C++工程中。如需安装,下载源码,执行:

cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build

# Configure, Generate native build scripts for GoogleTest。 GoogleMock可选关闭。
cmake .. [-DBUILD_GMOCK=OFF] -D CMAKE_INSTALL_PREFIX=$HOME/programs/googletest/

# Build,或者make -j4,通过nproc命令查询线程数
cmake --build . -j4

# Install,将include目录和lib目录拷贝到`CMAKE_INSTALL_PREFIX`
# 如果不拷贝到系统目录,则无需sudo
sudo make install

C++编译器

GCC/G++,Clang/LLVM。
《CMake Best Practice》第 2 章笔记

将include目录添加到C/C++头文件搜索路径里:

export C_INCLUDE_PATH=/opt/rh/devtoolset-11/root/usr/include/c++/11
export CPLUS_INCLUDE_PATH=/opt/rh/devtoolset-11/root/usr/include/c++/11

在Ubuntu 22.04中安装Clang

sudo apt-get install libclang-14-dev clang-14

提示:libclang.so一般位于/usr/lib/x86-linux-gnu/libclang-10.so

在CentOS 7.6中安装Clang

yum install centos-release-scl-rh
yum install llvm-toolset-7.0-clang
# 使Clang在当前Session生效
source /opt/rh/llvm-toolset-7.0/enable
# 可选,修改.bashrc便于Clang自动生效
echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc

配置环境变量。为防止后续Clang无法自动找到头文件,建议添加如下环境变量。

export CPLUS_INCLUDE_PATH=/opt/rh/llvm-toolset-7.0/root/usr/lib64/clang/7.0.1/include

提示:libclang.so一般位于/opt/rh/llvm-toolset-7.0/root/usr/lib64/libclang.so.7

在SLES 12.5中安装Clang

sudo zypper install libclang7 clang7-devel

配置环境变量。为防止后续Clang无法自动找到头文件,建议添加如下环境变量。

export CPLUS_INCLUDE_PATH=/usr/lib64/clang/7.0.1/include

提示:libclang.so一般位于/usr/lib64/libclang.so

Clang

安装Clang预编译包

# 使用`uname -m`可获取机器硬件架构,例如返回`x86_64`
# 使用`cat /etc/os-release`可获取系统名称、版本等信息
NAME=`cat /etc/os-release | awk -F= '{if ($1=="NAME") print $2}'`
VERSION_ID=`cat /etc/os-release | awk -F= '{if ($1=="VERSION_ID") print $2}'`

if [ "$NAME" == '"Ubuntu"' ];then
  # 在Ubuntu 22.04中安装Clang
  if [ $VERSION_ID == '"22.04"' ];then
    sudo apt-get install libclang-14-dev clang-14
  else
    # 在Ubuntu 18.04中安装Clang
    sudo apt-get install libclang-10-dev clang-10
  fi
elif [ "$NAME" == '"CentOS Linux"' ];then
  # 在CentOS 7.6中安装Clang
  yum install centos-release-scl-rh
  yum install llvm-toolset-7.0-clang
  ENABLE="source /opt/rh/llvm-toolset-7.0/enable"
  CPLUS_INCLUDE_PATH=/opt/rh/llvm-toolset-7.0/root/usr/lib64/clang/7.0.1/include
  # 可选,修改.bashrc便于Clang自动生效
  echo $ENABLE >> ~/.bashrc
  # 配置环境变量。为防止后续Clang无法自动找到头文件,建议添加如下环境变量。
  echo "export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> ~/.bashrc
elif [ "$NAME" == '"SLES"' ];then
  # 在SLES 12.5中安装Clang
  sudo zypper install libclang7 clang7-devel
  CPLUS_INCLUDE_PATH=/usr/lib64/clang/7.0.1/include
  export $CPLUS_INCLUDE_PATH
  echo "export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> ~/.bashrc
else
  echo "Warning: $NAME is not supported automatic installation of Clang, Please install it manually."
fi

# 必须通过`source`或`.`执行脚本,其中的环境变量才会在当前bash生效
# 新建bash也可以使环境变量立即生效
bash

源码编译安装Clang

如果无法通过上述方法或者包管理工具安装Clang>=6.0.0,可以在LLVM Release页面尝试
下载对应平台的安装包。如果以上方法都不可行,则可以通过源码编译安装LLVM和Clang,详细安装指导参考
Getting Started with the LLVM System。编译LLVM依赖一些软件包,
需用户提前确保依赖满足,或者自行手动安装依赖。下表列出了这些依赖,“包名”列是LLVM所依赖的软件包通常的名称,
“版本”列是“可以工作“的软件包版本,“说明”列描述了LLVM如何使用这个软件包。

包名 版本 说明
CMake >=3.20.0 生成Makefile/workspace
GCC >=7.1.0 C/C++编译器
zlib >=1.2.3.4 压缩/解压功能
GNU Make 3.79, 3.79.1 编译Makefile/build

下面以Clang7.0.0为例编译安装LLVM和Clang。

获取源码。通过Git获取源码,包括LLVM和Clang子工程,切换到对应版本。

git clone https://github.com/llvm/llvm-project.git
git checkout llvmorg-7.0.0

或者直接下载对应版本的源码zip包。

wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-7.0.0.zip
# 如果没有安装wget,可以采用curl
curl -o llvmorg-7.0.0.zip https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-7.0.0.zip
# 解压得到llvm-project-llvmorg-7.0.0目录
unzip -q llvmorg-7.0.0.zip

编译和安装LLVM和Clang。

cd llvm-project-llvmorg-7.0.0/; mkdir build; cd build
# 建议不开启libcxx;libcxxabi,使用默认的gcc/g++配套的libstdc++
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" -G "Unix Makefiles" ../llvm
make -j32  # 将32换成小于所在机器CPU线程数的数字,或者去除数字,自动设定
make install  # 安装到默认位置/usr/local/lib/

配置环境变量。为防止后续Clang无法自动找到头文件,建议添加如下环境变量。

export CPLUS_INCLUDE_PATH=/usr/local/lib/clang/7.0.0/include

提示:libclang.so一般位于/usr/local/lib/libclang.so

CUDA

CUDA官网见CUDA Toolkit - Free Tools and Training | NVIDIA Developer,包含下载、发行说明、安装指导和文档。三方教程见保姆级安装NVIDIA CUDA、CUDNN

CUDA Toolkit与Toolkit Driver版本配套关系,参见CUDA 12.2 Release Notes,包括:

  • CUDA Toolkit and Minimum Required Driver Version for CUDA Minor Version Compatibility
    • Using a Minimum Required Version that is different from Toolkit Driver Version could be allowed in compatibility mode – please read the CUDA Compatibility Guide for details.
  • CUDA Toolkit and Corresponding Driver Versions
    • For convenience, the NVIDIA driver is installed as part of the CUDA Toolkit installation. Note that this driver is for development purposes and is not recommended for use in production with Tesla GPUs.

从CUDA 11开始,各个组件分别设置版本。

安装流程为:

  1. 下载CUDA Toolkit 12.2 Update 1 Downloads
  2. 安装:先安装CUDA Driver,再安装CUDA Tookit
  3. 配置环境变量

安装指导见:

Rust

在 Windows 上针对 Rust 设置开发环境 | Microsoft Learn

VSCode插件:Rust with Visual Studio Code

配置Rustup镜像源

配置Crates镜像源

.cargo/config配置示例

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

[source.tsinghua]
registry = "sparse+http://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"

[http]
check-revoke = false

相关文章

  • 2019-05-27

    基本每个项目都会有开发环境(本地环境)、开发集成环境、测试环境、预发布环境、正式环境。最少也有开发环境(本地环境)...

  • 什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?

    项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境? 项目开发过程中什么是开发环境、测试环境、...

  • ExpressionChangedAfterItHasBeenC

    开发环境 ‘ExpressionChangedAfterItHasBeenCheckedError’。 在开发环境...

  • Asp.net Core 环境选择

    环境选择:Production是生产环境Development是开发环境项目一般在发布前,都是开发环境。开发环境和...

  • 开发和发布相关的三个环境

    开发环境,开发人员使用 测试环境,测试人员使用 生产环境 开发环境和测试环境独立开,是为了测试进行的同时,开发可以...

  • 构建 Maven 环境隔离

    实际的项目环境: 本地开发环境(Local) 开发环境(Dev) 测试环境(Beta) 线上环境(Prod) 环境...

  • 从0到1搭建企业分布式系统-02-环境整理

    开头 首先对企业级系统进行一个环境梳理,主要分为开发环境、测试环境、生产环境,需要严格隔离 开发环境 开发环境主要...

  • web端区分不同的开发环境

    web端如何区分不同的开环境 前言 在项目开发中我们经常会遇到这个问题,本地开发环境,线下开发环境,预上线开发环境...

  • vue请求跨域问题解决

    production:产品 生产环境 development:开发 开发环境 1、开发环境设置跨域 使用工具:vu...

  • Lombok与Maven环境隔离

    Lombok注解 Maven环境隔离 本地开发环境(Local) 开发环境(Dev) 测试环境(Beta) 线上环...

网友评论

      本文标题:开发环境

      本文链接:https://www.haomeiwen.com/subject/fltpprtx.html