编译shadowsocks-libev for OpenWrt ipk安装包
不同OpenWrt版本下编译的shadowsocks-libev ipk一般是不能通用的。比如现在路由器用的是18.06.1版的OpenWrt,如果使用OpenWrt Chaos Calmer 15.05 下编译的shadowsocks-libev,可能安装后根本不能启动
如果你懒得自己编译,可以到下面地址下载:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
以下 不要使用root用户来操作
用OpenWrt SDK 编译 ipk(2018-09-22更新)
SDK是一个可重定位,预编译的OpenWrt toolchain(工具链),适用于为特定目标交叉编译单个用户空间包,无需从头开始编译整个系统
使用SDK的原因是:
- 为特定版本编译自定义软件,同时确保二进制和功能兼容性
- 编译某些软件包的较新版本
- 使用自定义修补程序或不同功能重新编译现有包
在2016年及以前的文章中,我们没有使用 SDK , 自己重新编译一遍 toolchain 要花费较长时间,现在用预编译的 SDK 可以大大节省编译 ipk 的时间
获取SDK:
您可以下载已编译的SDK,也可以使用“make menuconfig”命令自行编译
如果编译 ipk 所使用的 OpenWrt 版本和 固件的 OpenWrt 版本不同,那么可能会有兼容性问题。为了确保兼容, 我们在同一个页面下载 imagebuilder 和 SDK
今天是2018年9月22日, OpenWrt 适用于 ar71xx/nand 最新稳定版 18.06.1 在这个页面下载(适合于WNDR4300路由器):
http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/
注意,此处只是 Ubuntu 64bit 上示范编译 shadowsocks-openwrt-libev 的过程,不同的路由器的下载目录可能不同
先决条件:
请参阅 OpenWrt Buildroot 页面以安装所需的软件以在SDK上构建软件包
注意:在某些主机上,需要安装ccache包
Ubuntu 编译shadowsocks-libev for OpenWrt 步骤:
-
安装 ccache
sudo apt install ccache
-
下载 OpenWrt-SDK
cd ~/Downloads wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz tar -xf openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz mv openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64 openwrt-sdk-nand cd openwrt-sdk-nand
-
添加 feeds
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
-
获取 shadowsocks-libev Makefile
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev
-
include/toplevel.mk:136: recipe for target 'menuconfig' failed
-
选择要编译的包 Network -> shadowsocks-libev
make menuconfig
选择
Network --->
回车进入, 光标移动到 shadowsocks-libev-server 按 n 取消选择,Exit
退出退出时会询问:
Do you wish to save your new configuration?
Yes上回车
-
开始编译
make package/shadowsocks-libev/compile V=99
输出文件:
$:~/Downloads/openwrt-sdk-nand/bin$ tree .
.
├── packages
│ └── mips_24kc
│ ├── base
│ │ ├── libmbedtls_2.12.0-2_mips_24kc.ipk
│ │ └── shadowsocks-libev_3.2.0-1_mips_24kc.ipk
│ └── packages
│ ├── libcares_1.14.0-1_mips_24kc.ipk
│ ├── libev_4.24-1_mips_24kc.ipk
│ ├── libpcre_8.42-1_mips_24kc.ipk
│ └── libsodium_1.0.16-1_mips_24kc.ipk
└── targets
└── ar71xx
└── nand
└── packages
├── libatomic_7.3.0-1_mips_24kc.ipk
├── libc_1.1.19-1_mips_24kc.ipk
├── libgcc_7.3.0-1_mips_24kc.ipk
├── libpthread_1.1.19-1_mips_24kc.ipk
├── librt_1.1.19-1_mips_24kc.ipk
└── libstdcpp_7.3.0-1_mips_24kc.ipk
packages\mips_24kc\下 shadowsocks-libev是主文件,除libpcre以外的四个文件是必须依赖,编译翻墙固件时,把相关 ipk 复制到 imagebuilder/packages 目录下就可以了
相关资源:
-
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
-
https://openwrt.org/docs/guide-developer/obtain.firmware.sdk
-
https://openwrt.org/docs/guide-developer/build-system/install-buildsystem
以下是截止2016年4月的内容, 可与上面用SDK编译的方法对照: --------------------
下面是在Ubuntu 64bit下编译shadowsocks-libev for OpenWrt ipk安装包的步骤:
安装依赖库,不同的操作系统版本可能要作相应调整
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext
下载OpenWrt源代码
cd ~/Downloads
git clone git://git.openwrt.org/openwrt.git
下载shadowsocks-libev源码
cd ~/Downloads/openwrt
pushd package
git clone https://github.com/shadowsocks/shadowsocks-libev.git
popd
或者:
cd ~/Downloads/openwrt/package
git clone https://github.com/shadowsocks/shadowsocks-libev.git
编译 DIR505固件2015-12版时用的源码版本是:Date: Tue Dec 22 21:42:40 2015
更新Feeds
使package在make menuconfig中可用,而不是真正安装或编译,并按照自己的路由型号设定target,否则默认target下编译好的工具链在重新设定target后无效
cd ~/Downloads/openwrt
./scripts/feeds update -a
./scripts/feeds install -a
# run make menuconfig and set target;
# Choose your own Target System -> SubTarget -> Target Profile
make menuconfig
make defconfig
先编译要用到的工具和库
make prereq && make tools/install && make toolchain/install
等待时间较长,可以先和大妈一起去跳个广场舞,制造更多噪音恶心一下别人:)
make menuconfig配置选项
# 运行命令
make menuconfig
有三个选项:
- y: 编译进固件
- m: 编译出安装包,但不打包进固件
- n: 排除
输入命令make menuconfig
进入配置程序后:
- Target System:
- Atheros AR7xxx/AR9XXX (Default value,不同的路由器,可能选择不同) 适合: WNDR4300, DIR505A1, TLWR2543
- Subtarget:
- Generic device with NAND flash 适合: WNDR4300
- Generic 适合: DIR505A1
- Target Profile: (因我们只是编译包,这步可以不选)
- Network, 选择shadowsocks-libev 和 shadowsocks-libev-polarssl, 按m设置为编译独立ipk安装包
- Save && Exit
图 make menuconfig
图 选择shadowsocks-libev-polarssl
编译shadowsocks-libev for OpenWrt
make V=99 package/shadowsocks-libev/openwrt/compile
查看编译出的shadowsocks-libev和shadowsocks-libev-polarssl文件
cd ~/Downloads/openwrt/bin/ar71xx/packages/base/
tree
├── libc_1.1.11-1_ar71xx.ipk
├── libgcc_5.2.0-1_ar71xx.ipk
├── libopenssl_1.0.2e-1_ar71xx.ipk
├── libpolarssl_1.3.15-1_ar71xx.ipk
├── libpthread_1.1.11-1_ar71xx.ipk
├── shadowsocks-libev_2.4.3_ar71xx.ipk
├── shadowsocks-libev-polarssl_2.4.3_ar71xx.ipk
└── zlib_1.2.8-1_ar71xx.ipk
# 如果用来编译翻墙固件,把shadowsocks-libev复制到Image Builder目录下:
# for DIR505A1:
cp shadowsocks* ~/Downloads/openwrt-imagebuilder-ar71xx-generic.Linux-x86_64/packages/base
# for WNDR4300
cp shadowsocks* ~/Downloads/openwrt-imagebuilder/packages/base
把文件scp复制到OpenWrt路由器/tmp,就可以 opkg install shadowsocks-libev_2.4.3_ar71xx.ipk
安装了
相关资源: