推荐点击下面图片,通过本站淘宝优惠价购买:
本地编译路由器固件
首先装好 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 口管理 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 第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://www.hqyman.cn/post/4382.html