在没有sudo权限的Linux服务器下安装oh-my-zsh

  • 系里给的服务器虽然配置很好,但是因为没有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的冲突问题
  • 安装思路

    1. 没有sudo权限意味着无法在/usr/下各个文件夹中创建文件,所以只能安装到自己的home目录下。
    2. 由于没有apt-get、yum等各种管理工具,碰到依赖问题我们都必须一个个手动解决。环境变量也得自己添加。
    3. 同时因为权限不足,无法修改/etc/passwd文件,也就无法修改自己登录的默认shell了。我们采取登录后自动跳转zsh的方法来解决这个问题。
  • 注意事项

    1. zsh与scp不兼容。因此需要想办法绕开这个问题(后文有解决办法)
    2. 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
  • 这时我们需要手动安装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

你可能感兴趣的:(在没有sudo权限的Linux服务器下安装oh-my-zsh)