本地编译路由器固件
lede 源码仓库
istoreos 源码仓库
openwrt 源码仓库
首先是注意事项
首先装好 Ubuntu 64bit,推荐 Ubuntu 18 LTS x64
不要用 root 用户 git 和编译!!!
国内用户编译前最好准备好软件源下载加速
默认登陆IP 192.168.1.1, 密码 password(后面文章中对 IP 有修改)
编译前准备
输入命令
sudo apt-get update -y #对系统进行更新 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 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 antlr3 gperf wget swig #安装编译固件需要的依赖
使用 git clone https://github.com/coolsnowwolf/lede 下载源码,然后 cd lede 进入源码目录。
个性化配置需要的功能
启用必要的软件源:
使用 vim 编辑器来编辑 ./feeds.conf.default 文件
$ vim ./feeds.conf.default 然后将 #src-git helloworld https://github.com/fw876/helloworld 这一行的注释取消掉。编辑完成后这个文件看起来像这样:src-git packages https://github.com/coolsnowwolf/packages src-git luci https://github.com/coolsnowwolf/luci src-git routing https://git.openwrt.org/feed/routing.git src-git telephony https://git.openwrt.org/feed/telephony.git src-git freifunk https://github.com/freifunk/openwrt-packages.git #src-git video https://github.com/openwrt/video.git #src-git targets https://github.com/openwrt/targets.git #src-git management https://github.com/openwrt-management/packages.git #src-git oldpackages http://git.openwrt.org/packages.git #src-link custom /usr/src/openwrt/custom-feed src-git helloworld https://github.com/fw876/helloworld
修改路由器固件的初始网络配置
配置 LAN 口的网络
如果不进行这一步骤的操作,该路由器固件安装成功后,路由器 LAN 口管理 IP 为 192.168.1.1。
如果断网操作肯定是没问题的,但是如果在现有的网络环境下部署旁路由(旁路网关)的话,一般就会和主路由器的 IP 地址冲突。
所以这里介绍一下如何在编译固件前修改路由器固件的默认 IP。
修改 zzz-default-settings 文件,在 exit 0 这一行上方添加自定义配置。具体操作如下:
$ vim ./package/lean/default-settings/files/zzz-default-settings # 打开要编辑的文件 uci set network.lan.ipaddr='192.168.1.254' # 默认 IP 地址 uci set network.lan.proto='static' # 静态 IP uci set network.lan.type='bridge' # 接口类型:桥接 uci set network.lan.ifname='eth0' # 网络端口:默认 eth0,第一个接口 uci set network.lan.netmask='255.255.255.0' # 子网掩码 uci set network.lan.gateway='192.168.1.1' # 默认网关地址(主路由 IP) uci set network.lan.dns='192.168.1.1' # 默认上游 DNS 地址 uci commit network
接着进行下一步编译
输入如下命令,更新编译源,并进入配置页面:
$ ./scripts/feeds update -a # 更新软件 $ ./scripts/feeds install -a # 下载软件 $ make menuconfig # 进入配置界面
配置页面如下图所示:
自定义需要的路由器固件
首先,根据路由器的平台和架构,在 Target System、Subtarget、Target Profile 中选择相应的选项。
然后,作为旁路由,需要安装的插件其实很少,基本上就是广告过滤、解锁网易云等。具体操作如下:
如果不需要在路由上实现 USB 文件共享/Samba 多媒体共享,需要在 Extra-packages 菜单中取消选择 automount 和 autosamba
进入 Luci - Applications 选择需要的插件,这里我列出部分常见的插件:
# 我常用的几个,只做旁路由使用
luci-app-firewall # 防火墙和端口转发,必备
luci-app-adbyby-plus # 广告屏蔽大师 Plus+
luci-app-sfe # Turbo ACC 网络加速(开启 Fast Path 转发加速)
luci-app-unblockNeteaseMusic # 解锁网易云# 按需选择
luci-app-wol # 网络唤醒
luci-app-accesscontrol # 上网时间控制
luci-app-arpbind # IP/MAC 绑定
luci-app-autoreboot # 计划重启
luci-app-ddns # 动态域名解析
luci-app-filetransfer # 上传 ipk 文件功能
luci-app-frpc # 内网穿透 Frp
luci-app-ipsec-vpnd # IPSec 服务端
luci-app-nlbwmon # 网络带宽监视器
luci-app-ramfree # 释放内存
luci-app-rclone # rclone
luci-app-samba # 网络共享(samba)
luci-app-upnp # 通用即插即用 UPnP(端口自动转发)
luci-app-vlmcsd # KMS 服务器(WIN 激活工具)
luci-app-vsftpd # FTP 服务器
luci-app-webadmin # Web 管理页面设置
luci-app-xlnetacc # 迅雷下载
luci-app-zerotier # 虚拟局域网
luci-app-aria2 # Aria2 下载
luci-app-hd-idle # 硬盘休眠
luci-app-mwan3 # MWAN 负载均衡
luci-app-openvpn # OpenVPN 客户端
luci-app-openvpn-server # OpenVPN 服务端
luci-app-pptp-server # PPTP 服务端
luci-app-sqm # 流量智能队列管理(QOS)
luci-app-transmission # BT 下载
luci-app-usb-printer # USB 打印服务器
luci-app-wireguard # VPN 服务器 WireGuard 状态
luci-app-wrtbwmon # 实时流量监测
配置完成后光标移动到 Save ,回车保存。
继续编译命令
make -j8 download V=s #下载dl库(国内请尽量做好软件源加速)
输入
make -j1 V=s #-j1 后面数字1是线程数。第一次编译推荐用单线程
进行编译你要的固件。
编译完成后固件保存在 ./bin/targets/ 文件夹内。
使用 Github 的 Action 功能自动编译
首先需要有一个 Github 帐号
打开 coolsnowwolf/lede 固件页面,点击 Folk 将该源码 Folk 到自己的帐号。
然后以该源码自带的 Action 为例来修改。文件路径为 .github/workflows/openwrt-ci.yml。
文件第 13/14 行为自动运行周期,默认值如下:
schedule: - cron: 0 20 * * * # 每天的 20:00 执行该文件定义的动作
提取本地自定义固件和默认配置的差异
在上面本地编译时,当完成“配置完成后光标移动到 Save ,回车保存。”后,会在源码根目录生成一个 .config 文件,
此时运行下面命令来提取配置差异,并保存在 diff.config 文件中备用:
make defconfig ./scripts/diffconfig.sh > diff.config # 将差异保存在 diff.config 文件中
在 openwrt-ci.yml 中添加自定义配置
启用软件源
修改 openwrt-ci.yml 第46行的 Update feeds 动作,将 echo 'src-git helloworld https://github.com/fw876/helloworld' >> ./feeds.conf.default 添加进去,添加完成后该部分如下:
- name: Update feeds run: | echo 'src-git helloworld https://github.com/fw876/helloworld' >> ./feeds.conf.default sed -i 's/\"#src-git\"/\"src-git\"/g' ./feeds.conf.default ./scripts/feeds update -a ./scripts/feeds install -a
添加自定义的固件配置
修改 openwrt-ci.yml 第52行的 Generate configuration file 动作,将之前提取的差异文件 diff.config 中的内容全部拷贝出来,添加中间那一行:
- name: Generate configuration file run: | rm -f ./.config* touch ./.config cat >> .config <<EOF # # ========================固件定制部分======================== # # 删除这一行,粘贴为 diff.config 中的内容,注意对其 # # ========================固件定制部分结束======================== # EOF sed -i 's/^[ \t]*//g' ./.config make defconfig
然后将网络配置添加到 make defconfig 之后,如下所示:
# 网络配置信息,将从 zzz-default-settings 文件的第2行开始添加 sed -i "2i # network config" ./package/lean/default-settings/files/zzz-default-settings # 默认 IP 地址,旁路由时不会和主路由的 192.168.1.1 冲突 sed -i "3i uci set network.lan.ipaddr='192.168.1.5'" ./package/lean/default-settings/files/zzz-default-settings sed -i "4i uci set network.lan.proto='static'" ./package/lean/default-settings/files/zzz-default-settings # 静态 IP sed -i "5i uci set network.lan.type='bridge'" ./package/lean/default-settings/files/zzz-default-settings # 接口类型:桥接 sed -i "6i uci set network.lan.ifname='eth0'" ./package/lean/default-settings/files/zzz-default-settings # 网络端口:默认 eth0,第一个接口 sed -i "7i uci set network.lan.netmask='255.255.255.0'" ./package/lean/default-settings/files/zzz-default-settings # 子网掩码 sed -i "8i uci set network.lan.gateway='192.168.1.1'" ./package/lean/default-settings/files/zzz-default-settings # 默认网关地址(主路由 IP) sed -i "9i uci set network.lan.dns='192.168.1.1'" ./package/lean/default-settings/files/zzz-default-settings # 默认上游 DNS 地址 sed -i "10i uci commit network\n" ./package/lean/default-settings/files/zzz-default-settings
添加完成后这一部分如下:
- name: Generate configuration file run: | rm -f ./.config* touch ./.config cat >> .config <<EOF # # ========================固件定制部分======================== # # 示例配置,下面是 diff.config 文件中的内容 CONFIG_TARGET_x86=y CONFIG_TARGET_x86_64=y CONFIG_TARGET_x86_64_DEVICE_generic=y # CONFIG_PACKAGE_luci-app-accesscontrol is not set # CONFIG_PACKAGE_luci-app-arpbind is not set CONFIG_PACKAGE_luci-app-autoreboot=m CONFIG_PACKAGE_luci-app-ddns=m # CONFIG_PACKAGE_luci-app-filetransfer is not set CONFIG_PACKAGE_luci-app-frpc=m CONFIG_PACKAGE_luci-app-ipsec-vpnd=m CONFIG_PACKAGE_luci-app-nlbwmon=m CONFIG_PACKAGE_luci-app-ramfree=m # # ========================固件定制部分结束======================== # EOF sed -i 's/^[ \t]*//g' ./.config make defconfig # 网络配置信息,将从 zzz-default-settings 文件的第2行开始添加 sed -i "2i # network config" ./package/lean/default-settings/files/zzz-default-settings # 默认 IP 地址,旁路由时不会和主路由的 192.168.1.1 冲突 sed -i "3i uci set network.lan.ipaddr='192.168.1.254'" ./package/lean/default-settings/files/zzz-default-settings sed -i "4i uci set network.lan.proto='static'" ./package/lean/default-settings/files/zzz-default-settings # 静态 IP sed -i "5i uci set network.lan.type='bridge'" ./package/lean/default-settings/files/zzz-default-settings # 接口类型:桥接 sed -i "6i uci set network.lan.ifname='eth0'" ./package/lean/default-settings/files/zzz-default-settings # 网络端口:默认 eth0,第一个接口 sed -i "7i uci set network.lan.netmask='255.255.255.0'" ./package/lean/default-settings/files/zzz-default-settings # 子网掩码 sed -i "8i uci set network.lan.gateway='192.168.1.1'" ./package/lean/default-settings/files/zzz-default-settings # 默认网关地址(主路由 IP) sed -i "9i uci set network.lan.dns='192.168.1.1'" ./package/lean/default-settings/files/zzz-default-settings # 默认上游 DNS 地址 sed -i "10i uci commit network\n" ./package/lean/default-settings/files/zzz-default-settings 配置完成后保存。每天的 20:00,Github 都会自动帮你编译固件。可以在自己 Folk 的 lede 仓库的 Action 页面找到编译完成的压缩包:
配合 KFERMercer/OpenWrt-CI 的 merge-upstream.yml 每天都能自动合并推送上游提交 (也就是自动更新),收获编译完成的最新固件。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4382.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~