用OpenWrt单独编译ipk插件
点击注册订购clash/ssr/v2ray小火箭等机场节点。69折优惠码:XN2023
在给我的渣米r3路由器刷pandora固件后,发现从软件源直接安装的luci-app-ssr-plus 版本过低,所以尝试自编译大佬最新的release并通过opkg来安装,中间踩了不少坑(基本都是吃了guo内网络的亏)。
下面以自编译luci-app-ssr-plus插件为例。
运行环境:小米路由器R3,MT7620,pandora固件
准备编译需要的工具Lean大神的开源插件编译环境:推荐Ubuntu 64bit,我选Ubuntu 18.04 LTSOpenWrt SDK:链接 (注意:请根据自己的路由器的架构选择,我的r3选openwrt-sdk-19.07.0-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64.tar.xz)编译插件
注意:不要在root下编译!
更新依赖
sudo apt-get updatesudo 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 upxcd /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 100arch mipsel_24kec_dsp 200arch 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 插件
[2] 为原版Openwrt安装SSR-plus插件
[3] OpenWrt 编译步骤与命令详解
[4] openwrt单独编译lean的ssrplus(ssr-plus)
[5] Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)