最近一直在折腾自己的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 是扩展的软件包,独立于 Open­Wrt 源码之外,所以需要单独进行拉取和更新。
    ./scripts/feeds update -a  #获取最新的包 
     ./scripts/feeds install -a  #安装更新的包    
  • 测试编译环境
    make  defconfig            #测试编译环境 
    #
    # configuration written to .config
    #    
  • 调整 Open­Wrt 系统组件配置
    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全局代理解决

安装polipo
sudo 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                                                         #拉取 Open­Wrt 源码更新
    ./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            #清除 Open­Wrt 源码以外的文件(可选)
    #除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。
    
    git clean -xdf            #还原 Open­Wrt 源码到初始状态(可选)
    #如果把源码改坏了,或者长时间没有进行编译时使用。
    
    rm -rf tmp                #清除编译缓存
    #此操作据说可防止make menuconfig加载错误,暂时没遇到过,如有错误欢迎大佬指正。
    
    rm -f .config             #删除配置文件(可选)
    #可以理解为恢复默认配置,建议切换架构编译前执行。
  • 更新
    make menuconfig                       #调整 Open­Wrt 系统组件
    #如果不打算调整组件则输入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 条评论

发表评论