创建编译环境_编译OPENWRT固件_用SDK为官方固件编译第三方软件3proxy

创建编译环境_编译OPENWRT固件_用SDK为官方固件编译第三方软件3proxy

转载注明来源: 本文链接 来自osnosn的博客,写于 2021-11-23.

参考

给 newifi Y1, mt7620 编译一个 3proxy

  • 装一个 debian 11.
  • 根据官方文档 Using SDK , 用 apt install 给 debian 安装支持包。
    • 用源码包,也可以单独编译软件包。但第一次编译,需要编译的东西很多,耗时长。
  • --- 以下步骤在 非root 身份下操作! ---
  • 下面的很多下载都是用git,而git的操作目标, 大多都比较慢。设置一下git的代理。
    参考此贴的git部分【yum_apt_golang_curl_py3_pip3_php_git_wget_设置_proxy_socks5_tsocks
  • 3proxy不是golang的项目,无需准备 upx。
  • https://openwrt.org/downloads, 找到 Mirrors 找一个合适的镜像站。
    进入 releases/19.07.8/targets/ramips/mt7620/ 找到 sdk 包,
    openwrt-sdk-19.07.8-ramips-mt7620_gcc-7.5.0_musl.Linux-x86_64.tar.xz 下载。
  • 解压 sdk 包。cd进入 sdk 目录。
  • 编辑feeds.conf.default, 为编译第三方而加入源。对于现有软件,无需更改feeds。
  • 把第三方软件 3proxy 放入 package 目录
    看 【https://github.com/osnosn/3proxy-openwrt
  • 如果想指定3proxy版本,执行以下两行。否则跳过这两行
    cd package/3proxy
    git checkout v0.8.13
  • rm -rf tmp/
  • ./scripts/feeds update -a, ./scripts/feeds install -a
  • 默认 menuconfig 选取了大多数的软件包。对于指定软件包的编译,没什么影响。
    指定软件包的编译,只会编译相关的依赖包。
    如果看着不舒服,可以这么操作,减少选择。
    • 缺省有 860 多个 built-in,8400 多个 module。
    • make menuconfig, 进入"Global build settings", 去掉前三个"Select all..."的项目。
    • 现在,大约有 640 多 built-in, 890 多 module。
    • 不过可能因为少选了什么,导致 menuconfig 中看不到你想编译的包名称。
      可以试着恢复第三个 "Select all userspace packages by default" 再看看。
  • 可用的命令说明:
    make package/3proxy/download 下载
    make package/3proxy/prepare 解压,如需则自动下载、patch
    make package/3proxy/compile 编译,如果需要会自动下载、解压、patch。
    make package/3proxy/clean 清理编译目录
  • 直接 make package/3proxy/compile V=s -j2 2任务并行
    • 用任务并行,根据你机器的实际cpu内核数量设置。
      是否使用多任务,对编译结果没影响。
      只是,多个任务的输出信息,全混在一起了。
      如果编译失败,信息没法看。
      这时候,就只能老老实实的用 -j1 ,这样才能看清楚出了什么错误。
  • 完成,在 bin/packages/.... 目录中,可以找到 ipk 文件。
  • 另外,make compile 过程中会自动下载很多依赖包到 dl 目录。
    mv dl/ ..; ln -s ../ld dl 下载目录放在外面。哪天玩坏了sdk,删了重建就不需要重新下载依赖包。

其他第三方包

  • 看看
    https://github.com/kenzok8/openwrt-packages
    https://github.com/kiddin9/openwrt-packages
    xiaorouji #1557
    https://github.com/liuran001/openwrt-packages
  • 单独获取 svn co https://github.com/liuran001/openwrt-packages/trunk/frp
    见【github_拉取指定子目录_使用svn
  • 有的包,编译完,要到 bin/packages/..../base/ 中找。
  • 编译frp之类的golang包, 如果要指定代理, 用这种方式,同时指定两种代理,否则编译过程,会下载失败。
    http_proxy=http://user:pw@127.0.0.1:888/ https_proxy=http://user:pw@127.0.0.1:888/ make package/xxxx/compile V=s
    或者设置 GOPROXY=https://goproxy.io,direct 这个环境变量。
  • 编译 golang 写的包,会用到 upx 压缩。而 SDK 又找不到upx命令。
    需要事先 ln -s /usr/bin/upx staging_dir/host/bin/
    否则编译出来的文件体积很大。
    • 对于mipsel架构的程序,新版upx-3.96压出来的程序无法启动。最新可用的只有upx-3.93
      参考【GOLANG 的交叉编译以及 upx 压缩】。可以下载预编译包【github-upx】。
    • 对于x86-64的程序, upx-3.93会Segmentation fault (core dumped)
      只好用系统自带的upx-3.96。用这个版本压缩x86_64的程序,能正常使用。
  • 各种项目的编译过程,都会按需下载所需组件。分别会用到 curl wget git svn go, 为了顺利,可以都事先设置好它们的缺省代理
    curl 设置 ~/curlrc , wget 设置 ~/.wgetrc , git 设置 ~/.gitconfig , svn 设置 ~/.subversion/servers , go 用 http_proxy https_proxy 或 GOPROXY 环境变量。
    见【yum_apt_golang_curl_py3_pip3_php_git_wget_设置_proxy_socks5_tsocks
    curl 和 wget, 优先用curl。如果没装 curl 才会用 wget。
    如果用wget,必须用 http 代理,因为 wget 不支持socks5。其他几个都支持 socks5 和 http。
    还有几个,bzr, hg, darcs 应该用不到。
  • 如果在 WSL 中编译,而win系统中装了360防毒。以下是编某个东西时make compile的耗时对比。
    • 防护全开,37min10s。
    • 关闭进程防护,3min15s。
    • 关闭进程防护,关闭文件系统防护,2min59s。

其他参考


转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/15594017.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .


原文地址:https://www.cnblogs.com/osnosn/p/15594017.html