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 口管理 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

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享