Toccata in Nowhere.

无Root配置科研环境:zsh插件、conda/python环境等

2022.07.27

使用公共服务器时,通常无法取得更高权限。本文介绍适用于服务器集群等无 root 权限条件情况下的zsh与插件配置、conda / python 安装、以及服务器免密登陆配置。

zsh 安装与配置

基础:zsh 安装

首先,检查本机是否安装 zsh

which zsh

如果显示为一个路径,例如 /bin/zsh 说明本地安装有zsh,且路径如上。可以跳过本节与下一节,进行oh-my-zsh的安装。如果显示 zsh not found 则需要安装 zsh,以下演示把 zsh 安装到用户目录的zsh文件夹中:

wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download --no-check-certificate
mkdir zsh && unxz zsh.tar.xz && tar -xvf zsh.tar -C zsh --strip-components 1
cd zsh
./configure --prefix=$HOME/zsh
make && make install

此处$HOME/zsh可以换成其他位置,例如$HOME/Software/zsh

安装完成后,在当前shell的配置文件(对bash.bashrcsh则是.profile)中加入环境变量,注意环境变量中 zsh/bin 位置应该和安装位置匹配:

export PATH=$HOME/zsh/bin:$PATH

并且使当前环境变量生效(以.bashrc为例):

source ~/.bashrc

此时可以通过 zsh 命令启动并切换到 zsh,且 which zsh 也应该返回 zsh 的安装路径

异常处理

可能的错误信息 This is probably a library called 'curses' or 'ncurses'. ,此时安装curses即可:

wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz
mkdir ncurses
tar -xvf ncurses-6.0.tar.gz
cd ncurses-6.0
./configure --prefix=$HOME/ncurses --with-shared --without-debug --enable-widec
make && make install

这里 $HOME/ncurses 同样可以替换为其他目录,之后配置环境变量,如果安装在其他地方,应同样注意修改安装位置路径。之后配置环境变量:

export CXXFLAGS="-fPIC"
export CFLAGS="-fPIC"
export NCURSES_HOME=$HOME/ncurses  # install path
export PATH=$NCURSES_HOME/bin:$PATH
export LD_LIBRARY_PATH=$NCURSES_HOME/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$NCURSES_HOME/include" LDFLAGS="-L$NCURSES_HOME/lib"

在环境变量后使环境变量生效:

source ~/.bashrc

之后重新make && make install 安装 zsh 即可。

将 zsh 设定为默认 shell

通常,如果zsh为内置安装,可以通过 chsh -s zsh 在输入密码后修改登陆 shell。

但如果 zsh 是新安装的,或不受信任,chsh无法执行,则可以通过添加以下语句到默认 shell 配置文件中(zsh环境变量设置后),从而实现登陆后自动启动切换:

if [[ ($- == *i*) && ($SSH_TTY) ]];
then
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
fi

以上语句只对 ssh 访问生效,因此不会影响 SFTP 和远程调试等功能。

oh-my-zsh 安装

切换到 zsh 后:

git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
source ~/.zshrc

即可安装并启动 oh-my-zsh

autojump 插件安装

同样,在切换到 zsh 后:

git clone https://github.com/wting/autojump.git
cd autojump
./install.py

其中最后一句./install.py 需要Python才能执行,如果系统中没有默认安装 Python,可以在下一章 conda 安装完成后再进行 autojump 插件安装。

安装完成后可以使用 j 关键字 进行文件夹目录的快速跳转与转换。

Conda / Python 安装

以下以 miniconda 安装为例,运行:

 wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
 sh Miniconda3-latest-Linux-x86_64.sh

在输入若干yes,并选择安装路径后,一步步完成安装。安装完成后可以打开 ~/.zshrc 检查 conda 的环境变量是否加入:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# ....环境变量....
# <<< conda initialize <<<

如果没有,则需要前往~/.bashrc 复制相关环境变量到~/.zshrc中。并使其生效:

source ~/.zshrc

此时应该能看到shell前方出现了当前 Python 环境的名字(base):

(base) ➜  ~

尝试新建一个环境:

conda create -n demo python=3.8

ssh 免密登陆

在本地 ssh-keygen 创建证书,连续回车使用默认配置即可,之后复制本地的公钥文件到服务器:

ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@xxx.xxx.xxx.xxx

其中 UserNamexxx.xxx.xxx.xxx 分别需要替换为服务器的用户名和服务器地址。 如果非默认22端口,需要指定端口,可以使用:

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 495 UserName@xxx.xxx.xxx.xxx

另外,需要保证用户目录下 .ssh/authorized_keys 文件仅用户自己有写权限,否则校验无效:

(在服务器上登陆后)

chmod 600 $HOME/.ssh/authorized_keys

CUDA 环境变量设置

如果在 GPU 服务器上 which nvcc 显示未找到,需要对 cuda的环境变量进行配置,将以下环境变量加入 .zshrc

export PATH=$/usr/local/cuda/bin:$PATH”
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$/usr/local/cuda/lib64/

以上例子为使用默认cuda,如果有多个 cuda 版本,可以进行修改替换。 此外,无root环境下更新 CUDA 版本与安装 cudnn 可以参考本站文章

Reference

Here4U: 服务器管理

medium: Change your shell to zsh on a remote server — with or without root access