Skip to content
This repository has been archived by the owner on Mar 8, 2020. It is now read-only.

简易指南:使用 OpenWrt 的交叉编译 SDK 来编译 ipk 软件包

NemoAlex edited this page Dec 23, 2015 · 4 revisions

简易指南:使用 OpenWrt 的交叉编译 SDK 来编译 ipk 软件包

本文以编译 Linksys WRT1900ac 需要的 Shadowsocks/ShadowVPN/ChinaDNS 为例说明如何简单快速编译 ipk。

环境需求

你需要一台安装了 Linux 的 VPS。

当然本地 PC(或者本地虚拟机中的 PC)也可以,不过一般没有海外的 VPS 网速好。

无论如何都更推荐 VPS。

本文以 Linode1024 和 Debian 8.1 64 bit 举例说明。

为了简化操作,推荐使用 Docker 快速安装编译环境。

你也可以手动安装编译所需的一些工具链,可以参考官方说明文档

技能需求

本文尽可能采用简易的方法来简化操作步骤,但是仍然需要读者有基础的 Linux 命令行操作知识。

如果你具备了一定的 Linux 操作能力,那么本文可以给你一些启发,你可以选择适合自己的方式来做编译。(例如不用 Docker,不用 Debian 系的发行版等等)

开始

配置好 VPS 的操作系统,推荐 Debian 系(Unbuntu)尽量新的版本

打开命令行(Mac 和 Linux 自带),或者 Window 的第三方命令行软件(例如 PuTTY)登入 VPS:

ssh root@VPS的IP

安装 Docker

wget -qO- https://get.docker.com/ | sh

下载运行 docker-openwrt-buildroot 镜像

docker run -t -i nemoalex/openwrt-buildroot /bin/bash

下载完成,这时候应该进入了一个容器的环境中,输入 ls 可以看到有一个 openwrt 的目录,其实在这个目录里已经可以编译 openwrt 了,但是我们为了方便,还是使用特定版本的 SDK。

https://downloads.openwrt.org/ 找到对应的发行版和对应 CPU 架构的固件下载地址。例如我使用的就是 https://downloads.openwrt.org/chaos_calmer/15.05/mvebu/generic/

可以看到在目录中有一个 SDK 压缩包,复制此链接地址,下载到 VPS 上:

wget https://downloads.openwrt.org/chaos_calmer/15.05/mvebu/generic/OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2

下载完成后,解压:

tar -xf OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2

进入目录

cd OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64

环境搭建好,接下来就是编译了。

这里的示例是编译 aa65535 移植的三个软件: ShadowVPN Shadowsocks ChinaDNS

按照说明,把需要编译的 makefile 下载到 package 目录下:

git clone https://github.com/aa65535/openwrt-chinadns.git package/chinadns
git clone https://github.com/aa65535/openwrt-shadowvpn.git package/shadowvpn
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev

如果你需要编译其它的软件,请参考软件提供的说明。

选择需要编译的模块:

make menuconfig

进入 network 选单,ChinaDNS 和 ShadowVPN 默认就是选中的状态没问题,而 Shadowsocks 有4个版本,选择你想要的版本,按空格把其它版本取消掉,可以节约编译时间。 例如我只选择 shadowsocks-libev-spec-polarssl。 好了以后 Exit,Yes 保存。

开始编译:

make V=99

如果你使用的是多核心的 CPU,可以选择加上 -j 参数,例如8核:

make -j 8 V=99

之后就是漫长的等待的时间了。

编译成功以后,ipk 包在 bin/mvebu/packages/base/ 目录中(注意 mvebu 是对应 CPU 的名子),查看一下。

ls bin/mvebu/packages/base/

如果有对应的 ipk 文件的话,就说明成功了。

接下来的任务是把这些 ipk 上传到路由器上。

如果你的路由器有公网 IP,可以配置路由器允许从外网登入(开放22端口),那么首选 scp 的方式。例如:

scp bin/mvebu/packages/base/*.ipk root@路由器IP:/root/

大功告成。

如果没有公网 IP,那么可以使用其它的方式。例如在 VPS 上开一个简单的 HTTP 服务器。

首先退出 Docker:

exit

找到刚才使用的 docker 容器的 ID:

docker ps --all	

把ipk文件拷贝到宿主机:

mkdir ipks
docker cp 容器ID:/home/openwrt/OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/bin/mvebu/packages/base/ShadowVPN_0.1.6-1_mvebu.ipk ./ipks/
...

貌似是要一个一个文件拷贝,不支持通配符。如果不记得目录或者文件名的话可以进去再看一下:

docker start 容器ID
docker attach 容器ID

拷贝完成后,开一个简单的 http 服务器:

cd ipks
python -m SimpleHTTPServer 8080

然后在本地浏览器中打开 http://VPSIP:8080 ,下载文件。

完成以后就是去路由器上安装 ipk 包了,在本地使用 scp 把文件传上去,opkg install xxx.ipk 就可以了。这部分不是本文的重点,不再赘述。