基于 macOS 编译 OpenWrt

网上进行编译的贴子大部分要求一台 Ubuntu 及自备梯子的环境,自己在阿里云的环境是 Arch Linux,但不具备梯子的环境,就想着在自己的本子上进行一次编译,找到了相应的贴子,这里做个记录。

配置 OpenWrt 编译环境

使用 Homebrew 安装工具链、依赖与基础软件包

brew install coreutils diffutils findutils gawk gnu-getopt gnu-tar grep wget quilt xz

增加相应的环境变量,我的 shell 环境是 zsh,所以更改的是 .zshrc,之后重新加载一下这个文件。

echo 'export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.zshrc

source ~/.bashrc

创建大小写敏感的磁盘镜像

Open­Wrt 必须在大小写敏感的磁盘分区上进行编译,如果你的 ma­cOS 在安装时没有选择这种磁盘格式,那么就需要进行以下操作,去创建一个区分大小写的 HFS+ 格式的磁盘镜像。

创建镜像

hdiutil create -size 50g -type SPARSE -fs "Case-sensitive HFS+" -volname OpenWrt OpenWrt.sparseimage

挂载镜像

hdiutil attach OpenWrt.sparseimage

进入挂载路径,进行接下来的拉取源码和编译操作。

cd /Volumes/OpenWrt

开始编译

编译的过程就和网上的一样了,选择自己的架构,copy & paste

克隆 Open­Wrt 源码

git clone https://github.com/coolsnowwolf/lede openwrt
cd openwrt
这里以 Lean 大佬的源码仓库为例子,毕竟很多人都在用它。命令末尾加了openwrt是指克隆代码到openwrt目录,目的是为了规范化,因为有时并不是编译这个的源码。

拉取 feeds 源码

./scripts/feeds update -a
feeds 是扩展的软件包,独立于 Open­Wrt 源码之外,所以需要单独进行拉取和更新。

安装 feeds 中的软件包

./scripts/feeds install -a

调整 Open­Wrt 系统组件

make menuconfig
首次编译建议只选择架构,其它都不要动,这样编译成功率会更高。如果不打算调整组件则输入make defconfig,它会检测编译环境并生成默认的编译配置文件。

预下载编译所需的软件包

make download -j8 V=s
-j8是指使用8个线程下载,理论上是数字越大下载越快,但似乎有个上限,实测5线程以上其实速度相差不了多少,在网络好的情况下,基本在5分钟以内能下载完。

检查文件完整性

find dl -size -1024c -exec ls -l {} \;
此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} ;命令将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。

开始编译

make -j1 V=s
-j1:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志,多线程的错误日志是交织在一起的,不方便排错。
V=s:输出详细日志,用于编译失败时找出错误。

原贴地址:compiling-openwrt-with-macos

添加新评论