在给我的渣米r3路由器刷pandora固件后,发现从软件源直接安装的luci-app-ssr-plus
版本过低,所以尝试自编译大佬最新的release并通过opkg来安装,中间踩了不少坑(基本都是吃了guo内网络的亏)。
下面以自编译luci-app-ssr-plus插件为例。
运行环境:小米路由器R3,MT7620,pandora固件
准备编译需要的工具
- Lean大神的开源插件
- 编译环境:推荐Ubuntu 64bit,我选Ubuntu 18.04 LTS
- OpenWrt SDK:链接 (注意:请根据自己的路由器的架构选择,我的r3选
openwrt-sdk-19.07.0-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64.tar.xz
)
编译插件
注意:不要在root下编译!
-
更新依赖
sudo apt-get update sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib linux-libc-dev:i386
- 解压准备好的SDK并命名为
openwrt-sdk
;克隆L大的源码到本地,将lede/package
下的文件全部拷贝并覆盖至openwrt-sdk/package
。 -
进入openwrt-sdk文件夹,安装feeds软件包
cd openwrt-sdk ./scripts/feeds update -a && ./scripts/feeds install -a
-
个性化openwrt组件,这一步要把需要编译的软件以及相应的插件选上(复选框变为M,单独编译出模块)
make menuconfig
进入
LuCI → Applications
,并选上luci-app-ssr-plus
。(下面插件自己决定选不选,kcptun不建议)然后save,并esc退出即可。
-
预下载软件包
这里强烈建议全局科学上网,真全局的那种,比如surge的增强模式。
-j8指用8个线程下载,这里将数字改为你电脑cpu的线程数+1就行。耐心等待下载完,这样可以避免编译的时候出现网络错误导致浪费大量时间。make download -j8 V=s
-
校验下载的文件的完整性(可选)
方法出处
find dl -size -1024c -exec ls -l {} \;
如果有小于1k的文件,说明下载可能不完整,可以再次
make download
。不过我编译时用此命令检测出三个文件不正常,我下了很多次这三个都存在,但最后却不影响编译,所以如果(小于1k文件)数目多且明显时,可以反复检查。
-
开始编译插件
ssr-plus依赖于luci的一些组件,故先编译
luci-base
:make package/feeds/luci/luci-base/compile V=s
然后单独编译插件即可,时间很长,可以去喝杯coffee。
make package/lean/luci-app-ssr-plus/compile -j1 V=s
首次编译请选单线程编译(-j1),因为多线程下若出错不容易debug。
- 编译顺利的话,可以在
bin/packages/你的路由器架构/base/
下找到编译完的ipk。
编译中可能的出错
-
ERROR: module \’xxxx\’ is missing.多半是下载软件包时出现了问题,有module没有下载下来。
这体现开真全局代理下载的重要性,重新跑下
make download
吧。 -
编译v2ray包时,出现
bash:/.../staging_dir/host/bin/upx: No such file or directory
坑爹问题,我的解决办法如下:
先确保ubuntu里装了upx,然后将/usr/bin下的upx和upx-ucl复制到报错目录就行了
whereis upx cd /usr/bin/ cp upx /home/jarvis/Desktop/openwrt-sdk-19.07.0-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64/staging_dir/host/bin/ cp upx-ucl /home/jarvis/Desktop/openwrt-sdk-19.07.0-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64/staging_dir/host/bin/
安装ipk插件至路由器
将ipk文件复制到/tmp目录下,然后执行:
opkg install /tmp/luci-app-ssr-plus_149-1_all.ipk
此时可能会报架构不兼容错误:
- pkg_hash_fetch_best_installation_candidate: Packages for xxx found, but incompatible with the architectures configured
详细解决方法看文章:修改opkg.conf解决incompatible with the architectures configured问题
# 查看当前安装的软件包的架构
opkg info | grep Architecture
# 根据架构,修改/etc/opkg.conf,在后面追加下面的代码
# 下面是我的架构,请根据自己路由的架构来修改,100,200代表优先级
arch all 100
arch mipsel_24kec_dsp 200
arch mipsel_24kc 300
再次执行opkg install
可能还会报没有相应依赖
# 没有安装依赖导致无法安装此包
* satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-app-ssr-plus:
...
* opkg_install_cmd: Cannot install package luci-app-ssr-plus.
其实它的依赖包在编译的时候也都编译好了,均在bin/packages/你的路由器架构/base/
下,把这些同样拷贝到路由的/tmp下,先安装这些依赖包即可。
安完后,如果在左侧菜单栏看不到插件,执行下面代码即可:
echo 0xDEADBEEF > /etc/config/google_fu_mode
修改软件包配置并再次编译的问题
现在我的luci-app-ssr-plus
软件包是默认全勾选相关插件的
若我不想要编译kcptun
,重新编译该怎么操作?
# 先修改插件配置,比如我把kcptun取消勾选
make menuconfig
# 清除编译缓存,可以把bin下先前编译完的ipk也删了,保险吧
rm -rf tmp
# 再次重新编译即可
make package/lean/luci-app-ssr-plus/compile -j1 V=s
参考资料
[1] GL-iNet AR750 官方固件安装 SSR Plus 插件
发表评论