编译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 目录下就可以了

相关资源:

以下是截止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

OpwnWrt Image Builder make menuconfig 图 make menuconfig

OpenWrt Image Builder select shadowsocks-libev-polarssl 图 选择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 安装了

相关资源: