- 系里给的服务器虽然配置很好,但是因为没有root权限导致很多工具都要手动安装。像Java、Python之类的常用编译环境我可以理直气壮地发邮件让管理员帮忙装,但是zsh这种纯属自己瞎折腾的环境就不得不靠自己了... 这里记录一下安装zsh过程中的各种坑。
1. 安装ZSH
- 参考攻略
不使用root权限安装zsh和oh-my-zsh
源码安装ncurses-devel
Building zsh without admin priv: No terminal handling library found
zsh与scp的冲突问题
-
安装思路
- 没有sudo权限意味着无法在/usr/下各个文件夹中创建文件,所以只能安装到自己的home目录下。
- 由于没有apt-get、yum等各种管理工具,碰到依赖问题我们都必须一个个手动解决。环境变量也得自己添加。
- 同时因为权限不足,无法修改/etc/passwd文件,也就无法修改自己登录的默认shell了。我们采取登录后自动跳转zsh的方法来解决这个问题。
-
注意事项
- zsh与scp不兼容。因此需要想办法绕开这个问题(后文有解决办法)
- zsh会强行解释命令中的通配符(如*等字符),且解释失败会报错并拒绝执行命令。这在一些场合非常令人恼火,比如执行命令
hdfs dfs -cat output/*
时,字符*
应该交给hdfs
系统来处理,用来匹配hdfs
文件系统中的文件,而不是由zsh进行解析。解决方法为在命令的两端加上双引号,即变为"hdfs dfs -cat output/*"
; 或者一劳永逸,往~/.zshrc
中加入setopt no_nomatch
,这会使得zsh在解释失败后不报告错误,继续执行命令。
开始安装
# 创建zsh的安装位置。这个位置是自定义的,只要是在自己的home目录下即可。版本号最好跟下载下来的zsh版本对应,不然会产生混淆。
cd ~
mkdir Applications
mkdir Applications/zsh-5.7.1
# 下载源码并把压缩包命名为zsh.tar.xz
wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download
# 解压,这里下载下来的是xz格式,要先用xz解压一遍,再用tar解压。
xz -d zsh.tar.xz
tar -xf zsh.tar
cd zsh-5.7.1 # 注意这个版本号要根据自己的实际情况来
# 配置与编译。--prefix选项指定安装目录
./configure --prefix=$HOME/Applications/zsh-5.7.1
make
make install
配置zsh环境
vim ~/.bashrc
# 在.bashrc文件中加入以下命令
export PATH=$HOME/Applications/zsh-5.7.1/bin:$PATH
# 保存并退出vim后,导入.bashrc配置
source ~/.bashrc
- 配置好zsh的环境变量后,就可以使用
exec zsh
命令来切换到zsh了。接下来安装oh-my-zsh, 只需要以下命令即可:
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
将zsh设置为默认shell
- 前面提到,没有sudo权限便无法更改
/etc/passwd
文件,也就无法更改默认的登录shell了。同样chsh
命令也无法使用。这里我们通过修改.bash_profile
来自动切换到zsh
. 将以下命令加到~/.bash_profile
中:
[ -f $HOME/Applications/zsh-5.7.1/bin/zsh ] && exec $HOME/Applications/zsh-5.7.1/bin/zsh -l
- 注意zsh与scp不兼容,所以不要把该命令写到
.bashrc
中。因为当我们使用scp命令从本地连接该Linux服务器时,系统会自动执行.bashrc
(而不会执行.bash_profile
),如果.bashrc
中有切换到zsh的命令,则系统的shell会被切换到zsh, 从而与scp产生兼容的问题。
.bash_profile
只有当交互式登录shell时(如系统启动、远程登录)才会被读取并执行,而.bashrc
在交互式登录与非交互登录(如使用scp从本地连接到该Linux服务器)时都会被读取且执行。
遇到的问题
- 运行
./configure
命令时可能会遇到无法找到ncurses-devel
的问题。如下:
- 这时我们需要手动安装ncurses-devel.
- 下载地址为http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
- 需要注意的是在编译ncurses-devel之前需要设置一些编译选项
# 打开.bashrc
vim ~/.bashrc
# 在.bashrc中加入以下内容
export CXXFLAGS=" -fPIC"
export CFLAGS=" -fPIC"
# 保存退出后,用source命令使刚才的改动生效
source ~/.bashrc
- 安装ncurses-devel
# 下载
cd ~
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
tar -xf ncurses-6.1.tar.gz
cd ncurses-6.1
mkdir Applications/ncurses-6.1
./configure --prefix=$HOME/Applications/ncurses-6.1 --with-shared
make
make install
- 安装好了之后,还需要配置一些环境变量
vim ~/.bashrc
# 在.bashrc中加入以下命令.
# 其中环境变量$NCURSES_HOME的设置不是必需的,这里只是为了引用方便而加入
export NCURSES_HOME=$HOME/Applications/ncurses-6.1
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"
# 保存并退出vim,然后加载.bashrc
source ~/.bashrc
- 这时,再继续运行以下命令来安装zsh
cd ~/zsh-5.7.1
./configure --prefix=$HOME/Applications/zsh-5.7.1
make
make install