编译 openwrt

鉴于访问技术网站慢,clone 慢的问题,决定编译出适合访问外网的 openwrt

编译前提

不要用 root 编译,不要用 root 编译,不要用 root 编译。

  • 选购 vps
    • 先去“腾讯云/阿里云”选择一台香港或者新加坡的vps,选择“竞价服务器”,这样就可按时计费(阿里云需要充值100,但腾讯云不用充值)
    • 系统选择 ubuntu20.04 LTS 或者 centos8 并开启 BBR
    • 阿里云或者腾讯云新建安全组并开放 22、443、80 等端口
    • 参考: https://www.bilibili.com/video/BV16q4y1n755
  • 将你的域名解析到 vps
  • 申请 SSL 证书并下载证书文件
  • 在 vps 中开启 xrag/v2ray + Nginx 等(已通过脚本实现) xray 安装与配置
  • 本地开启代理
    • 安装并配置 xray/v2ray 客户端,如:Qv2ray,确保本机可访问外网
    • 本地主机开启代理
      • 全局代理
        • 如:本人使用的是 Fedora35,可通过 Qv2ray 开启全局系统代理,然后去 “设置---网络---网络代理” 可查看到代理信息
        • 如果要在虚拟机中开启代理,则不能使用全局代理,否则虚拟机不能使用网络
      • 手动设置代理
        • Git 使用代理
          • git config --global http.proxy 'socks5://127.0.0.1:1089'
          • git config --global https.proxy 'socks5://127.0.0.1:1089'
        • 终端使用代理
          • export http_proxy="http://127.0.0.1:8889"
          • export https_proxy="http://127.0.0.1:8889"
          • 当然也可使用 proxychains 实现终端代理,像这样使用:proxychains curl www.google.com
        • 取消 Git 代理
          • git config --global --unset http.proxy
          • git config --global --unset https.proxy
    • 虚拟机中开启代理
      • 一定要取消 Qv2ray 中的 “首选项---入站设置---设置系统代理” 的勾选
      • Qv2ray 中的 “首选项---入站设置---监听地址“ 设置为 "0.0.0.0” 表示允许局域网访问代理
      • 在 ubuntu20.04.4 中使用代理,可去 “设置---网络---网络代理” 选择 “手动”
        • HTTP、HTTPS、FTP 设置
          • IP 填写为主机的 IP,如:192.168.2.26
          • 端口填写为 Qv2ray 中设置的 HTTP 端口,如:8889
      • 也可使用命令开启代理
        •   git config --global http.proxy 'socks5://192.168.2.26:1089'
            git config --global https.proxy 'socks5://192.168.2.26:1089'
            export http_proxy="http://192.168.2.26:8889"
            export https_proxy="http://192.168.2.26:8889"
          
        • 一定要注意此处的 ip 与端口,端口可去 Qv2ray 中的 “首选项---入站设置” 查找
      • 在终端使用 curl -I www.google.com 测试,如果返回 301 或者 200 表示可访问外网

开始编译

  • 安装依赖
    • Ubuntu
      •   sudo apt update -y
          sudo apt full-upgrade -y
          sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
          bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
          git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
          libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
          mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \
          rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
        
    • Fedora
  • 下载 openwrt/lede 源码(以下操作建议全部开启代理来执行
    • 官方 openwrt
      • 下载源代码:git clone https://github.com/openwrt/openwrt.git
      • 添加自己需要的插件,如:Passwall、OpenAppFilter(可选,后续可手动编译成 ipk 文件,然后在 openwrt web 中安装)
        • 添加 Passwall 源
          • cd openwrt
          • echo "src-git kenzo https://github.com/kenzok8/openwrt-packages" >> feeds.conf.default
          • echo "src-git small https://github.com/kenzok8/small" >> feeds.conf.default
          • 上面的软件源收集了常用插件,如果只想安装 Passwall 源可选择 Passwall luci 源
          • 在已经编译好的 openwrt 中使用 Passwall,请参考:手动编译安装 Passwall
        • 添加 OpenAppFilter 软件源(每次编译前都要在此目录中执行 git pull 获取最新的源代码):
          • cd openwrt
          • git clone https://github.com/destan19/OpenAppFilter.git package/OpenAppFilter
      • 自定义设置
        • 改时区与主机名与lan口ip
          • 修改 openwrt/package/base-files/files/bin/config_generate
          • set system.@system[-1].timezone='UTC' 改为 Asia/Shanghai
          • set system.@system[-1].hostname='OpenWrt' 改为 WiFi-Router
          • sed -i 's/192.168.1.1/192.168.2.88/g' package/base-files/files/bin/config_generate
        • 改官方版本 连接数
          • 在编译时往 package/base-files/files/etc/sysctl.d/ 里添加11-nf-conntrack.conf 文件,然后添加net.netfilter.nf_conntrack_max=65535即可
        • 修改默认密码
          • cat package/base-files/files/etc/shadow
        • 参考:https://iqqoz.com/post-2843.html
      • 更新 feeds:
        •  cd openwrt
           git pull
           ./scripts/feeds update -a
           ./scripts/feeds install -a
          
      • 配置 openwrt 编译文件:make menuconfig
      • 下载 dl 库:make download -j8
        • 验证是否下载成功:find dl -size -1024c -exec ls -l {} \;
        • 删除没有成功的下载项:find dl -size -1024c -exec rm -f {} \;
      • 编译:make V=s -j$(nproc) | tee ../compile.log
        • 网上都说首次只能开启一个线程编译,但我觉得没必要,单线程非常耗时,且该有的错误它也一定会出现,如果用多线程编译出错,可用下面的方法找到错误
          • cat ../compile.log | grep ERROR:
          • cat ../compile.log | grep failed
      • 二次编译(不对 menuconfig 做修改又重新编译一次,可选)
        •   cd openwrt
            git pull
            ./scripts/feeds update -a
            ./scripts/feeds install -a
            rm -rf .config.old
            make defconfig
            make download -j8
            make V=s -j$(nproc)
          
      • 重新配置(可选)
        •   rm -rf ./tmp && rm -rf .config
            make menuconfig
            make V=s -j$(nproc)
          
      • 编译后的文件存储路径:bin/targets
    • lean 的 lede(适合国内环境的修改版 openwrt)
      • 下载源代码:git clone https://github.com/coolsnowwolf/lede
      • 添加自己需要的插件,如:Passwall、OpenAppFilter(可选,后续可手动编译成 ipk 文件,然后在 openwrt web 中安装)
        • 添加 Passwall 源(每次编译前都要在此目录中执行 git pull 获取最新的源代码
          • 在 lede/feeds.conf.default 添加 kenzok8 仓库在 make menuconfig 中找不到 passwall,所以只能用下面的方式:
          • cd lede/package/
          • git clone https://github.com/kenzok8/openwrt-packages.git
          • git clone https://github.com/kenzok8/small.git
        • 添加 OpenAppFilter 软件源(每次编译前都要在此目录中执行 git pull 获取最新的源代码):
          • cd lede
          • git clone https://github.com/destan19/OpenAppFilter.git package/OpenAppFilter
      • 更新 feeds:
        •  cd lede
           git pull
           ./scripts/feeds update -a
           ./scripts/feeds install -a
          
    • 配置 openwrt 编译文件:make menuconfig
    • 下载 dl 库:make download -j8
    • 编译:make V=s -j$(nproc) | tee ../compile.log

FAQ

参考

上次更新:
贡献者: iEchoxu