为Padavan添加自定义zsh插件及oh-my-zsh配置使用

Padavan 固件虽然内核足够老,但是胜在性能较 openwrt 有优势,对于某些路由器来说受众还是很广泛的,比如当年的神机 k2p 一直为我打工许多年,直到前段时间有了更好的选择:东哥的无线宝。虽然师出同门(mt7621),但是背靠大内存的加持还有自带一块并不太小的 emmc 存储,可谓是风光无限。更重要的是设备还可以白嫖,我手上的这个便是,64G 的加速版,如今新机(二代、三代)辈出,廉颇已老,赚分能力几乎已经完全退化。本来想海鲜市场出掉,可怜身价低微,哎~~~

本着不吃灰的信念,就让它继续发挥余热吧。刷机是自然的,感谢那些热心付出的小伙伴们。我的设备已经自动更新到那个不能降级的版本了,无法简单刷机,不过方法还是有的:拆机用编程器直接烧录,不知道的可自行搜索。

既然同为 mt7621 平台,固件自然可以有 openwrt 和 padavan 可选,有第三方发布的现成固件可用,也可以像飞尘这样根据自己的需求自行编译。对于 openwrt 我没能在 github 觅得好的仓库,padavan 还是有几个的,只是我目前试下来无线功能都无法正常工作,不过我个人是做主路由使用,由 AP 来提供无线接入,这个问题就没什么影响了。

个人平时习惯了 oh-my-zsh 的懒人习惯,对于登录到路由器时也有点强迫症,如果是用 openwrt 这一切实现起来很容易,但谁让我用的是 padavan 呢。为了这点儿心头好,真是煞费了一番苦心啊,好在结果还算满意。

首先需要解决的是 zsh,搜罗一圈没有可参考的,只能自己想办法了。给 padavan 添加插件我还是有些心得的(之前折腾过那个瑞的),不过比不了那些大佬们,用源码编译集成插件这条路对我来说还是太难了。我所能及的是曲线救国,找到现成编译好的插件可执行文件直接塞进固件里,虽然有点丑,不过能用就行。开始从 openwrt ipk 那边提取出来的文件直接放到路由器里去执行不成功,说的是 ramips_24kc 兼容 ramips_1004kc,但结果并不是。后来从 openwrt 15.05.1 同样 ramips_1004kc 的 ipk 里扒出来的文件可以执行。美中不足的是 zsh 的版本有些老旧了,才 5.1,不甘心,另寻他法。考虑过用新版源码编译,且不说如何得到 ramips_1004kc 的交叉编译的结果,还有依赖的各种问题,最终会不会和 padavan 老旧的内核兼容等等,我是浑身一哆嗦啊。

好在还有个静态编译的选项,果然 Debian 为我们带来了光明,刚好有 mipsel 架构,马上上到路由器,可用,心中一阵喜悦:-) 有了可执行文件,接下来就简单了,弄个 Makefile(https://github.com/felix-fly/rt-n56u/blob/master/trunk/user/zsh/Makefile) 把文件塞进固件就可以了。

zsh 已经搞定,接下来就轮到 oh-my-zsh 了。个人之前为 openwrt 弄了一个安装脚本,直接拿来用还是有点水土不服的,padavan 系统给 /home 分区的大小只有 1mb,直接安装 oh-my-zsh 空间不够的,而且安装到这里的话文件也无法长久保留,重启会丢,所以这里需要为 padavan 进行一些定制。我们将其安装到 /etc/storage/zsh 下,这样可以提交保存到路由器的闪存。默认情况 /etc 分区为 6mb,有可能不太够用,可以在编译时适当增大 dev_init.sh 文件里 size_etc="6M" 的数值,比如改为 16M。如果用第三方固件或者现有固件分区容量不够,可以先安装到 /tmp 目录下,稍后再转移到 /etc/storage 下。安装默认选择不保留大约 5mb 的插件,这样的 oh-my-zsh 占用约 800k。

mkdir /etc/storage/zsh
cd /etc/storage/zsh
wget https://raw.githubusercontent.com/felix-fly/openwrt-ohmyzsh/master/install.sh
sed -i 's/ZSH:-~\//ZSH:-/' install.sh
sed -i 's/command -v/echo 1/' install.sh
chmod +x install.sh
./install.sh
exit

oh-my-zsh 安装完还需要进行一些配置,将默认 /home 下的文件转移到 storage 下以方便持久化。这里还是遇到了一点问题,如果不设置 TERM 环境变量,会显示乱码,删除回显也不正常。配置 HISTFILE 和 ZDOTDIR 是将 zsh 生成的 .history .zcompdump-XXX 文件 也放置于 storage 下,不配置 TERMINFO 变量 htop 无法正常工作,配置后又会报 xterm-256color 找不到的错误。经过不懈的努力更新了固件中的 terminfo.tar.gz 文件最终完美解决

cd /etc/storage/zsh
chmod 644 -R .oh-my-zsh
rm .oh-my-zsh/lib/vcs_info.zsh
rm install.sh
mv ~/.zshrc .
sed -i '1i export TERM=xterm' .zshrc
sed -i '1i export TERMINFO=/usr/share/terminfo' .zshrc
sed -i '1i export HOSTNAME=\`/bin/hostname\`' .zshrc
sed -i '1i export ZDOTDIR=/etc/storage/zsh' .zshrc
echo "export HISTFILE=/etc/storage/zsh/.hisotry" >> .zshrc
echo "alias df='df -Th'" >> .zshrc
ln -s /etc/storage/zsh/.zshrc ~/.zshrc

padavan 系统默认 root 的 shell 是 /bin/sh,我们需要在路由启动完成后把它替换为 zsh,同时为 .zshrc 建立软连接并设置 oh-my-zsh 权限

echo "sed -i 's/bin\/sh/usr\/bin\/zsh/' /etc/passwd" >> /etc/storage/started_script.sh
echo "ln -s /etc/storage/zsh/.zshrc ~/.zshrc" >> /etc/storage/started_script.sh
echo "chmod 644 -R /etc/storage/zsh/.oh-my-zsh" >> /etc/storage/started_script.sh
  • 本文作者:飞尘
  • 版权声明:本站所有文章除特别声明外,均可转载,转载请注明出处!