2023年打造自己特色的openwrt官方固件

移植各家openwrt应用,源码采用openwrt官方源码,打造出适合自己的openwrt固件。

几年前写过 如何编译移植lean的固件到官方固件 。时过境迁,lean、openwrt官方的源码变化较多,原有的一些内容已不再适用。Openwrt新版更方便也比较强大,但从OpenWrt 22.03开始,默认使用 fw4 ,生成nftables规则。比较遗憾的四自定义iptables 命令选项在 Firewall4 中没有了(后来自己解决了)。用官方openwrt就没有国内的一些特色应用软件,需要手工加入,且有的应用软件和官方版本不兼容,编译易失败,需要不断尝试并自己解决问题。

我编译openwrt一般要带这几个应用 luci-app-adbyby-plus广告屏蔽、 luci-app-ssr-plus科学上网、luci-app-vlmcsd Windows激活、luci-app-unblockmusic网易音乐,这些在lean的源码里都有。其他luci-app-upnp、luci-app-nft-qos等其它应用软件等用openwrt官方自带的。在openwrt官方源码里不要选择lean的luci-app-turboacc,需要修改的地方太多,还要加很多kmod驱动,直接用官方固件的offload分流即可。目前Openwet的内核为5.15,编译的固件经过几天使用,使用稳定。

本次编译继续使用Vmware装Ubuntu20系统,编译X86固件。Ubuntu里要先安装编译依赖项

sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison build-essential bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

打造自己的openwrt官方固件过程介绍如下!
023年打造自己特色的openwrt官方固件"

一、下载基本源码

在Ubuntu里打开主目录,右键选择在终端打开。首先把lean 和官方openwrt 的源码全部下载到本地。

git clone https://github.com/openwrt/openwrt
git clone https://github.com/coolsnowwolf/lede

把官方源码、lean的源码都下载到本地。

二、下载lean源码的应用

cd lede
./scripts/feeds update -a

lean的大部分应用软件都在feeds里,需要下载下来。

三、复制下载所需应用软件源码

把所需要的lean特色的应用软件源码放到 openwrt里面,执行下面命令

cd
mkdir openwrt/package/lean
cp -arf lede/feeds/luci/applications/luci-app-adbyby-plus/ openwrt/package/lean/
cp -arf lede/feeds/luci/applications/luci-app-vlmcsd/ openwrt/package/lean/

以上是拷贝所需lean的源码到官方openwrt里的package/lean/目录下,直接使用这些源码到官方openwrt中会报错,在luci-applications界面里也选择不到这些,需运行:

sed -i 's/include ..\/..\/luci.mk/include $(TOPDIR)\/feeds\/luci\/luci.mk/g' openwrt/package/lean/luci-app-adbyby-plus/Makefile
sed -i 's/include ..\/..\/luci.mk/include $(TOPDIR)\/feeds\/luci\/luci.mk/g' openwrt/package/lean/luci-app-vlmcsd/Makefile

这句意思是修改lean源码中luci.mk文件位置,以适应官方openwrt。

还需要将依赖包复制进官方openwrt,不然编译会报错。

cd 
cp -arf lede/package/lean/adbyby/ openwrt/package/lean/
cp -arf lede/feeds/packages/net/vlmcsd/ openwrt/package/lean/

需要其他包也可以按以上方法复制修改。

解锁网易音乐不用lean的源码,和官方不兼容,会报错。这里使用天灵的源码。

cd openwrt/package/lean
git clone https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic

加入科学上网ShadowsocksR plus++ 应用

cd
echo  "src-git helloworld https://github.com/fw876/helloworld.git" >> openwrt/feeds.conf.default

把官方luci应用下载下来。

cd openwrt
./scripts/feeds update -a && ./scripts/feeds install -a

四、修改目标路由器设置

官方openwrt里已经含有dnsmasq,lean的源码里依赖包是dnsmasq-full,不修改2个都会被编译,最后编译到package/install这步会报错。用下句修改:

cd
sed -i 's/dnsmasq/dnsmasq-full/g' openwrt/include/target.mk

修改默认编译应用软件的设置,不同的路由器架构的配置文件在openwrt/target/linux/里。以我的软路由为例,需要编译x86固件,文件位置在openwrt/target/linux/x86/Makefile 。终端执行下列命令:

sed -i '/grub2-bios-setup/i \ \thtop luci luci-newapi luci-compat luci-app-upnp luci-app-adbyby-plus my-settings \\' openwrt/target/linux/x86/Makefile
sed -i '/grub2-bios-setup/i \ \tluci-app-nft-qos luci-app-ssr-plus luci-app-vlmcsd luci-app-unblockneteasemusic \\' openwrt/target/linux/x86/Makefile

my-settings是自己写的包,代替lean的default-settings的应用包,没有请去掉这个。这句意思是:

在openwrt/target/linux/x86/Makefile文件里
DEFAULT_PACKAGES += \
	partx-utils mkf2fs \
	e2fsprogs kmod-button-hotplug \
	grub2-bios-setup
的grub2-bios-setup上方加入所需编译的应用软件名
htop luci luci-newapi luci-compat luci-app-upnp luci-app-adbyby-plus luci-app-nft-qos \
luci-app-ssr-plus luci-app-vlmcsd luci-app-unblockneteasemusic my-settings

如果还需其他luci应用,自行增加,需注意兼容及依赖问题。官方编译的是默认含有ipv6的,但是ssr plus++ 对ipv6兼容不佳,科学上网可能会遇到问题,需要关闭ipv6或在dnsmasq里面开启过滤 IPv6 AAAA 记录,但我使用下来基本未发现问题。这里我没有使用SmartDns,需要SmartDns的参考:使用smartdns分流ipv6进行科学上网,注意应用包路径问题。

五、配置编译配置文件

终端当前目录在openwrt文件夹

cd openwrt
make menuconfig

target system设为x86 64位系统

官方openwrt配置软路由
官方openwrt配置软路由

如果我们在编译ssrp++时把所有都选上,编译可能会报 ext4_allocate_best_fit_partial: failed to allocate 5126 blocks, out of space? 错误,提示空间不足。我们需要在

Target Images -> Root filesystem partition size (in MB)  设为 400 。

设置openwrt固件空间
设置openwrt固件空间为400M

进入 LUCI设置 ,Modules –Translations 选择Chinese Simplified 中文,不然luci都是英文界面。

进入 Applications 应用,检查相关luci应用是否被选择,设置的应用在luci-application里找不到,说明luci文件有错误,退出编辑界面会有提示,可以查看logs文件夹,看看是什么原因。
退出后看看有没有报错。有报错就尝试解决。

六、openwrt默认配置修改

编译前一般可以对源码进行一些修改,如修改入口ip等,以达到更好的使用效果。可以搜索相关文章进行设置。
上面说自己写个my-setting应用,就依照lean的default-settings文件修改,可以加入自己的各种配置,如dhcp配置、ssrp配置、拨号账号、个人防火墙设置等,这样编译的openwrt固件就是个人专用固件,刷入路由器后就自动拨号、科学上网,无需再进行设置。写个人默认设置my-settings见https://www.bandwh.com/net/560.html

七、进行编译

make download -j8
make -j8

编译要全程挂梯子,不然有些包下不下来,长期卡死不动终端输入ctrl c 来终止当前命令。运行make download -j1 V=s 可以查看哪个包下载不下来,可以手动在chrome里下载下来,再放入openwrt/dl目录。
编译过程中遇到问题可以用make -j1 V=s 查看具体日志,多多网页搜索,然后进行修改。终止编译可以终端输入ctrl c 来终止。

八、总结

编译完成后的包在bin/targets/x86/64里面,我是Esxi里安装软路由固件, 引导选项是BIOS的选择openwrt-x86-64-generic-ext4-combined.img.gz升级,uefi引导的,选择带uefi的文件升级,初次写盘安装请用 带rootfs的文件。

按照这个编译的固件,原来担心的ShadowsockR plus没有出现问题,正常使用,第三方应用里的iptables规则和openwrt默认的nftables也能和谐共处。

自己特色的openwrt官方固件首页图
编译完成的openwrt官方固件首页图

安装固件就不说明了。软路由可能需要对lan、wan口进行设置。硬路由应该无需设置,直接输入192.168.1.1就可进入。使用官方固件,时区也要改一下,不然时间是UTC时间。这些设置可以写脚本解决,也就是通过my-setting应用软件解决。

ssrp-plus 重新选择一些配置,再次编译可能会报错,需要删除.config配置文件后再次编译。

rm -rf ./tmp && rm -rf .config
make menuconfig
make -j8

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/492.html

回复 BandWh.com

您的电子邮箱地址不会被公开。 必填项已用*标注

评论列表(15条)

  • scola
    scola 2023年9月20日 16:41

    优质内容,成功编译了自己的mt7621路由

  • sa9685
    sa9685 2023年6月8日 13:27

    感谢分享,小白,刚接触原版openwrt,编译中有2个疑问请教

    1. 步骤三中,”还需要将依赖包复制进官方openwrt,不然编译会报错。”怎么确认对应luci插件的依赖包(位置)
    示例中2款插件的依赖分别位于lean目标中的“package/lean/”和“feeds/packages/net/”,如果编译其他插件,也是在这2个位置中找对应名称的依赖包么

    2. 步骤四中,“修改默认编译应用软件的设置”
    2.a 这部的作用是什么,示例是表示为了将luci编译成符合x86固件的模式么
    2.b 如果我只用lean默认的设置,不涉及my-setting的情况,是不是可以不执行示例中的2条命令
    2.c 如果仍需要执行命令,不涉及my-setting,是否直接运行示例中第2条就可以了,对应的luci只要是lean移植过来的就行了

    感谢

    • BandWh.com
      BandWh.com 2023年6月9日 17:10

      @sa96851、不同应用依赖包位置不一样。可以到lean或应用的github源码处搜索。
      2、第四步中如果编译ssrp,第1个要执行的,用于替换默认的dnsmasq,否则报错,因为ssrp里的依赖是dnsmasq-full。第2条针对的是x86固件,也可以不执行,到第五步编译时手工选择要编译的应用;非X86固件第2条无需执行,到第五步编译时手工选择即可,其他架构加入自己的默认应用也可以修改openwrt/target/linux/架构/Makefile 文件。

    • sa9685
      sa9685 2023年6月15日 11:51

      @BandWh.com感谢,摸索的添加编译了一部分luci并正常运行了

  • gglywjc
    gglywjc 2023年4月6日 18:38

    大佬怎么在GitHub上编译官方openwrt顺便加上你的那几个第三方插件呢切不报错呢?

  • open、
    open、 2023年4月4日 12:11

    大佬请问多拨怎么加入编译里面

    • BandWh.com
      BandWh.com 2023年4月4日 14:48

      @open、openwrt多拨没研究过,应该选择kmod-macvlan mwan3 luci-app-mwan3就行。以前用爱快试过,觉得没啥大用就没再尝试过。

    • open、
      open、 2023年4月4日 15:02

      @BandWh.comkmod-macvlan 这个找不到嘛

    • BandWh.com
      BandWh.com 2023年4月4日 15:13

      @open、Kernel modulesNetwork Devices 里。你可以直接在openwrt/target/linux/架构/Makefile里面加入kmod-macvlan,openwrt会自动找到的

    • open、
      open、 2023年4月4日 19:22

      @BandWh.com嗯嗯谢谢大佬

  • calvno
    calvno 2023年3月4日 15:18

    博主,这个编译的固件可以分享下吗?

    • BandWh.com
      BandWh.com 2023年3月5日 20:52

      @calvno弄个虚拟机,编译一下很简单的,成功的话你也有成就感。

  • 言西
    言西 2023年2月9日 17:16

    期待更新 my-setting
    另外,我看了看 lean 的 https://github.com/coolsnowwolf/lede/blob/master/target/linux/x86/Makefile
    里面也没有 default-settings 或者 zzz-default-settings 啊