MacOS使用Docker编译OpenWrt固件

in with 0 comment

偶然间看到了一个新的 OpenWrt 控制台主题,手痒之下尝试自行编译看看

编译环境

安装 Docker

我自己的笔记本配置为 i5-5200u,8G ram,运行 macOS Mojave 系统。出于简便性以及一点点洁癖,编译过程并不直接在本机环境进行,而是通过 docker 完成。

要注意的是,教程内涉及到网络连接的步骤请自行准备科学上网或是对应的国内镜像。

MacOS 中,我们可以很轻松地通过 HomeBrew Cask 安装:

brew cask install docker

安装完毕后,启动,注册并登入账号即可。

配置编译环境

按照下列步骤建立一个容器

docker pull ubuntu
#获取最新的官方 ubuntu 镜像
docker run -itd --name ow ubuntu
#从ubuntu镜像新建一个别名为ow的容器

这样,我们就建立了一个名为 ow ,专门用来编译固件的容器。

ubuntu 容器

然后进入容器,按下面步骤更新并安装必要的软件包

docker exec -it ow bash
#进入容器 ow 的 bash 环境
apt update
apt upgrade
#更新软件源并升级软件包
apt install sudo nano
#安装 sudo 以及 nano 编辑器(使用 vim 亦可)
adduser zsakvo
#新建一个名为 zsakvo 的用户(名字随意)

由于 OpenWrt 的编译要求使用非 root 账户,所以我们需要自行新建账户而后切换之。安装 sudo 并添加权限则是为了便于后面安装必要的编译工具。

echo 'zsakvo    ALL=(ALL:ALL) ALL' >> /etc/sudoers
# zsakvo 为上一步你添加的用户名

切换进刚才新建的用户,安装必要工具

su zsakvo
# zsakvo 为你的新建的用户名
sudo apt install git-core build-essential libssl-dev libncurses5-dev unzip
#安装交叉编译所需要的工具
sudo apt install subversion mercurial
#如果你需要 feeds 中的部分软件包则同时需要安装这两个

获取源代码

在容器 ow 内拉取必要的源代码:

cd ~&&git clone git://git.openwrt.org/openwrt/openwrt.git
#进入主目录,并获取 OpenWrt 源代码
cd openwrt
sudo apt install gawk wget
#安装必要的软件包
./scripts/feeds update -a
./scripts/feeds install -a
#下载并安装所有可用的 feeds
cd package&&git clone https://github.com/rosywrt/luci-theme-rosy.git&&cd ../
拉取 rosy 主题

开始编译

首先要生成必要的 .config 文件:

make menuconfig

自行设置各项参数

选择 Rosy 主题

在配置界面按照实际情况进行修改,然后保存并退出,即可开始正式编译(我本人编译耗时两个小时左右):

make V=s -j4
#-j自行设定线程数

编译完毕

编译成功后将编译好的文件复制出来即可:

docker cp ow:/home/zsakvo/openwrt/bin/targets/ramips/mt7620 mt7620
#注意替换自己的用户名与目录

将固件等复制到本地

后记

这个主题并没有想象的那么好看!

Responses