最近一直在折腾自己的NRS,起初准备跟从某UP主,使用iKuai+Koolsharre LEDE双路由,然而发现并没有那么高的需求,只好放弃改用单 Koolsharre LEDE软路由。一次偶然听说了L大OpenWrt,就想试试然而搜索了一番之后发现事情并没有想象的那么简单…
注:
- 编译和git时不要使用root用户操作
- 最好在国外编译
- 编译系统路径不能存在空格,尽量没有英文,报错的可能性会降低
- 推荐使用 Ubuntu 18 LTS x64 系统
- 默认登陆IP 192.168.1.1, 密码 password
首次编译:
- 安装编译所需要的工具及依赖环境
sudo apt-get install update sudo apt-get install gcc g++ build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch flex bison make autoconf texinfo unzip sharutils subversion ncurses-term zlib1g-dev ccache upx lib32gcc1 libc6-dev-i386 uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev libglib2.0-dev xmlto qemu-utils automake libtool
- 克隆OpenWrt源码并进入源码文件夹
git clone https://github.com/coolsnowwolf/lede openwrt
- 更新并安装更新的feeds包文件,feeds 是扩展的软件包,独立于 OpenWrt 源码之外,所以需要单独进行拉取和更新。
./scripts/feeds update -a #获取最新的包 ./scripts/feeds install -a #安装更新的包
- 测试编译环境
make defconfig #测试编译环境 # # configuration written to .config #
- 调整 OpenWrt 系统组件配置
make menuconfig #配置编译
- 预下载编译所需的软件包,并检查完整性。
make download -j7 V=s #预下载 find dl -size -1024c -exec ls -l {} \; #检查文件完整性
-j8是指使用7个线程下载,理论上是数字越大下载越快,但似乎有个上限,实测5线程以上其实速度相差不了多少,在网络好的情况下,基本在5分钟以内能下载完。如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} \;命令将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。 - 开始编译
make -j1 V=s #配置编译
-j1:使用单线程编译。L大推荐首次编译使用单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志,多线程的错误日志是交织在一起的,不方便排错。 V=s:输出详细日志,用于编译失败时找出错误。 - 取得固件
openwrt/bin/targets/x86/64 #这个目录在克隆源码的路径下,非根目录下的bin目录
相关配置解释及修改:
- 编译配置
│ Target System (x86) ---> #设置CPU类型 │ Subtarget (x86_64) ---> #设置CPU平台 │ Target Profile (Generic) ---> #设置镜像档案类型 │ Target Images ---> #设置编译的格式 │ Global build settings ---> #全局设置 │ [ ] Advanced configuration options (for developers) ---- #高级配置选项 │ [ ] Build the OpenWrt Image Builder #创建OpenWrt镜像生成器 │ [ ] Build the OpenWrt SDK #创建OpenWrt SDK │ [ ] Package the OpenWrt-based Toolchain #打包基于OpenWrt的工具链 │ [ ] Image configuration ---> #镜像配置 │ Base system ---> #设置基础系统 │ Administration ---> #管理 │ Boot Loaders ---> #设置启动加载器 │ Development ---> # │ Extra packages ---> #设置额外软件包 │ Firmware ---> #设置固件 │ Fonts ---> #设置字体 │ Kernel modules ---> #设置内核模块 │ Languages ---> #设置语言 │ Libraries ---> #设置库 │ LuCI ---> #LuCi设置 │ Mail ---> │ Multimedia ---> #设置多媒体 │ Network ---> #网络配置 │ Sound ---> #声音配置 │ Utilities ---> #设置实用程序 │ Xorg --->
- 软件包说明
LuCI ---> Applications ---> luci-app-accesscontrol #访问时间控制 LuCI ---> Applications ---> luci-app-adblock #ADB广告过滤 LuCI ---> Applications ---> luci-app-adbyby-plus #广告屏蔽大师Plus + LuCI ---> Applications ---> luci-app-adbyby #广告过滤大师(已弃) LuCI ---> Applications ---> luci-app-adkill #广告过滤(已弃) LuCI ---> Applications ---> luci-app-advanced-reboot #Linksys高级重启 LuCI ---> Applications ---> luci-app-ahcp #支持AHCPd LuCI ---> Applications ---> luci-app-aliddns #阿里DDNS客户端(已弃,集成ddns) LuCI ---> Applications ---> luci-app-amule #aMule下载工具 LuCI ---> Applications ---> luci-app-aria2 # Aria2下载工具 LuCI ---> Applications ---> luci-app-arpbind #IP/MAC绑定 LuCI ---> Applications ---> luci-app-asterisk #支持Asterisk电话服务器 LuCI ---> Applications ---> luci-app-attendedsysupgrade #固件更新升级相关 LuCI ---> Applications ---> luci-app-autoreboot #支持计划重启 LuCI ---> Applications ---> luci-app-bcp38 #BCP38网络入口过滤(不确定) LuCI ---> Applications ---> luci-app-bird4 #Bird 4(未知) LuCI ---> Applications ---> luci-app-bird6 #Bird 6(未知) LuCI ---> Applications ---> luci-app-bmx6 #BMX6路由协议 LuCI ---> Applications ---> luci-app-bmx7 #BMX7路由协议 LuCI ---> Applications ---> luci-app-caldav #联系人 LuCI ---> Applications ---> luci-app-cjdns #加密IPV6网络相关 LuCI ---> Applications ---> luci-app-clamav #ClamAV杀毒软件 LuCI ---> Applications ---> luci-app-commands #Shell命令模块 LuCI ---> Applications ---> luci-app-cshark #CloudShark捕获工具 LuCI ---> Applications ---> luci-app-ddns #动态域名 DNS LuCI ---> Applications ---> luci-app-diag-core #core诊断工具 LuCI ---> Applications ---> luci-app-dnscrypt-proxy #DNSCrypt解决DNS污染 LuCI ---> Applications ---> luci-app-dnscrypt-dnsforwarder #DNSForwarder防DNS污染 LuCI ---> Applications ---> luci-app-dnspod #DNSPod LuCI ---> Applications ---> luci-app-dump1090 #民航无线频率(不确定) LuCI ---> Applications ---> luci-app-dynapoint #DynaPoint(未知) LuCI ---> Applications ---> luci-app-e2guardian #Web内容过滤器 LuCI ---> Applications ---> luci-app-familycloud #家庭云盘 LuCI ---> Applications ---> luci-app-filetransfer #文件传输 LuCI ---> Applications ---> luci-app-firewall #添加防火墙 LuCI ---> Applications ---> luci-app-flowoffload #Turbo ACC FLOW转发加速(集成在sfe) LuCI ---> Applications ---> luci-app-freifunk-diagnostics #freifunk组件 诊断(未知) LuCI ---> Applications ---> luci-app-freifunk-policyrouting #freifunk组件 策略路由(未知) LuCI ---> Applications ---> luci-app-freifunk-widgets #freifunk组件 索引(未知) LuCI ---> Applications ---> luci-app-frpc #内网穿透 Frp LuCI ---> Applications ---> luci-app-fwknopd #Firewall Knock Operator服务器 LuCI ---> Applications ---> luci-app-guest-wifi #WiFi访客网络 LuCI ---> Applications ---> luci-app-gfwlist #GFW域名列表(已弃) LuCI ---> Applications ---> luci-app-hd-idle #硬盘休眠 LuCI ---> Applications ---> luci-app-hnet #Homenet Status家庭网络控制协议 LuCI ---> Applications ---> luci-app-kodexplorer #KOD可道云私人网盘 LuCI ---> Applications ---> luci-app-kooldns #virtual**服务器 ddns替代方案(已弃) LuCI ---> Applications ---> luci-app-koolproxy #KP去广告(已弃) LuCI ---> Applications ---> luci-app-lxc #LXC容器管理 LuCI ---> Applications ---> luci-app-meshwizard #网络设置向导 LuCI ---> Applications ---> luci-app-minidlna #完全兼容DLNA / UPnP-AV客户端的服务器软件 LuCI ---> Applications ---> luci-app-mjpg-streamer #兼容Linux-UVC的摄像头程序 LuCI ---> Applications ---> luci-app-mmc-over-gpio #添加SD卡操作界面(已弃) LuCI ---> Applications ---> luci-app-multiwan #多拨虚拟网卡(已弃) LuCI ---> Applications ---> luci-app-mwan #MWAN负载均衡 LuCI ---> Applications ---> luci-app-mwan3 #MWAN3分流助手 LuCI ---> Applications ---> luci-app-n2n_v2 #N2N内网穿透 N2N v2 virtual**服务 LuCI ---> Applications ---> luci-app-nft-qos #QOS流控 Nftables版(已弃) LuCI ---> Applications ---> luci-app-ngrokc #Ngrok 内网穿透(已弃) LuCI ---> Applications ---> luci-app-nlbwmon #网络带宽监视器 LuCI ---> Applications ---> luci-app-noddos #NodDOS Clients 阻止DDoS攻击 LuCI ---> Applications ---> luci-app-ntpc #NTP时间同步服务器 LuCI ---> Applications ---> luci-app-ocserv #OpenConnect virtual**服务 LuCI ---> Applications ---> luci-app-olsr #OLSR配置和状态模块 LuCI ---> Applications ---> luci-app-olsr-services #OLSR服务器 LuCI ---> Applications ---> luci-app-olsr-viz #OLSR可视化 LuCI ---> Applications ---> luci-app-ocserv #OpenConnect virtual**服务(已弃) LuCI ---> Applications ---> luci-app-openvirtual** #Openvirtual**客户端 LuCI ---> Applications ---> luci-app-openvirtual**-server #易于使用的Openvirtual**服务器 Web-UI LuCI ---> Applications ---> luci-app-oscam #OSCAM服务器(已弃) LuCI ---> Applications ---> luci-app-p910nd #打印服务器模块 LuCI ---> Applications ---> luci-app-pagekitee #Pagekite内网穿透客户端 LuCI ---> Applications ---> luci-app-polipo #Polipo代理(是一个小型且快速的网页缓存代理) LuCI ---> Applications ---> luci-app-pppoe-relay #PPPoE NAT穿透 点对点协议(PPP) LuCI ---> Applications ---> luci-app-p p t p-server #virtual**服务器 p p t p LuCI ---> Applications ---> luci-app-privoxy #Privoxy网络代理(带过滤无缓存) LuCI ---> Applications ---> luci-app-qos #流量服务质量(QoS)流控 LuCI ---> Applications ---> luci-app-radicale #CalDAV/CardDAV同步工具 LuCI ---> Applications ---> luci-app-ramfree #释放内存 LuCI ---> Applications ---> luci-app-rp-pppoe-server #Roaring Penguin PPPoE Server 服务器 LuCI ---> Applications ---> luci-app-samba #网络共享(Samba) LuCI ---> Applications ---> luci-app-samba4 #网络共享(Samba4) LuCI ---> Applications ---> luci-app-sfe #Turbo ACC网络加速(开启Fast Path转发加速) LuCI ---> Applications ---> luci-app-s-s #SS兲朝上网(已弃) LuCI ---> Applications ---> luci-app-s-s-libes #SS-libev服务端 LuCI ---> Applications ---> luci-app-shairplay #支持AirPlay功能 LuCI ---> Applications ---> luci-app-siitwizard #SIIT配置向导 SIIT-Wizzard LuCI ---> Applications ---> luci-app-simple-adblock #简单的广告拦截 LuCI ---> Applications ---> luci-app-simple-softethervirtual** #SoftEther virtual**服务器 NAT穿透(已弃) LuCI ---> Applications ---> luci-app-splash #Client-Splash是无线MESH网络的一个热点认证系统 LuCI ---> Applications ---> luci-app-sqm #流量智能队列管理(QOS) LuCI ---> Applications ---> luci-app-squid #Squid代理服务器 ------------------------------------------------------------------------------------------- LuCI ---> Applications ---> luci-app-S-S R-plus #S-S R兲朝上网Plus+ LuCI ---> Applications ---> luci-app-S-S R-plus ---> Include s-s New Versiong #新SS代理 LuCI ---> Applications ---> luci-app-S-S R-plus ---> Include V2ray #V2Ray透明代理 LuCI ---> Applications ---> luci-app-S-S R-plus ---> Include Kcptun #Kcptun代理 LuCI ---> Applications ---> luci-app-S-S R-plus ---> Include s-sR Server #S-S R客户端 LuCI ---> Applications ---> luci-app-S-S R-plus ---> Include s-sR Socks and Tunnel #S-S R代理 ------------------------------------------------------------------------------------------- LuCI ---> Applications ---> luci-app-S-S R-pro #S-S R-Pro LuCI ---> Applications ---> luci-app-S-S Rserver-python #s-sR Python服务器 LuCI ---> Applications ---> luci-app-statistics #流量监控工具 LuCI ---> Applications ---> luci-app-syncdial #多拨虚拟网卡(原macvlan) LuCI ---> Applications ---> luci-app-tinyproxy #Tinyproxy是 HTTP(S)代理服务器 LuCI ---> Applications ---> luci-app-transmission #BT下载工具 LuCI ---> Applications ---> luci-app-travelmate #旅行路由器 LuCI ---> Applications ---> luci-app-ttyd #网页终端命令行 LuCI ---> Applications ---> luci-app-udpxy #udpxy做组播服务器 LuCI ---> Applications ---> luci-app-uhttpd #uHTTPd Web服务器 LuCI ---> Applications ---> luci-app-unblockmusic #解锁网易云灰色歌曲 LuCI ---> Applications ---> luci-app-unbound #Unbound DNS解析器 LuCI ---> Applications ---> luci-app-upnp #通用即插即用UPnP(端口自动转发) LuCI ---> Applications ---> luci-app-usb-printer #USB 打印服务器 LuCI ---> Applications ---> luci-app-v2ray-pro #V2Ray透明代理(已弃,集成S-S R) LuCI ---> Applications ---> luci-app-vlmcsd #KMS服务器设置 LuCI ---> Applications ---> luci-app-vnstat #vnStat网络监控(图表) LuCI ---> Applications ---> luci-app-virtual**bypass #virtual** BypassWebUI 绕过virtual**设置 LuCI ---> Applications ---> luci-app-vsftpd #FTP服务器 LuCI ---> Applications ---> luci-app-watchcat #断网检测功能与定时重启 LuCI ---> Applications ---> luci-app-webadmin #Web管理页面设置 LuCI ---> Applications ---> luci-app-webshell #网页命令行终端(已弃) LuCI ---> Applications ---> luci-app-wifischedule #WiFi 计划 LuCI ---> Applications ---> luci-app-wireguard #virtual**服务器 WireGuard状态 LuCI ---> Applications ---> luci-app-wireless-regdb #WiFi无线 LuCI ---> Applications ---> luci-app-wol #WOL网络唤醒 LuCI ---> Applications ---> luci-app-wrtbwmon #实时流量监测 LuCI ---> Applications ---> luci-app-xlnetacc #迅雷快鸟 LuCI ---> Applications ---> luci-app-zerotier #ZeroTier内网穿透 LuCI ---> Applications ---> luci-i18n-qbittorrent-zh-cn #BT下载工具(qBittorrent)
- 一个excel维护的配置清单OpenWRT编译make menuconfig配置及LUCI插件说明.xlsx
- 固件信息修改(在克隆源码的路径下)
package/lean/default-settings/files/zzz-default-settings #默认设置 package/lean/default-settings/files/bin/config_generate #网络配置 feeds/luci/modules/luci-base/root/etc/config/luci #修改默认语言和主题
- 源码回退
git log #查看源码更新日志 git reset –hard HEAD^ #回退到上个版本 git reset –hard HEAD~3 #回退到前3次提交之前,以此类推,回退到n次提交之前 git reset –hard commit_id #退到/进到 指定commit的sha码(可到大雕源码地址直接查询)
- files保留配置文件编译 把改好的配置直接编译进固件,使得升级不需要保留配置,或者恢复出厂设置,缺省值就是你自己设置好的配置: 步骤: 1.提取路由固件下的\etc\config\network 2.在编译机OpenWrt根目录下创建files目录 3.拷贝到\files\etc\config\network 这样编译完,network就是你自己配置好的network,注意提取的文件路径和权限要一致
一些常见的配置文件路径: \etc\config #各个LUCI配置 \etc\gfwlist #gfwlist目录 \etc\shadow #登录密码 \etc\firewall.user #自定义防火墙规则 \usr\share\adbyby #adbyby里的相关规则和设置 \usr\lib\lua\luci\view\admin_status\index.htm #主页样式文件,温度显示等等
编译报错:
x86 64固件编译报错
Fatal: You must get working getaddrinfo() function. or you can specify "--disable-ipv6". Makefile:350: recipe for target '/home/elliott/openwrt/build_dir/hostpkg/Python-3.7.5/.configured' failed make[3]: *** [/home/elliott/openwrt/build_dir/hostpkg/Python-3.7.5/.configured] Error 1 make[3]: Leaving directory '/home/elliott/openwrt/feeds/packages/lang/python/python3' time: package/feeds/packages/python3/host-compile#12.79#4.96#34.85 package/Makefile:111: recipe for target 'package/feeds/packages/python3/host/compile' failed make[2]: *** [package/feeds/packages/python3/host/compile] Error 2 make[2]: Leaving directory '/home/elliott/openwrt' package/Makefile:107: recipe for target '/home/elliott/openwrt/staging_dir/target-x86_64_musl/stamp/.package_compile' failed make[1]: *** [/home/elliott/openwrt/staging_dir/target-x86_64_musl/stamp/.package_compile] Error 2 make[1]: Leaving directory '/home/elliott/openwrt' /home/elliott/openwrt/include/toplevel.mk:225: recipe for target 'world' failed make: *** [world] Error 2
使用了proxychains代理来编译,如果是的话建议先用proxychains make download V=s下好dl包,然后编译时别用proxychains。或者直接开启全局代理。
使用polipo全局代理解决
安装poliposudo apt install polipo #安装Polipo sudo vim /etc/polipo/config #修改配置文件将文件中原内容删除,替换成如下内容:
# This file only needs to list configuration variables that deviate # from the default values. See /usr/share/doc/polipo/examples/config.sample # and "polipo -v" for variables you can tweak and further information. logSyslog = false logFile = "/var/log/polipo/polipo.log" socksParentProxy = "127.0.0.1:1080" socksProxyType = socks5 chunkHighMark = 50331648 objectHighMark = 16384 serverMaxSlots = 64 serverSlots = 16 serverSlots1 = 32 proxyAddress = "0.0.0.0" proxyPort = 8123启用polipo
/etc/init.d/polipo restart #重启Polipo,使配置文件生效 export http_proxy="http://127.0.0.1:8123/" #启用代理 export https_proxy="http://127.0.0.1:8123/" #启用代理
再次编译:
- 更新
sudo sh -c "apt update && apt upgrade -y" #更新系统软件包 git pull #拉取 OpenWrt 源码更新 ./scripts/feeds update -a && ./scripts/feeds install -a #更新FEEDS
- 文件清理
make clean #清除旧的编译产物(可选) #在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。 make dirclean #清除旧的编译产物、交叉编译工具及工具链等目录(可选) #更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。 make distclean #清除 OpenWrt 源码以外的文件(可选) #除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。 git clean -xdf #还原 OpenWrt 源码到初始状态(可选) #如果把源码改坏了,或者长时间没有进行编译时使用。 rm -rf tmp #清除编译缓存 #此操作据说可防止make menuconfig加载错误,暂时没遇到过,如有错误欢迎大佬指正。 rm -f .config #删除配置文件(可选) #可以理解为恢复默认配置,建议切换架构编译前执行。
- 更新
make menuconfig #调整 OpenWrt 系统组件 #如果不打算调整组件则输入make defconfig,它会检测编译环境并根据更新自动调整编译配置文件。 make download -j7 V=s #预下载编译所需的软件包 find dl -size -1024c -exec ls -l {} \; #检查文件完整性 make -j$(nproc) V=s #开始编译 #-j$(nproc):自动获取CPU线程数,采用多线程编译。成功编译后的再次编译且没有进行make clean操作时使用。
声明:本文经本人实测后发布。参考“lean大佬OpenWrt Github,源码编译OpenWrt及插件,OpenWrt 编译步骤与命令详解,编译Lean的Openwrt固件全攻略,Ubuntu实现二级代理”
0 条评论