记录一下我在服务器上鼓捣了什么,系统版本是CentOS7.9,由于普通用户没有 root 用户权限,服务器还不联网,不能使用傻瓜式的安装,只能在用户家目录下使用源码编译的方式安装软件。

虽然我可以登root账户,但是root操作有风险,可能把公共服务器搞坏了,还是选择用普通账户操作。

tmux

安装过程主要参考官方wiki和非root用户安装tmux - 三三仨仨的文章 - 知乎

下载 tmux-3.2a.tar.gz,还需要两个依赖:

  • libevent-2.1.12-stable.tar.gz
  • ncurses.tar.gz (ncurses-6.3)

如果可以通过包管理器下载依赖,当然更好。

完整安装过程如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd ~/tmp
tar -zxvf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable/
./configure --prefix=$HOME/.local --enable-shared
make && make install

cd ~/tmp
tar -zxvf ncurses.tar.gz
cd ncurses-6.3/
./configure --prefix=$HOME/.local --with-shared --with-termlib --enable-pc-files --with-pkg-config-libdir=$HOME/.local/lib/pkgconfig
make && make install

cd ~/tmp
tar -zxvf tmux-3.2a.tar.gz
cd tmux-3.2a/
PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig ./configure --prefix=$HOME/.local
make && make install

which tmux
tmux -V

在CentOS7中使用tmux3.2可能出现ctrl+l无法清屏的问题,问题出在tmux-256color上,CentOS7.9不支持。 一种解决办法是在.bashrc中设置

1
export TERM=xterm

更改这个环境变量可能导致出现很多其它问题,尤其影响在shell中的交互行为,出现的异常包括:vim打开报错,命令提示符可能重复出现等。

安装了fish之后,进一步测试发现screen-256color在各种地方都可以工作,因此在config.fish中设置

1
set -gx TERM screen-256color

只要这里提前设置了TERM,在tmux.conf中的tmux-256color配置命令就不会生效。在.bashrc中则不再进行设置。

tmux其实还有一大堆的问题,尤其是在CentOS等老旧的系统中,包括颜色显示,字符处理,光标显示等各种问题,例如在tmux中的bash使用ls不会自动显示颜色,因为tmux启动bash时跳过了某些配置文件,但是这个问题对于ubuntu似乎没有出现。再比如有时vim的光标切换在tmux中有时会失效。

git

下载 git-2.34.8.tar.gz,完整安装过程如下

1
2
3
4
5
6
7
8
cd ~/tmp
tar -zxvf git-2.34.8.tar.gz
cd git-2.34.8/
./configure prefix=$HOME/.local/
make && make install

which git
git --version

后续发现在Ubuntu20源码编译安装得到的git有问题,尝试使用https协议克隆仓库时报错

1
git: 'remote-https' is not a git command. See 'git --help'.

可能是没有正确使用libcurl或者openssl的原因,还是删掉吧。

但是默认的2.25版本的git有各种问题,例如默认的分支名居然还是master,配置的defaultBranch=main完全无效,还是升级一下吧,使用下面的方式基于apt下载

1
2
3
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

这里提供的git版本也太高了,直接整到2.47了。

cmake

下载 cmake-3.22.1.tar.gz,完整安装过程如下

1
2
3
4
5
6
7
8
9
cd ~/tmp
tar -zxvf cmake-3.22.1.tar.gz
cd cmake-3.22.1/
./bootstrap
./configure --prefix=$HOME/.local/
make all -j8 && make install -j8

which cmake
cmake --version

tree

这个简单常用的小命令在服务器上居然也没有,真不知道安装的CentOS到底是个啥。 下载源码然后编译安装一下,各种资料里面指向的tree源代码网站好像关闭了,找了别的备份才找到。

1
2
3
4
5
6
7
8
wget http://sources.buildroot.net/tree/tree-1.8.0.tgz

# scp ...

cd ~/tmp
tar -zxvf tree-1.8.0.tgz
cd tree-1.8.0/
make && make prefix=$HOME/.local install

注意这里在make install的中间传递prefix参数,具体传递哪一个参数(还可能是DESTDIR)要看Makefile怎么写的。

这种小工具的版本是无所谓的,因此如果能通过apt等包管理器直接下载安装,当然更省事。

fish

fish有一个依赖的pcre2,可能需要先编译安装。

安装pcre2(pcre2-10.44.tar.gz)时,必须加上编译选项--enable-pcre2-16--enable-pcre2-32,否则默认只有8位的库,fish会报错

1
2
3
4
5
cd ~/tmp
tar -zxvf pcre2-10.44.tar.gz
cd pcre2-10.44
./configure --prefix=~/.local --enable-pcre2-16=yes --enable-pcre2-32=yes
make -j8 && make install

然后安装fish(fish-3.3.1.tar.xz),通过编译选项指定FISH_USE_SYSTEM_PCRE2使用系统中的pcre2

1
2
3
4
5
cd ~/tmp
tar --xz -xf fish-3.3.1.tar.xz
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=~/.local -DFISH_USE_SYSTEM_PCRE2=ON
cd build
make -j8 && make install

ninja

CMake还是搭配ninja比较舒服。

从github仓库下载njina的源码压缩包 ninja-1.11.1.tar.gz

1
curl -LJO https://github.com/ninja-build/ninja/archive/refs/tags/v1.11.1.tar.gz

完整安装过程如下,直接使用cmake以及系统自带的gcc编译安装即可

1
2
3
4
5
6
7
8
9
10
cd ~/tmp
tar -zxvf ninja-1.11.1.tar.gz
cd ninja-1.11.1/
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=~/.local
cd build
make -j8
make install

which ninja
ninja --version