在没有管理员权限的Linux服务器上安装emacs和zsh

工作中经常需要在服务器(Centos)上敲代码,但是实在不习惯vim的按键习惯,也不满意默认的终端,想换上称手的emacs和zsh。但是由于没有服务器管理员权限,在安装过程中就碰到了各种问题,所幸最后都解决了,现做个记录。

安装Emacs

1. 下载Emacs源代码

Emacs官网下载最新的emacs版本emacs-26.1.tar.gz

上传到服务器解压

1
tar -xf emacs-26.1.tar.gz

2. configure

一般如果有管理员权限,直接configure就可以了:

1
./configure

但是这样配置软件会安装在/usr/bin下,没有管理员权限会安装失败,所以需要指定一个用户目录安装软件,比如~/software/emacs(实际需要绝对路径):

1
./configure --prefix=/home/username/software/emacs

因为是在服务器上运行,所以没必要安装界面程序,可以将with-x设置为no:

1
./configure --prefix=/home/username/software/emacs --with-x=no

这样运行之后会提示:

1
configure: error: The following required libraries were not found:   gnutls

谷歌gnutls发现这是一个安全通信相关的库,如果只是写写代码的话可以不需要这个库,所以果断给pass掉:

1
./configure --prefix=/home/username/software/emacs --with-x=no --with-gnutls=no

再次运行依然提示错误:

1
configure: error: The required function 'tputs' was not found in any library

谷歌了下这个错误,发现缺少ncurses-devel库,因为没有管理员权限,我们不能使用yum安装,只能自己手动编译。

  1. 下载ncurses-6.1.tar.gz,并解压

  2. 进入解压之后的目录

    1
    2
    3
    ./configure --prefix=/home/username/software/ncurses
    make
    make install

ncurses安装完之后,就可以在配置emacs安装程序的时候指定ncurses库了:

1
./configure --prefix=/home/username/software/emacs --with-x=no --with-gnutls=no LDFLAGS=-L/home/username/software/ncurses/lib CPPFLAGS=-I/home/username/software/ncurses/include

这样就可以配置成功了。

3. make

配置成功之后编译:

1
make

4. make install

编译完之后开始安装:

1
make install

安装Zsh

安装zsh同样会因为没有管理员权限不能使用yum安装,只能从源码编译,过程与emacs安装大同小异。巧的是,安装zsh也会用到ncurses库。但是如果直接使用上述方法编译ncurses在make zsh的时候会报链接错误,需要在配置ncurses的时候指明生成动态链接库:

1
./configure --prefix=/home/username/software/ncurses --enable-shared