OpenWrt/LEDE 搭建 KMS 服务器

https://www.mivm.cn/openwrt-kms/

 

 

如果你经常重装系统,或者是经常安装 Windows 虚拟机,最头疼的可能就是每次安装后的系统激活。

一般激活 Windows 或者 Office 最多的就是激活工具,厉害一点的小伙伴会使用密钥激活。但是激活工具五花八门,而且一般找不到激活工具的官网或者是官方下载地址,下载来源没有保证,虽然一般不会中毒,但是有些流氓会恶意锁定浏览器主页或者是安装一些软件,这让小白很苦恼。

不过如果你有一台运行 OpenWrt 的路由器,就可以把它变成 KMS 服务器,只要连接至路由器,就可以轻轻松松激活 Windows 和 Office。

今天教大家在 OpenWrt 搭建 KMS 服务器,以及如何激活 Windows 和 Office。

搭建 KMS 服务器

OpenWrt 搭建 KMS 服务器非常简单,但是又稍微比较麻烦,因为 OpenWrt 官方源没有 vlmcsd,所以就需要编译。

如果你使用的是 PandoraBox (潘多拉)可以直接搜索并安装:luci-app-vlmcsd

编译的方法请看《OpenWrt SDK 编译软件包(基础篇)》的例子,不过我们在编译前需要改一点东西,这个 Luci 界面有点问题。

打开 package/luci-app-vlmcsd/Makefile,20 行DEPENDS:=+vlmcsd +PACKAGE_dnsmasq:dnsmasq +PACKAGE_dnsmasq-dhcpv6:dnsmasq-dhcpv6 +PACKAGE_dnsmasq-full:dnsmasq-full,改为 DEPENDS:=+vlmcsd,然后重新编译,编译完成后上传至路由器安装。

安装完成后,访问路由器管理界面,[服务] → [KMS服务器] → 勾选 [开始] 和 [使用配置文件] → [保存&应用],[自动激活] 我没试过,想尝试的小伙伴可以试一试。

至此,KMS 服务器就搭建完成了,下面就可以激活 Windows 和 Office 了。

激活 Windows 和 Office

注意:仅 Windows Vista 及以上系统可以使用 KMS 激活,且 Windows7 旗舰版 不支持 KMS 激活。

这里以 Windows 10 专业版和 Office 2016 为例演示如何激活。

KMS 激活也需要密钥,且每个系统版本的密钥不同,不过只有 1 个密钥,比如 Windows 10 专业版的密钥:W269N-WFGWX-YVC9B-4J6C9-T83GX

Windows KMS 密钥:https://technet.microsoft.com/en-us/library/jj612867(v=ws.11).aspx

Office KMS 密钥:https://technet.microsoft.com/en-us/library/dn385360(v=office.16).aspx

激活 Windows 10 专业版

右键开始菜单,点击 [命令提示符 (管理员)] 或 [Windows PowerShell (管理员)]

输入 slmgr /upk 卸载原有密钥,如果是刚装好的系统,这一步可以省略。

输入 slmgr /skms 192.168.1.1 设置 KMS 服务器地址,如果你的路由器 IP 不是 192.168.1.1,记得改一下。

输入 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 安装 KMS 密钥

输入 slmgr /ato 查看激活状态,如果显示 “成功地激活了产品”,表示激活成功,

每隔 180 天会自动续订,不需要担心激活过期。

激活 Office 2016

Office 激活稍微麻烦点

右键开始菜单,点击 [命令提示符 (管理员)] 或 [Windows PowerShell (管理员)]

输入 cd "C:\Program Files (x86)\Microsoft Office\Office16" 这个是 Office 激活脚本所在位置,不同的 Office 版本不一样,比如 Office 2013 是 cd "C:\Program Files (x86)\Microsoft Office\Office15"

PowerShell 输入 foreach ($x in Get-ChildItem ..\root\Licenses16\*_KMS*.xrm-ms -name) {cscript ospp.vbs /inslic:"..\root\Licenses16\$x"} 安装 KMS 许可证

命令提示符 输入 for /f %x in ('dir /b ..\root\Licenses16\*_KMS*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%x" 安装 KMS 许可证

Office 2013 好像不需要安装许可证(VOL版)

输入 cscript ospp.vbs /sethst:192.168.1.1 设置 KMS 服务器地址,如果你的路由器 IP 不是 192.168.1.1,记得要改一下。

输入 cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 安装 KMS 密钥

输入cscript ospp.vbs /act 激活已安装的 Office 密钥

输入 slmgr /ato SKUID 查看激活状态,SKUID 在上面那个命令输出结果里面。

我测试的过程中发生了点小意外,所以截图我就不发了。(我才不会告诉你们是因为我懒)

如果你的路由器有公网 IP 或可以外网访问,可以把 KMS 服务器端口(1688)转发做远程 KMS 服务器给他人使用。


这下就不怕重装系统激活失效了,也不用担心激活工具附带病毒木马,有任何问题在下方给我留言。

 

OpenWrt SDK 编译软件包(基础篇)

https://www.mivm.cn/openwrt-sdk-package-foundation/

OpenWrt 是个非常好用且强大的 Linux 发行版,常用于路由器等嵌入式设备。之前我也写了不少关于 OpenWrt 的教程。

OpenWrt 和其他 Linux 发行版一样,都可以通过软件包源码编译适合自己设备运行的软件包,不过由于 OpenWrt 大部分运行于路由器,存储空间不充裕,并没有像其他 Linux 发行版那样附带 GCC 可以及时编译,不过 OpenWrt 提供了 SDK,可以使用其他 Linux 发行版来为 OpenWrt 编译软件包。

这篇教程就教大家如何使用 OpenWrt SDK 来为自己路由器的 OpenWrt 编译软件包,这样大家就可以自己编译一些开源项目或者是《OpenWrt 安装及配置 Aria2 教程》里面提到的完整版 Aria2 这种的。当然,同样适用于 LEDE 和 PandoraBox。

准备工作

首先需要一个 Linux 系统,不要使用 Windows10 的 Linux 子系统,要使用完整的 Linux 系统。

推荐使用 Deepin (深度 Linux),由国人团队开发,附带安装器,只需轻点几下鼠标,就可以完成双系统的安装。系统附带了 Chrome、QQ、网易云音乐等常用软件,不用担心不会使用 Linux 的尴尬。

系统安装后,打开终端 Ctrl + Alt + T ,依次输入:sudo apt-get update # 更新软件源sudo apt-get upgrade -y # 更新软件包sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db libncurses5-dev gawk gettext unzip file libssl-dev wget -y # 安装所需软件包,然后重启系统。

如果你使用 PandoraBox SDK 进行编译,推荐使用 Ubuntu 14.04 系统,或者使用我写的脚本来安装所需依赖库。wget https:https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-sdk-package-foundation/PandoraBoxSDK_lib.tar.gz && tar zxf PandoraBoxSDK_lib.tar.gz && cd PandoraBoxSDK_lib && sudo ./install.sh

然后下载适合你路由器的 OpenWrt SDK,根据 CPU 架构和系统版本,比如 K3,CPU 架构是 bcm53xx,系统是 LEDE Snapshots,下载 bcm53xx 的 LEDE Snapshots SDK。

将下载好的 SDK 解压,就可以开始编译软件包了。

编译软件包

打开 SDK 文件夹 → 右键空白处 → [在终端打开] → 依次输入 ./scripts/feeds update -a # 更新软件列表 、 ./scripts/feeds install -a # 安装软件列表make defconfig # 生成配置文件

PandoraBox SDK 默认没有软件列表配置文件,下载 https://cdn.mivm.cn/Hill-Blog/article/openwrt-sdk-package-foundation/feeds.conf.default 复制至 PandoraBox SDK 目录,执行更新和安装命令和 ./scripts/feeds uninstall base-files busybox freeswitch # 卸载不兼容的软件包

输入 make menuconfig 进入配置界面

界面操作

↑ ↓:目录选择

← →:功能选择

回车键:执行功能

Y: 选中

N:取消选中

Esc:返回

斜杠键:搜索

功能选项

Select (选择):这个选项下按回车才可以进入目录。

Exit (退出):和 ESC 键作用相同,返回上一级或退出。

Help (帮助):显示帮助信息。

Save (保存):保存当前配置信息变更,每次退出前记得保存一下。

Load (加载):加载其他配置文件,一般用不到。

目录后面有箭头都可以进入,前面有方括号的都可以选中。

接下来编译个自带软件列表的软件包,以完整版 Aria2 为例。

打开配置界面

依次进入 [Network] → [File Transfer]

按 Y 选中 Aira2

进入 [Aria2 Configuration]

有几个没有被启用的选项(功能),依次按 Y 选中启用

保存 → 退出

输入 make package/aria2/compile V=s 开始编译,耐心等待编译完成。如需编译其他软件包,把 aria2 改为对应的软件包名即可,前提是软件列表有对应软件包。

注:V=s的作用是输出详细信息

推荐使用代理加速软件包源码下载

如果你的 CPU 有多个线程,可以加上 -j线程数 来使用多线程编译,例如:make package/aria2/compile V=s -j4 # 启用4个线程

编译好的 ipk 文件可以在 bin/packages/arm_cortex-a9/packages 找到。当然,不同的软件包和 CPU 架构路径不一样,不过都在 bin/packages

有时候我们需要编译第三方软件包怎么办?接下来以 vlmcsd (KMS服务器) 为例,教大家编译第三方软件包。

输入 cd package # 进入 package 目录

git clone https://github.com/openwrt-develop/openwrt-vlmcsd.git # 获取 vlmcsd 源码 和 git clone https://github.com/openwrt-develop/luci-app-vlmcsd.git # 获取 vlmcsd Luci 界面源码

cd .. # 返回上级(SDK)目录

make menuconfig

不知道软件包在那个分类怎么办?可以使用搜索功能,按斜杠键后输入关键字,然后找到我们需要的软件包,Location 就是软件包所在位置。

vlmcsd 在 Network → 找到软件包并选中

保存 → 退出

输入 make package/openwrt-vlmcsd/compile V=s # 编译 vlmcsd 和 make package/luci-app-vlmcsd/compile V=s # 编译 Luci 界面。有小伙伴可能要问了,软件包名不是 vlmcsd 吗,为什么命令是 openwrt-vlmcsd ?

那个是源码文件夹名称,源码文件夹名称是 openwrt-vlmcsd,也可以把文件夹名称改下。

第三方软件包编译的 ipk 一般是在 bin/packages/arm_cortex-a9/base

适用于 OpenWrt SDK 编译第三方软件包可以在 GitHub 找到,你可以在搜索软件名称后面加上 openwrt,比如:”vlmcsd openwrt”。

常见问题

问:为什么我make menuconfig之后没有软件包?

答:需要更新 feed 列表源,./scripts/feeds update -a # 更新软件源 、 ./scripts/feeds install -a # 安装软件源

问:为什么我编译会报错?

答:详细查看输出信息,找出错误信息部分,并尝试解决,你也可以将错误信息截图至QQ群并@小山。

问:软件源没我需要的软件包怎么办?

答:可以参考上面编译 KMS 服务器的方法,去 GitHub 寻找对应的软件包,也可以点击网站底部的 GitHub 图标到小山的仓库里寻找。注意!我重点说一下,并不是随便一个程序的源码复制/克隆到 SDK 目录就可以进行编译的。首先,确保你准备编译的源码支持configuremake,然后,这份源码不是直接放在 SDK 目录的,而是要再写一个 Makefile 用于 SDK,告诉 SDK,你这个源码的下载地址、软件包名称、版本号、依赖项等等,然后软件包才可以显示在软件包列表里,才可以用上面的方法编译。关于怎么写这个 Makefile,可以参考http://wiki.openwrt.org/doc/devel/packages,相信稍微有点编程基础的人都看得懂。当然,也有不用写 Makefile 的方法,直接用工具链编译,不过这个也有点麻烦,暂且不讨论。

问:PandoraBox SDK 编译某些软件包报错怎么办?

答:PandoraBox SDK 编译某些软件包确实会报错,至于报错的原因,我还没搞懂,有搞懂的小伙伴欢迎留言给我。

如果你还有什么不懂的地方,欢迎在下方留言。

KMS 自动激活利器 – vlmcsd for OpenWrt / LEDE

https://cokebar.info/archives/1890
KMS 激活是很多人激活 Windows / Office 软件的常用方法,非常好用。然而大多数都需要在本机上运行激活软件,并且如果想要自动180天续期则需要安装加载项,而且每台设备都要做一次。

如果在局域网中有一台常开的设备,在这台设备上运行KMS服务器软件,那么连入该局域网的所有设备就可以自动KMS激活而无需使用那些KMS激活软件了,可以说是一劳永逸。常开的设备?又不想太浪费电?当然路由器是最佳选择。路由上当然也是有这样的软件的。


vlmcsd 是HotBird64所写的一款C语言编写的KMS模拟器。http://forums.mydigitallife.info/threads/50234

软件本身同时兼容Linux和Windows;同时由于是C语言所写,软件体积也很小,部署到路由器上最合适不过了。本人这里提供一个 OpenWrt / LEDE 的移植版本,提供部分常见平台的ipk预编译包,可以直接下载安装。你也可以自行下载源码编译安装。
下载完成后,上传至路由/tmp目录,安装:

打开LuCI,“服务”→“vlmcsd”:

直接勾选启用、自动激活;配置文件保留默认即可。点击保存&应用。

 

接下来测试一下自动激活是否配置成功,在PC端(Windows)的命令行执行:

如果有返回的SRV记录,并且IP为路由器IP则成功。

接下来你就可以装个 Windows / Office VL版试试啦。

各版本序列号可以在这里找:

https://github.com/Wind4/vlmcsd/tree/gh-pages

Openwrt/LEDE SDK交叉编译ipk包过程全纪录

Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)

https://blog.csdn.net/lvshaorong/article/details/52931211

刚刚买了一个网件wndr4300路由器,快递还没送来就已经开始琢磨刷机的事了。卖家提供了一个明月的op固件,里面功能超级多但是非常臃肿,我在hg255d上的使用经验告诉我这样臃肿的包非常耗费CPU资源,而且会导致网速变慢和无故重启。恩山上大神编译的几乎都是添加了很多应用的固件。而我只需要一个ss功能就够了,最好有luci界面,所以决定自己编译出ipk包放到路由器上使用opkg安装。

注:OP的SDK算是比较好用的SDK工具了,可以自动帮你解决依赖问题,但是如果你使用潘多拉BOX的SDK或者LEDE的SDK就没有OP的这么好用了,往往会出现各式各样的错误,经常找不到依赖库等等。对此我又单独谢了一片文章介绍如何在潘多拉和LEDE SDK环境下编译IPK,有兴趣的可以看这篇:《Pandora/LEDE SDK交叉编译OpenWrt ipk安装包的方法

首先去openwrt ss的github官网,https://github.com/shadowsocks/openwrt-shadowsocks 这上面只给了makefile文件,没有c源码,因为c源码都在Shadowsocks-libev项目上,在makefile时会自动的去github上下载一个tar包,然后编译那里面的文件,如https://github.com/shadowsocks/openwrt-shadowsocks/releases/download/v2.5.5/shadowsocks-libev-2.5.5.tar.gz,如果你网速很慢可以把makefile中相关的url改掉换成本地下载好的tar包。正常情况下我们不需要修改makefile就能正常编译。

注意:在编译过程中会联网下载大量的依赖库,所以一定要保证网络畅通稳定,否则会频繁失败,我在下载依赖库的时候都不到2KB/s。

网上很多编译ss的教程都是2014年的,它们都是直接clone openwrt的源码,然后用openwrt的源码编译出很多编译工具再编译apk,这样做非常的耗时,我亲自试过大概花了3个多小时也没成功,自从有了SDK之后就不用这么麻烦了,编译过程10几分钟就可以搞定。同样github上也推荐我们使用SDK进行编译。

注意:SDK版本要选择适合你路由器及路由器上系统的,比如CC15.05 SDK编译出来的ipk不能装载trunc版上,反之亦然,所以我们要选择适合路由器上openwrt系统的SDK,下文以wndr4300 CC 15.05 版openwrt为例。

首先去openwrt的官网下载相关SDK,http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/ 如果你要编译的不是wndr4300,可以去根目录自己通过CPU,内存类型选择相应的SDK进行下载,这里就不废话了。

如上图,第一个黄线是编译固件要用的ImageBuilder,是编译完整固件用的,我们只编译ipk软件包所以用不到,第二个黄线就是我们要用的SDK文件了

第三个和第四个都是纯净版的OP系统,可以下载然后刷到wndr4300路由器里面,一个是原有OP网页刷,一个是原版或者tftp刷的固件。刷入这个固件然后再opkg安装我们编译出的ipk包就具备相关功能了。所以此时我们首先下载SDK。

下载完成之后放到一个好记而且没有权限限制的目录中,比如我在我的用户目录下建立一个叫OP_SDK的文件夹,然后把这个tar包放进去

注:我是用的winscp放进去的,在linux下可以直接使用wget http://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/nand/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2 来下载这个tar包

放上去之后我们解压这个tar包

tar xjf OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2

解压完之后 OP_SDK目录下就会出现一个和tar包同名的文件夹,这里面就是我们要用到交叉编译的SDK了然后做非常重要的一步,安装编译相关的依赖库文件,否则进不去make menuconfig

sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk
sudo apt-get install subversion mercurial

而且还有非常重要的一步,是安装c编译环境,当初我就因为ccache没有安装导致一晚上都白忙活

sudo apt-get install ccache

因为ccache Ubuntu 16.04没有默认安装,导致编译的时候一直报 C compiler cannot create executables错误,浪费了很多时间

基本的环境安装完成之后,我们就可以开始编译工作了,注意保持网络畅通

根据github上的README即可

cd ./OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/
# 安装 feeds
./scripts/feeds update packages
./scripts/feeds install libpcre

# 添加 feeds(ss v2.5.6之后的版本)
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
# 添加 feeds(ss 2.5.6版及之前,LEDE PandoraBox的SDK)
git clone https://github.com/AlexZhuo/openwrt-feeds.git package/feeds
=============先到这里暂停=============
# 获取 Makefile
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev
# 选择要编译的包 Network -> shadowsocks-libev
make menuconfig
# 开始编译
make package/shadowsocks-libev/compile V=99

现在我们先开始安装feeds,就是用来选择编译什么插件用的列表

安装feeds的第一行命令会联网下载feeds列表,比较费时,第二行会报miss index的warning,不用管。

然后克隆git上的makefile文件下来,如果你网速慢也可以自己下载然后放到./package/shadowsocks-libev下面去,注意这里不要改文件夹的名字,因为写死在makefile里面了

但是这里我们暂停一下,因为编译ss是一个完整的解决依赖-编译-连接的过程,很容易出错,而编译luci UI界面只需要简单的打包一下即可,所以不妨先编译一下luci体会一下。

git clone https://github.com/shadowsocks/luci-app-shadowsocks.git package/luci-app-shadowsocks
# 编译 po2lmo (如果有po2lmo可跳过)
pushd package/luci-app-shadowsocks/tools/po2lmo
make && sudo make install
popd
# 选择要编译的包 LuCI -> 3. Applications
make menuconfig
# 开始编译
make package/luci-app-shadowsocks/compile V=99

首先git克隆,此时在package目录下会出现一个luci的目录

然后继续执行,并不容易出错

然后选择编译luci的ipk通过make menuconfig

选择LuCI,确认时<M>选中,代表编译出ipk包

然后选择<Save>回车,保存后,连续选择<Exit>退出

上图直接选择<Ok>即可

然后我们就可以开始编译luci了

make package/luci-app-shadowsocks/compile V=99

因为不依赖c编译环境,所以不容易出错

然后去/bin/ar71xx/packages/base目录下就可以看到我们编译好的ipk了,把它取出来放到别的位置上然后删掉,我们准备开始编译ss

现在开始克隆ss的openwrt版并把刚才克隆的./package/luci-app-shadowsocks给删掉

注:本文以ss-libev v2.5.6为例,目前ss已经更新迭代多次,所以依赖库也不尽相同。所以git克隆完毕后要reset到2.5.6的版本

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

cd ./package/shadowsocks-libev
git reset --hard v2.5.6

注:如果你想编译v3.0以上的版本,还需要获得一些openwrt没有提供的依赖包的makefile,需要执行如下语句

# 添加 feeds
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds

然后像刚才选择luci一样在make menuconfig中选择ss

OpenSSL版支持的加密方法多,PolarSSL支持的加密方法少,看你的需求而定

注意:只编译上面选择的两个或者一个就好,不要选择第mbedTLS版,因为mbedtls需要第三方依赖库,而ubuntu是不给你自动安装的,会因为缺少依赖而编译失败

然后跟luci一样<Save>然后连续<Exit>

下面就是最激动人心的一步了,开始我们的c编译,连接过程

make package/shadowsocks-libev/compile V=99

在这个过程中会联网下载很多个依赖,要保证网络畅通然后静等,注意*不要*使用sudo权限!整个编译耗时大约2分钟左右,视网络状况而定下图是下载某个依赖库

下图是下载Shadowsocks-libev的源码

如果没有报错就说明编译完成了

在这个编译过程中遇到问题退出是很正常的,完全不需要大惊小怪,而且随着版本的更新会不断的出现新的编译问题,就需要我们自己去解决。

多数的编译问题都是缺少依赖库或者网络不畅,需要我们仔细的查看config.log文件

查找这个文件的方法是执行

locate config.log

一般编译到哪一步失败就去看哪一步的config.log,我之前碰到的一个编译失败是因为没安装ccache,在上图黄线的config.log在文章最后贴出来

如果编译成功,我们可以在/bin/ar71xx/packages/base目录下看到编译好的ipk了,这两个ipk到时候只安装一个就好,不要都安装

现在挑一个你需要的ipk出来放到openwrt系统下使用opkg安装即可,还可以配合之前做好的luci UI界面ipk包

==============我是分隔线==============

经过漫长的等待,终于从快递手中收到路由器了,之前编译好的三个ipk包感觉已经躺了大半年了。现在终于可以刷进去了。怎么从wndr4300原版刷成op的纯净系统我就不说了,而且我已经让卖家卖给我之前就刷好一个CC版15.05.1的纯净系统,这个系统是我在恩山上找的,这里感谢一下作者xmit0806,该固件的帖子地址:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=186099

这个固件作者说支持了128M闪存(op官方版只支持32m闪存,浪费了90多mb),用dnsmasq-full替换了dnsmasq,添加了opkg软件源等,都是非常实用的。

注:如果刷该固件重启后不保留配置,重新用TFTP的方式刷一遍就好了,我就碰到过这个情况。还有虽然这个版本是15.05.1,但是使用15.05 SDK编译出来的ipk一样能用

好了言归正传,现在开始安装之前编译好的ipk包了。

首先看一下没安装之前的状态

看起来的确是很纯净,一个“服务”都没装,而且内存的空余很大,从上图可以看出,该机器之前没有安装ss-local服务

然后我通过winscp把编译好的ipk包上传到用户目录/root上去

这里winscp还有一些小坑,首先你的路由器必须设置了登陆密码才能用SSH登陆,SSH的用户名和密码就是路由器的登录名和登陆密码,这个在一进路由器后台就会用黄色的框提示你,直接修改就好,我选的登录名为root,密码为root,所以用户目录就变成了/root

还有winscp必须设置成scp协议,使用Ubuntu支持的sftp协议是登陆不进去的

然后我抱着必错的信念开始用opkg安装

果然不出我所料报错了,不过并不是什么大的问题,缺少两个依赖库,libpcre和libpthread

那怎么装这两个依赖包呢,手头有没有他们的ipk包。但是隐隐记得这个固件的作者添加了软件源,于是我打算拼死一搏

一搏有效,通过更新软件源的命令已经成功更新了base包和luci包,packages包更新太慢停掉就行,重要的是base

于是我根据上面的提示主动去openwrt的官网上去找packages包,找到了libpcre的依赖

还真让我找到了,赶紧下载下来放到路由器上(中间那个libpcre_8.38-1_ar71xx.ipk就是我们要用的)

注:packages包里要用的就它一个了,剩下的都在base包里

好了,解决了一个依赖,让我们先安装这个依赖再继续安装ss吧

哎呦,忘了还有一个依赖,opkg虽然下载的很慢,但是贴心的把这个依赖包的下载地址给打印出来了,那我就直接用迅雷下好放进去得了

放好了,我们开始安装吧

上图显示Openwrt已经成功安装了剩下的一个依赖和ss,看来我们SDK编译还是很成功的

现在让我们运行一下ss-local检验一下是否安装成功

ss-local有反应了,看来安装已经彻底成功了。

下面我们检查一下ss-redir的透明代理功能是不是好用,首先我们编写一个ss服务器的配置文件,监听0.0.0.0:1080(注意不能是127.0.0.1或内网地址,否则iptables无法转发)

然后调用ss-redir去执行该配置文件

看样子是启动成功了,而且最新版的Shadowsocks-libev可以使用-u参数支持udp转发,让我们再用netstat看看1080端口的情况

可以看出来,udp和tcp的1080端口均被ss-redir占用,说明启动成功了,下面只要配合iptables的转发就实现了透明代理了

上面只是一个简略版,完整的应该如下

[plain] view plain copy

  1. iptables -t nat -A PREROUTING -d 127.0.0.0/24 -j RETURN
  2. iptables -t nat -A PREROUTING -d 192.168.0.0/16 -j RETURN
  3. iptables -t nat -A PREROUTING -d 10.42.0.0/16 -j RETURN
  4. iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN
  5. iptables -t nat -A PREROUTING -d 10.0.0.0/8 -j RETURN
  6. iptables -t nat -A PREROUTING -d 172.16.0.0/12 -j RETURN
  7. iptables -t nat -A PREROUTING -d 224.0.0.0/4 -j RETURN
  8. iptables -t nat -A PREROUTING -d 240.0.0.0/4 -j RETURN
  9. iptables -t nat -A PREROUTING -d 169.254.0.0/16 -j RETURN
  10. iptables -t nat -A PREROUTING -p tcp -s 192.168.1.1/16 -j REDIRECT –to-ports 1080

然后用手机百度搜索ip,已经换成代理的ip啦。更宝贵的是ss-redir自带DNS防污染功能,访问谷歌,facebook神马的都畅通无阻啦,然后我们再测个速研究一下路由器的负载能力(我是20M光纤)

看起来是非常不错的,几乎可以把带宽跑满

下面我们再去路由器后台看看进程

我们刚才执行的指令ss-redir已经显示在UI界面上了

到这ss的透明代理已经全部搞定了,但是有些人不喜欢用命令行去配置,而喜欢在路由器后台使用luci界面,于是我们把之前编译好的luci界面也装上吧

于是把luci的ipk传到路由器上去准备安装


没想到luci界面也需要依赖库,一看是ipset,是非常有用的东西,通过ipset可以配置dnsmasq-full通过域名进行代理规则的书写,可以克服iptables只能识别ip的短板

既然上面已经给出了ipk的下载地址,opkg下载的还这么慢,那我干脆继续用迅雷上吧,装上ipset以后我们继续

安装ipset居然也需要依赖包,是libmnl,同样办法先把这个装了再装ipset吧,没出现循环依赖就不错啦

果然解决了这两个依赖以后luci界面就装好了,让我们进路由器后台瞅瞅

呈贡啦,菜单多了一项“服务”,“影梭”就在里面,让我们点进去看看

果然是最新的luci和最新的ss,支持udp转发啦,可惜上面显示udp转发不可用,缺少依赖,这多亏了有luci,不然我还不知道我这udp转发没法用。

据我判断缺少的肯定是iptables-mod-tproxy,因为ip默认已经装载Openwrt里了,于是老办法,去Openwrt的官网找找去

果然配好软件源的opkg又帮我们自动定位到了下载地址,老办法迅雷上

好啦,这个udp转发的依赖已经顺利安装完毕了,我们刷新路由器后台看看

好啦,现在luci界面已经完美支持udp转发啦!整个教程到此结束,我把这次安装所用到的所有ipk包放在下面供大家免费下载,理论上说CC版15.05 wndr4300设备都可以通用的。

下图是我用到所有的ipk包

下面面的ip和shadowsocks-libev-polarssl应该不装,polarss支持的加密方式少,比如没有rc4-md5这种加密方式,推荐使用openssl版本也就是我上面说的版本,ip包Openwrt应该默认自带,如果没有的话可以安装,因为我没装过这个ip包不知道好不好用,其他的包按照依赖关系一个一个装上即可,推荐在CC 15.05.1的wndr4300纯净系统上安装,纯净系统可以用上面恩山大神的那个

下载地址:

Openwrt_wndr4300_CC_15.05.1_SS_luci用到的ipk包

本文用到的恩山大神提供的原版改良版纯净固件下载地址:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=186099

下面再秀一下刚买的wndr4300

附:因为没安装ccache导致的无法编译的config.log

[cpp] view plain copy

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::48
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::49
  1. This file contains any messages produced by compilers while
  2. running configure, to aid debugging if configure makes a mistake.
  3. It was created by PCRE configure 8.39, which was
  4. generated by GNU Autoconf 2.69.  Invocation command line was
  5.   $ ./configure –target=mips-openwrt-linux –host=mips-openwrt-linux –build=x86_64-linux-gnu –program-prefix= –program-suffix= –prefix=/usr –exec-prefix=/usr –bindir=/usr/bin –sbindir=/usr/sbin –libexecdir=/usr/lib –sysconfdir=/etc –datadir=/usr/share –localstatedir=/var –mandir=/usr/man –infodir=/usr/info –disable-nls –enable-utf8 –enable-unicode-properties –enable-pcre16 –enable-cpp
  6. ## ——— ##
  7. ## Platform. ##
  8. ## ——— ##
  9. hostname = alex-ThinkPad-T430
  10. uname -m = x86_64
  11. uname -r = 4.4.0-36-generic
  12. uname -s = Linux
  13. uname -v = #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016
  14. /usr/bin/uname -p = unknown
  15. /bin/uname -X     = unknown
  16. /bin/arch              = unknown
  17. /usr/bin/arch -k       = unknown
  18. /usr/convex/getsysinfo = unknown
  19. /usr/bin/hostinfo      = unknown
  20. /bin/machine           = unknown
  21. /usr/bin/oslevel       = unknown
  22. /bin/universe          = unknown
  23. PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/host/bin
  24. PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin
  25. PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin
  26. PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin
  27. PATH: /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin
  28. PATH: /usr/local/java/jdk1.8.0_91/bin
  29. PATH: /opt/android-studio/gradle/gradle-2.14.1/bin
  30. PATH: /usr/local/sbin
  31. PATH: /usr/local/bin
  32. PATH: /usr/sbin
  33. PATH: /usr/bin
  34. PATH: /sbin
  35. PATH: /bin
  36. PATH: /usr/games
  37. PATH: /usr/local/games
  38. PATH: /snap/bin
  39. ## ———– ##
  40. ## Core tests. ##
  41. ## ———– ##
  42. configure:2666: loading site script /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/include/site/mips
  43. | #!/bin/sh
  44. | . $TOPDIR/include/site/linux
  45. | ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
  46. | ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
  47. |
  48. | ac_cv_sizeof___int64=0
  49. | ac_cv_sizeof_char=1
  50. | ac_cv_sizeof_int=4
  51. | ac_cv_sizeof_int16_t=2
  52. | ac_cv_sizeof_int32_t=4
  53. | ac_cv_sizeof_int64_t=8
  54. | ac_cv_sizeof_long_int=4
  55. | ac_cv_sizeof_long_long=8
  56. | ac_cv_sizeof_long=4
  57. | ac_cv_sizeof_off_t=8
  58. | ac_cv_sizeof_short_int=2
  59. | ac_cv_sizeof_short=2
  60. | ac_cv_sizeof_size_t=4
  61. | ac_cv_sizeof_ssize_t=4
  62. | ac_cv_sizeof_u_int16_t=2
  63. | ac_cv_sizeof_u_int32_t=4
  64. | ac_cv_sizeof_u_int64_t=8
  65. | ac_cv_sizeof_uint16_t=2
  66. | ac_cv_sizeof_uint32_t=4
  67. | ac_cv_sizeof_uint64_t=8
  68. | ac_cv_sizeof_unsigned_int=4
  69. | ac_cv_sizeof_unsigned_long=4
  70. | ac_cv_sizeof_unsigned_long_long=8
  71. | ac_cv_sizeof_unsigned_short=2
  72. | ac_cv_sizeof_void_p=4
  73. configure:2808: checking for a BSD-compatible install
  74. configure:2876: result: /usr/bin/install -c
  75. configure:2887: checking whether build environment is sane
  76. configure:2942: result: yes
  77. configure:3001: checking for mips-openwrt-linux-strip
  78. configure:3028: result: mips-openwrt-linux-uclibc-strip
  79. configure:3093: checking for a thread-safe mkdir -p
  80. configure:3132: result: /bin/mkdir -p
  81. configure:3139: checking for gawk
  82. configure:3155: found /usr/bin/gawk
  83. configure:3166: result: gawk
  84. configure:3177: checking whether make sets $(MAKE)
  85. configure:3199: result: yes
  86. configure:3228: checking whether make supports nested variables
  87. configure:3245: result: yes
  88. configure:3383: checking whether make supports nested variables
  89. configure:3400: result: yes
  90. configure:3428: checking for style of include used by make
  91. configure:3456: result: GNU
  92. configure:3487: checking for mips-openwrt-linux-gcc
  93. configure:3514: result: ccache_cc
  94. configure:3783: checking for C compiler version
  95. configure:3792: ccache_cc –version >&5
  96. /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
  97. configure:3803: $? = 127
  98. configure:3792: ccache_cc -v >&5
  99. /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
  100. configure:3803: $? = 127
  101. configure:3792: ccache_cc -V >&5
  102. /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
  103. configure:3803: $? = 127
  104. configure:3792: ccache_cc -qversion >&5
  105. /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
  106. configure:3803: $? = 127
  107. configure:3823: checking whether the C compiler works
  108. configure:3845: ccache_cc -Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic  -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include  -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib  conftest.c  >&5
  109. /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/ccache_cc: 2: exec: ccache: not found
  110. configure:3849: $? = 127
  111. configure:3887: result: no
  112. configure: failed program was:
  113. /* confdefs.h */
  114. | #define PACKAGE_NAME “PCRE”
  115. | #define PACKAGE_TARNAME “pcre”
  116. | #define PACKAGE_VERSION “8.39”
  117. | #define PACKAGE_STRING “PCRE 8.39”
  118. | #define PACKAGE_BUGREPORT “”
  119. | #define PACKAGE_URL “”
  120. | #define PACKAGE “pcre”
  121. | #define VERSION “8.39”
  122. /* end confdefs.h.  */
  123. |
  124. int
  125. | main ()
  126. | {
  127. |
  128. |   ;
  129. |   return 0;
  130. | }
  131. configure:3892: error: in `/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39′:
  132. configure:3894: error: C compiler cannot create executables
  133. See `config.log’ for more details
  134. ## —————- ##
  135. ## Cache variables. ##
  136. ## —————- ##
  137. ac_cv_c_bigendian=yes
  138. ac_cv_c_gettext_without_libintl=yes
  139. ac_cv_c_littleendian=no
  140. ac_cv_c_long_double=no
  141. ac_cv_conv_longlong_to_float=yes
  142. ac_cv_env_CCC_set=
  143. ac_cv_env_CCC_value=
  144. ac_cv_env_CC_set=set
  145. ac_cv_env_CC_value=ccache_cc
  146. ac_cv_env_CFLAGS_set=set
  147. ac_cv_env_CFLAGS_value=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
  148. ac_cv_env_CPPFLAGS_set=set
  149. ac_cv_env_CPPFLAGS_value=‘-I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include ‘
  150. ac_cv_env_CPP_set=
  151. ac_cv_env_CPP_value=
  152. ac_cv_env_CXXCPP_set=
  153. ac_cv_env_CXXCPP_value=
  154. ac_cv_env_CXXFLAGS_set=set
  155. ac_cv_env_CXXFLAGS_value=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
  156. ac_cv_env_CXX_set=set
  157. ac_cv_env_CXX_value=ccache_cxx
  158. ac_cv_env_GENHTML_set=
  159. ac_cv_env_GENHTML_value=
  160. ac_cv_env_LCOV_set=
  161. ac_cv_env_LCOV_value=
  162. ac_cv_env_LDFLAGS_set=set
  163. ac_cv_env_LDFLAGS_value=‘-L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib ‘
  164. ac_cv_env_LIBS_set=
  165. ac_cv_env_LIBS_value=
  166. ac_cv_env_PKG_CONFIG_LIBDIR_set=set
  167. ac_cv_env_PKG_CONFIG_LIBDIR_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig
  168. ac_cv_env_PKG_CONFIG_PATH_set=set
  169. ac_cv_env_PKG_CONFIG_PATH_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig
  170. ac_cv_env_PKG_CONFIG_set=set
  171. ac_cv_env_PKG_CONFIG_value=/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/pkg-config
  172. ac_cv_env_VALGRIND_CFLAGS_set=
  173. ac_cv_env_VALGRIND_CFLAGS_value=
  174. ac_cv_env_VALGRIND_LIBS_set=
  175. ac_cv_env_VALGRIND_LIBS_value=
  176. ac_cv_env_build_alias_set=set
  177. ac_cv_env_build_alias_value=x86_64-linux-gnu
  178. ac_cv_env_host_alias_set=set
  179. ac_cv_env_host_alias_value=mips-openwrt-linux
  180. ac_cv_env_target_alias_set=set
  181. ac_cv_env_target_alias_value=mips-openwrt-linux
  182. ac_cv_file__dev_zero=yes
  183. ac_cv_func___adjtimex=yes
  184. ac_cv_func___va_copy=no
  185. ac_cv_func__exit=yes
  186. ac_cv_func_bcmp=yes
  187. ac_cv_func_bcopy=yes
  188. ac_cv_func_bzero=yes
  189. ac_cv_func_cimag=yes
  190. ac_cv_func_creal=yes
  191. ac_cv_func_fchmod=yes
  192. ac_cv_func_getaddrinfo=yes
  193. ac_cv_func_getcwd=yes
  194. ac_cv_func_getdomainname=yes
  195. ac_cv_func_getpgrp_void=yes
  196. ac_cv_func_getpwuid_r=yes
  197. ac_cv_func_gettimeofday=yes
  198. ac_cv_func_index=yes
  199. ac_cv_func_lstat=yes
  200. ac_cv_func_lstat_dereferences_slashed_symlink=yes
  201. ac_cv_func_lstat_empty_string_bug=no
  202. ac_cv_func_malloc_0_nonnull=yes
  203. ac_cv_func_malloc_works=yes
  204. ac_cv_func_memcmp_clean=yes
  205. ac_cv_func_memcmp_working=yes
  206. ac_cv_func_posix_getgrgid_r=yes
  207. ac_cv_func_posix_getpwuid_r=yes
  208. ac_cv_func_psignal=yes
  209. ac_cv_func_pthread_key_delete=yes
  210. ac_cv_func_realloc_0_nonnull=yes
  211. ac_cv_func_realloc_works=yes
  212. ac_cv_func_rename=yes
  213. ac_cv_func_rindex=yes
  214. ac_cv_func_setgrent_void=yes
  215. ac_cv_func_setlocale=yes
  216. ac_cv_func_setpgrp_void=yes
  217. ac_cv_func_setresuid=no
  218. ac_cv_func_setvbuf_reversed=no
  219. ac_cv_func_stat_empty_string_bug=no
  220. ac_cv_func_stat_ignores_trailing_slash=no
  221. ac_cv_func_strerror=yes
  222. ac_cv_func_strftime=yes
  223. ac_cv_func_utimes=yes
  224. ac_cv_func_va_copy=no
  225. ac_cv_func_vsnprintf=yes
  226. ac_cv_have_accrights_in_msghdr=no
  227. ac_cv_have_broken_snprintf=no
  228. ac_cv_have_control_in_msghdr=yes
  229. ac_cv_have_decl_sys_siglist=no
  230. ac_cv_have_openpty_ctty_bug=yes
  231. ac_cv_have_space_d_name_in_struct_dirent=yes
  232. ac_cv_header_netinet_sctp_h=no
  233. ac_cv_header_netinet_sctp_uio_h=no
  234. ac_cv_int64_t=yes
  235. ac_cv_lbl_unaligned_fail=no
  236. ac_cv_linux_kernel_pppoe=yes
  237. ac_cv_linux_vers=2
  238. ac_cv_pack_bitfields_reversed=yes
  239. ac_cv_path_LDCONFIG=
  240. ac_cv_path_install=‘/usr/bin/install -c’
  241. ac_cv_path_mkdir=/bin/mkdir
  242. ac_cv_prog_AWK=gawk
  243. ac_cv_prog_CC=ccache_cc
  244. ac_cv_prog_STRIP=mips-openwrt-linux-uclibc-strip
  245. ac_cv_prog_make_make_set=yes
  246. ac_cv_regexec_segfault_emptystr=no
  247. ac_cv_sctp=no
  248. ac_cv_sizeof___int64=0
  249. ac_cv_sizeof_char=1
  250. ac_cv_sizeof_int16_t=2
  251. ac_cv_sizeof_int32_t=4
  252. ac_cv_sizeof_int64_t=8
  253. ac_cv_sizeof_int=4
  254. ac_cv_sizeof_long=4
  255. ac_cv_sizeof_long_int=4
  256. ac_cv_sizeof_long_long=8
  257. ac_cv_sizeof_off_t=8
  258. ac_cv_sizeof_short=2
  259. ac_cv_sizeof_short_int=2
  260. ac_cv_sizeof_size_t=4
  261. ac_cv_sizeof_ssize_t=4
  262. ac_cv_sizeof_u_int16_t=2
  263. ac_cv_sizeof_u_int32_t=4
  264. ac_cv_sizeof_u_int64_t=8
  265. ac_cv_sizeof_uint16_t=2
  266. ac_cv_sizeof_uint32_t=4
  267. ac_cv_sizeof_uint64_t=8
  268. ac_cv_sizeof_unsigned_int=4
  269. ac_cv_sizeof_unsigned_long=4
  270. ac_cv_sizeof_unsigned_long_long=8
  271. ac_cv_sizeof_unsigned_short=2
  272. ac_cv_sizeof_void_p=4
  273. ac_cv_sys_restartable_syscalls=yes
  274. ac_cv_time_r_type=POSIX
  275. ac_cv_type_suseconds_t=yes
  276. ac_cv_uchar=no
  277. ac_cv_uint64_t=yes
  278. ac_cv_uint=yes
  279. ac_cv_ulong=yes
  280. ac_cv_ushort=yes
  281. ac_cv_va_copy=C99
  282. ac_cv_va_val_copy=yes
  283. am_cv_make_support_nested_variables=yes
  284. as_cv_unaligned_access=yes
  285. ## —————– ##
  286. ## Output variables. ##
  287. ## —————– ##
  288. ACLOCAL=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing aclocal-1.15’
  289. AMDEPBACKSLASH=‘\’
  290. AMDEP_FALSE=‘#’
  291. AMDEP_TRUE=
  292. AMTAR=‘$${TAR-tar}’
  293. AM_BACKSLASH=‘\’
  294. AM_DEFAULT_V=‘0’
  295. AM_DEFAULT_VERBOSITY=‘0’
  296. AM_V=‘0’
  297. AR=‘mips-openwrt-linux-uclibc-gcc-ar’
  298. AS=‘ccache_cc -c -Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -fpic’
  299. AUTOCONF=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing autoconf’
  300. AUTOHEADER=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing autoheader’
  301. AUTOMAKE=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing automake-1.15’
  302. AWK=‘gawk’
  303. CC=‘ccache_cc’
  304. CCDEPMODE=
  305. CFLAGS=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
  306. CPP=
  307. CPPFLAGS=‘-I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/include ‘
  308. CXX=‘ccache_cxx’
  309. CXXCPP=
  310. CXXDEPMODE=
  311. CXXFLAGS=‘-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float -mips16 -minterlink-mips16 -fpic ‘
  312. CYGPATH_W=‘echo’
  313. DEFS=
  314. DEPDIR=‘.deps’
  315. DISTCHECK_CONFIGURE_FLAGS=
  316. DLLTOOL=
  317. DSYMUTIL=
  318. DUMPBIN=
  319. ECHO_C=
  320. ECHO_N=‘-n’
  321. ECHO_T=
  322. EGREP=
  323. EXEEXT=
  324. EXTRA_LIBPCRE16_LDFLAGS=
  325. EXTRA_LIBPCRE32_LDFLAGS=
  326. EXTRA_LIBPCRECPP_LDFLAGS=
  327. EXTRA_LIBPCREPOSIX_LDFLAGS=
  328. EXTRA_LIBPCRE_LDFLAGS=
  329. FGREP=
  330. GCOV_CFLAGS=
  331. GCOV_CXXFLAGS=
  332. GCOV_LIBS=
  333. GENHTML=
  334. GREP=
  335. HAVE_VISIBILITY=
  336. INSTALL_DATA=‘${INSTALL} -m 644’
  337. INSTALL_PROGRAM=‘${INSTALL}’
  338. INSTALL_SCRIPT=‘${INSTALL}’
  339. INSTALL_STRIP_PROGRAM=‘$(install_sh) -c -s’
  340. LCOV=
  341. LD=‘mips-openwrt-linux-uclibc-ld’
  342. LDFLAGS=‘-L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/lib ‘
  343. LIBBZ2=
  344. LIBOBJS=
  345. LIBREADLINE=
  346. LIBS=
  347. LIBTOOL=
  348. LIBZ=
  349. LIPO=
  350. LN_S=
  351. LTLIBOBJS=
  352. MAKEINFO=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/missing makeinfo’
  353. MANIFEST_TOOL=
  354. MKDIR_P=‘/bin/mkdir -p’
  355. NM=‘mips-openwrt-linux-uclibc-gcc-nm’
  356. NMEDIT=
  357. OBJDUMP=‘mips-openwrt-linux-uclibc-objdump’
  358. OBJEXT=
  359. OTOOL64=
  360. OTOOL=
  361. PACKAGE=‘pcre’
  362. PACKAGE_BUGREPORT=
  363. PACKAGE_NAME=‘PCRE’
  364. PACKAGE_STRING=‘PCRE 8.39’
  365. PACKAGE_TARNAME=‘pcre’
  366. PACKAGE_URL=
  367. PACKAGE_VERSION=‘8.39’
  368. PATH_SEPARATOR=‘:’
  369. PCRE_DATE=
  370. PCRE_MAJOR=
  371. PCRE_MINOR=
  372. PCRE_PRERELEASE=
  373. PCRE_STATIC_CFLAG=
  374. PKG_CONFIG=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/host/bin/pkg-config’
  375. PKG_CONFIG_LIBDIR=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig’
  376. PKG_CONFIG_PATH=‘/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/pkgconfig:/home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/share/pkgconfig’
  377. PTHREAD_CC=
  378. PTHREAD_CFLAGS=
  379. PTHREAD_LIBS=
  380. RANLIB=‘mips-openwrt-linux-uclibc-gcc-ranlib’
  381. SED=
  382. SET_MAKE=
  383. SHELL=‘/bin/bash’
  384. SHTOOL=
  385. STRIP=‘mips-openwrt-linux-uclibc-strip’
  386. VALGRIND_CFLAGS=
  387. VALGRIND_LIBS=
  388. VERSION=‘8.39’
  389. VISIBILITY_CFLAGS=
  390. VISIBILITY_CXXFLAGS=
  391. WITH_GCOV_FALSE=
  392. WITH_GCOV_TRUE=
  393. WITH_JIT_FALSE=
  394. WITH_JIT_TRUE=
  395. WITH_PCRE16_FALSE=
  396. WITH_PCRE16_TRUE=
  397. WITH_PCRE32_FALSE=
  398. WITH_PCRE32_TRUE=
  399. WITH_PCRE8_FALSE=
  400. WITH_PCRE8_TRUE=
  401. WITH_PCRE_CPP_FALSE=
  402. WITH_PCRE_CPP_TRUE=
  403. WITH_REBUILD_CHARTABLES_FALSE=
  404. WITH_REBUILD_CHARTABLES_TRUE=
  405. WITH_UTF_FALSE=
  406. WITH_UTF_TRUE=
  407. WITH_VALGRIND_FALSE=
  408. WITH_VALGRIND_TRUE=
  409. ac_ct_AR=
  410. ac_ct_CC=
  411. ac_ct_CXX=
  412. ac_ct_DUMPBIN=
  413. am__EXEEXT_FALSE=
  414. am__EXEEXT_TRUE=
  415. am__fastdepCC_FALSE=
  416. am__fastdepCC_TRUE=
  417. am__fastdepCXX_FALSE=
  418. am__fastdepCXX_TRUE=
  419. am__include=‘include’
  420. am__isrc=
  421. am__leading_dot=‘.’
  422. am__nodep=‘_no’
  423. am__quote=
  424. am__tar=
    TARtarchofTAR−tarchof−”

    tardir”‘

  425. am__untar=‘$${TAR-tar} xf -‘
  426. ax_pthread_config=
  427. bindir=‘/usr/bin’
  428. build=‘x86_64-linux-gnu’
  429. build_alias=‘x86_64-linux-gnu’
  430. build_cpu=
  431. build_os=
  432. build_vendor=
  433. datadir=‘/usr/share’
  434. datarootdir=‘${prefix}/share’
  435. docdir=‘${datarootdir}/doc/${PACKAGE_TARNAME}’
  436. dvidir=‘${docdir}’
  437. enable_cpp=‘yes’
  438. enable_pcre16=‘yes’
  439. enable_pcre32=
  440. enable_pcre8=
  441. exec_prefix=‘/usr’
  442. host=‘mips-openwrt-linux’
  443. host_alias=‘mips-openwrt-linux’
  444. host_cpu=
  445. host_os=
  446. host_vendor=
  447. htmldir=‘${docdir}’
  448. includedir=‘${prefix}/include’
  449. infodir=‘/usr/info’
  450. install_sh=‘${SHELL} /home/alex/Downloads/SDK/OpenWrt-SDK-15.05-ar71xx-nand_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/build_dir/target-mips_34kc_uClibc-0.9.33.2/pcre-8.39/install-sh’
  451. libdir=‘${exec_prefix}/lib’
  452. libexecdir=‘/usr/lib’
  453. localedir=‘${datarootdir}/locale’
  454. localstatedir=‘/var’
  455. mandir=‘/usr/man’
  456. mkdir_p=‘$(MKDIR_P)’
  457. oldincludedir=‘/usr/include’
  458. pcre_have_bits_type_traits=
  459. pcre_have_long_long=
  460. pcre_have_type_traits=
  461. pcre_have_ulong_long=
  462. pdfdir=‘${docdir}’
  463. prefix=‘/usr’
  464. program_transform_name=‘s&$$&&;s&^&&’
  465. psdir=‘${docdir}’
  466. sbindir=‘/usr/sbin’
  467. sharedstatedir=‘${prefix}/com’
  468. sysconfdir=‘/etc’
  469. target_alias=‘mips-openwrt-linux’
  470. ## ———– ##
  471. ## confdefs.h. ##
  472. ## ———– ##
  473. /* confdefs.h */
  474. #define PACKAGE_NAME “PCRE”
  475. #define PACKAGE_TARNAME “pcre”
  476. #define PACKAGE_VERSION “8.39”
  477. #define PACKAGE_STRING “PCRE 8.39”
  478. #define PACKAGE_BUGREPORT “”
  479. #define PACKAGE_URL “”
  480. #define PACKAGE “pcre”
  481. #define VERSION “8.39”
  482. configure: exit 77
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvshaorong/article/details/52931211

 

 

PandoraBox/LEDE SDK交叉编译OpenWrt ipk安装包的方法

https://blog.csdn.net/lvshaorong/article/details/62215033

 

以前写过一篇《Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)》的文章,详细介绍了如何使用OpenWrt SDK编译ipk安装包的方法。在BB 14.04, CC 15.05, CC 15.05.1版本的SDK上编译一些常见的第三方ipk包都非常容易。这个要得益于OpenWrt SDK行之有效的工具链和链接方式。但是同样的Makefile文件搬到Pandora(潘多拉固件)和LEDE的SDK上时,就没有OpenWrt平台上那么简单了。这两个平台的SDK为我们挖了很多大坑,小白第一次编译往往会被搞得一头雾水。其实多数的编译不成功都是由于依赖库没有正确的引入引起的,还有一个常见原因是你计算机的Linux没有很好的部署编译环境引起的。

所以跳过潘多拉或者LEDE SDK的大坑其实不麻烦,只要正确的导入第三方依赖库并配置好本地开发环境即可,下面我以Ubuntu16.04 LTS 64位为例介绍一下潘多拉/LEDE相比OpenWrt SDK可能会碰到的问题。主要目的是解决在OpenWrt下能成功编译到了潘多拉或者LEDE就无法编译的问题。如果OpenWrt SDK也无法编译则不在本文的讨论范围之内。

(注意:请不要使用32位操作系统,否则make menuconfig打不开,也不推荐使用Ubuntu14.04,16.10等版本,因为这些系统上失败的案例较多且不好解决)

首先以潘多拉SDK为例,潘多拉16-10稳定版的固件和SDK下载地址为:http://downloads.pandorabox.com.cn/pandorabox-16-10-stable/targets/ralink/ ,可以选择mt7620 和 mt7621两个平台的固件和SDK下载,本文以小米路由器mini为例所以使用的是mt7620的SDK, rt305x芯片如华为HG255D只提供了固件没有提供toolchain或SDK,所以不在本文讨论范围之内。

我们向往常一样解压潘多拉的SDK,然后克隆一个项目的Makefile到package目录下,这里以SSR为例

git clone https://github.com/AlexZhuo/openwrt-shadowsocksr.git package/shadowsocksr-libev

然后选择要编译的IPK安装包

make menuconfig

然后执行编译

make package/shadowsocksr-libev/compile V=99

然后SDK就开始克隆项目的源代码到本地,这里的动作主要是把Makefile指明的源代码的tar.gz压缩包下载到SDK/dl目录中(如果网络不好可以直接从别的地方下载tar.gz源码包然后复制到dl目录下)然后把源码解压到SDK/build_dir/target-mipsel_24kc_musl-1.1.16/下面去,如果因为源码有问题导致编译不成功可以直接在这里修改源代码,这一步还算正常
迎面向我们走来的是第一个报错

[plain] view plain copy

  1. configure: loading site script /home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/include/site/mipsel
  2. checking for mipsel-openwrt-linux-gcc… mipsel-openwrt-linux-uclibc-gcc
  3. checking whether the C compiler works… no
  4. configure: error: in `/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6′:
  5. configure: error: C compiler cannot create executables
  6. See `config.log’ for more details
  7. Makefile:135: recipe for target ‘/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy’ failed

意思是C编译器不工作,这个一般是编译环境搭建有问题,但是明明OP的SDK是可以编译的,说明编译环境并没有出问题。但是这个报错并没有指出到底哪里出的错,要修改也无从下手。它还让我们找config.log这个文件看详细日志,可找了半天也没找到这个文件在哪。实在天坑。于是为了判断问题出在哪里,我们克隆redsocks2的源码手动指定编译器和连接器来看详细日志。做法如下:首先克隆redsocks2的源码,那为啥要选redsocks2的源码呢?原因是redsocks2可以通过make直接编译出可执行文件,可以很方便的检查哪里除了问题,而ssr make要添加参数,依赖库也太多,不方便调试错误

[plain] view plain copy

  1. git clone https://github.com/semigodking/redsocks.git package/redsocks

然后切换到源码目录

[plain] view plain copy

  1. cd package/redsocks

然后手动指定编译器和连接器,通过声明当前Shell的环境变量实现

[plain] view plain copy

  1. export PATH=$PATH:/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin
  2. export STAGING_DIR=/store/build/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x
  3. export CFLAGS=”-I/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/usr/include/ -L/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/usr/lib”

然后通过编译器和连接器手动交叉编译可执行文件

[plain] view plain copy

  1. make CC=mipsel-openwrt-linux-uclibc-gcc LD=mipsel-openwrt-linux-uclibc-ld

然后发现真实错误终于暴露出来了

[plain] view plain copy

  1. /home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin/../libexec/gcc/mipsel-openwrt-linux-uclibc/4.8.3/cc1: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
  2. <builtin>: recipe for target ‘parser.o’ failed
  3. make: *** [parser.o] Error 1

这个潘多拉的SDK其实就是在我的电脑上找不到libisl.so.10 这个文件,那么这个文件上哪了呢?为啥OP就不会报出这个错误呢?首先来找一下这个文件

[plain] view plain copy

  1. locate libisl.so

输出

[plain] view plain copy

  1. /usr/lib/x86_64-linux-gnu/libisl.so
  2. /usr/lib/x86_64-linux-gnu/libisl.so.15
  3. /usr/lib/x86_64-linux-gnu/libisl.so.15.1.1

发现这几个文件都在同一个目录下,仔细一看还能发现,libisl.so.15和libisl.so这两个文件都是libisl.so.15.1.1的软链接。换句话说这三个文件其实是一个文件。那么现在可以试试让libisl.so.10也软链接到libisl.so.15.1.1这个文件试试可以不

[plain] view plain copy

  1. sudo ln -s /usr/lib/x86_64-linux-gnu/libisl.so.15.1.1 /usr/lib/x86_64-linux-gnu/libisl.so.10

然后再执行编译的命令,发现这个问题已经不见了,说明有效果。刚才克隆的一大堆代码,又手动指定了编译连接器,最后其实就建立一个软链接就把这个问题解决了。这个大坑的解决成本相当高。此处还应该感谢redsocks2这个项目送走了这个bug,我们继续编译SSR吧。不过马上又迎来了新的报错

[plain] view plain copy

  1. checking for pcre-config… pcre-config
  2. checking for pcre headers in … not found
  3. checking for library containing pcre_exec… no
  4. configure: error: Cannot find pcre library. Configure –with-pcre=DIR
  5. Makefile:135: recipe for target ‘/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy’ failed
  6. make[2]: *** [/home/alex/PandoraBox-SDK-ralink-mt7620_gcc-4.8-linaro_uClibc-1.0.x.Linux-x86_64/build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/shadowsocksR-libev-openssl/shadowsocksR-libev-2.5.6/.configured_yyy] Error 1

这意思是找不到pcre这个依赖库啊。这个好说,只要把相应的feeds安装到SDK里就可以。在OpenWrt/LEDE 的SDK里,只要执行

[plain] view plain copy

  1. ./scripts/feeds update base packages

就会在SDK根目录下新建一个feeds文件夹,然后里面会有base和package两个文件夹,里面都是OpenWrt提前写好的各个依赖库的Makefile编译文件。然后使用

[plain] view plain copy

  1. ./scripts/feeds install libpcre

就会在package目录下建立一个feeds文件夹,然后把libpcre的Makefile文件通过软链接链接过去,在碰到编译时需要依赖库的情况时就会自动链接相应的源码进行编译了。即使官方没有相应的Makefile源码,也可以自己在feeds里建立相应三方库的Makefile。

但是在潘多拉的SDK中执行update命令后根本没有反应,也没有建立feeds文件夹这时怎么回事呢,这里update过程是联网的,克隆地址记录在SDK根目录下的feeds.conf.default文件里面,在LEDE 17.01上这个文件中的内容是

[plain] view plain copy

  1. src-git base https://git.lede-project.org/source.git;v17.01.0
  2. src-git packages https://git.lede-project.org/feed/packages.git^ed90827282851ad93294e370860320f1af428bb2
  3. src-git luci https://git.lede-project.org/project/luci.git^a100738163585ae1edc24d832ca9bef1f34beef0
  4. src-git routing https://git.lede-project.org/feed/routing.git^dd36dd47bbd75defcb3c517cafe7a19ee425f0af
  5. src-git telephony https://git.lede-project.org/feed/telephony.git^1f0fb2538ba6fc306198fe2a9a4b976d63adb304

由于这个文件指向的地址都是各个应用程序的Makefile文件而不是二进制文件,所以这个文件其实是在LEDE/OpenWrt/潘多拉中通用的。因为所有的SDK都可以通过同一个Makefile文件编译相应的ipk包。但是在潘多拉SDK中,feeds.conf.default这个文件里面居然是空的。那么当然就无法通过传统的方法部署相应第三方依赖库的源码了,所以我们这里只要把LEDE SDK中的feeds.conf.default文件内容复制到潘多拉SDK中去就可以了

然后再执行update和install命令,相应的依赖库就会出现在package/feeds中了

然后把/feeds中的libpcre的Makefile做软链接到package/feeds中,使用

[plain] view plain copy

  1. ./scripts/feeds install libpcre

就可以了,效果如图

package/feeds 下面出现相应的目录就说明安装成功了。

然后我们观察ssr Makefile中的依赖库,发现除了pcre之外,还有另外的三个依赖库

[plain] view plain copy

  1. define Package/shadowsocksr-libev
  2.   $(call Package/shadowsocksr-libev/Default)
  3.   TITLE+= (OpenSSL)
  4.   VARIANT:=openssl
  5.   DEPENDS:=+libopenssl +libpcre +libpthread +zlib
  6. endef

所以我们要都安装一下(mBedTLS版需要自己的依赖包)

./scripts/feeds install zlib libopenssl libmbedtls

此时如果你网络状况好的话,一半就可以畅通无阻的编译了。真是谢天谢地潘多拉提供的toolchain还没有问题
这个过程中,SDK会首先根据第三方依赖库Makefile中记载的源码地址去下载相应源码,然后通过这些源码先编译出第三方依赖库,并将相应的ipk文件放到bin目录下。

然后再使用第三方依赖库的源码编译我们所需的应用程序。

注意如果始终无法安装feeds的情况,直接去feeds文件夹下搜索pcre,然后把pcre这个文件夹复制到package/feeds下面也是可以的。

举例来说,比如libpolarssl这个库已经被mBedTLS替代,所以当执行./scripts/feeds install libpolarssl 的时候,会碰到如下报错,说明在feeds中找不到libpolarssl这个依赖库

WARNING: No feed for package ‘libpolarssl’ found, maybe it’s already part of the standard packages?
此时我们去其他地方搜索libpolarssl的Makefile或者自己编写,这里提供一个libpolarssl的Makefile:https://github.com/AlexZhuo/openwrt-feeds/tree/master/base/polarssl

同理,在我们编译redsocks2的时候可能会碰到以下错误

[plain] view plain copy

  1. utils.h:7:26: fatal error: event2/event.h: No such file or directory
  2.  #include <event2/event.h>
  3.                           ^
  4. compilation terminated.
  5. <builtin>: recipe for target ‘parser.o’ failed
  6. make[3]: *** [parser.o] Error 1

这个报错和上面的pcre一样,也是找不到libevent这个第三方依赖库,执行./scripts/feeds install libevent2 即可解决其他报错一般可以用相同的办法解决。包括LEDE

关于LEDE要提示一点,LEDE 17.01的rc1和rc2 目前好像feeds不是很全,推荐使用17.01版本,不要使用rc1或rc2的SDK。

同时LEDE的feeds中很多库的版本要高于OpenWrt CC 15.05.1,所以可以把OP的feeds库换成LEDE的然后重新./scripts/feeds update

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvshaorong/article/details/62215033

OpenWRT/LEDE 开启免 NAT 全局 IPv6

原文:https://i-meto.com/lede-ipv6/
  • 2017.10.19 更新 NAT6 方式

之前发过一篇《OpenWrt 内网转发 IPv6》的文章,转眼间一年过去了,OpenWrt 也产生了一个新的分支 LEDE,有同学用之前的方案失效来私信我,这里也公布一个新的方式。

relay6

旧的方案是采用 NAT6 来实现转发,但其实 LEDE 内置了 Relay(中继)协议,无需安装任何插件,可以参考 https://lede-project.org/docs/user-guide/basic-ipv6-configuration 做如下操作。

  1. 进入路由器终端:$ ssh [email protected]
  2. 编辑 dhcp 配置文件:$ vi /etc/config/dhcp,改动如下
    config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'
        option ra_management '1'
    
    config dhcp 'wan'
        option interface 'wan'
        option ignore '1'
    
    config dhcp 'wan6'
        option interface 'wan'
        option ra 'relay'                        
        option ndp 'relay'  
        option dhcpv6 'relay'  
        option master '1'
    
  3. 编辑 network 文件:$ vi /etc/config/network,将地址第一个字母 f修改为 d,不清楚这步的同学可以参考旧教程在 luci 界面下修改。
    config globals 'globals'
        option ula_prefix 'dd53:abcd:abcd::/48'
    
  4. 重启即可
  5. 在客户机上ping路由器的v6地址,ping通后可以使用
ping6 router-v6ip

NAT6

经过一段时间的测试,发现 relay 方式并不能兼容部分型号的路由,对于这部分的用户可以采用 NAT6 方式,具体方案如下。

  1. 进入软件(soft)配置界面安装 ip6tables 和 kmod-ipt-nat6 模块
  2. 打开网络(Network)菜单下的接口(Interfaces),把最下面的 IPv6 ULA-Prefix 改为 2fff::/64
  3. 点击 LAN 接口的 edit 按钮进入设置,在 IPv6 Settings 选项卡中勾上 Always announce default router.
  4. 进入启动项管理 ,把以下命令添加入启动配置(在 exit 0 前),实现开机启动,最后重启即可。
interface_public="wan6"
[ "$INTERFACE" = "$interface_public" ] || exit 0

res=`ip -6 route | grep "default from"`
gateway=`echo $res | awk '{print $5}'`
interface=`echo $res | awk '{print $7}'`

if [ "$ACTION" = ifup ]; then
    ip -6 r add default via $gateway dev $interface
    if !(ip6tables-save -t nat | grep -q "v6NAT"); then
        ip6tables -t nat -A POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
    fi
else
    ip6tables -t nat -D POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
    ip -6 r del default via $gateway dev $interface
fi

其中第一行的 wan6 需要根据实际修改成有显示公网 IPv6 的接口地址


方案测试通过机型,不保证 OpenWrt 可用

Model Version
NETGEAR WNDR4300 LEDE 17.01.4
psg1218(K2) LEDE 17.01.3
Newifi mini Y1 LEDE 17.01.3

参考资料

为 netgear wndr4300 编译 lede(原创)

 

使用 image builder 快速构建

0.下载image builder

wget http://mirrors.ustc.edu.cn/lede/releases/17.01.4/targets/ar71xx/nand/lede-imagebuilder-17.01.4-ar71xx-nand.Linux-x86_64.tar.xz

1.修改源为中科大的mirror

将repositories.conf修改如下

## Place your custom repositories here, they must match the architecture and version.
# src/gz reboot http://mirrors.ustc.edu.cn/lede/releases/17.01.4
# src custom file:///usr/src/lede/bin/ar71xx/packages

## Remote package repositories
src/gz reboot_core http://mirrors.ustc.edu.cn/lede/releases/17.01.4/targets/ar71xx/nand/packages
src/gz reboot_base http://mirrors.ustc.edu.cn/lede/releases/17.01.4/packages/mips_24kc/base
src/gz reboot_luci http://mirrors.ustc.edu.cn/lede/releases/17.01.4/packages/mips_24kc/luci
src/gz reboot_packages http://mirrors.ustc.edu.cn/lede/releases/17.01.4/packages/mips_24kc/packages
src/gz reboot_routing http://mirrors.ustc.edu.cn/lede/releases/17.01.4/packages/mips_24kc/routing
src/gz reboot_telephony http://mirrors.ustc.edu.cn/lede/releases/17.01.4/packages/mips_24kc/telephony

This is the local package repository, do not remove!
src imagebuilder file:packages

2.扩展128m分区

17.04

sed -i s/'23552k(ubi),25600k@0x6c0000(firmware)'/'120832k(ubi),122880k@0x6c0000(firmware)'/ target/linux/ar71xx/image/legacy.mk

18.06+  patch

patch:
--- trunk/target/linux/ar71xx/image/legacy.mk 2017-01-13 10:48:39.549787945 +0000
+++ trunk-ipvs/target/linux/ar71xx/image/legacy.mk 2016-12-27 21:32:11.480977031 +0000
@@ -199,7 +199,7 @@
LZMA_TEXT_START=0x80a00000 LOADADDR=0x80060000 \
LOADER_DATA="$(KDIR)/vmlinux$(5).bin.lzma" BOARD="$(1)" \
compile loader.$(2)
- -$(if $(5),$(CP) $(KDIR)/loader-$(1).$(2) $(KDIR)/loader-$(1)$(5).$(2))
+ -$(CP) $(KDIR)/loader-$(1).$(2) $(KDIR)/loader-$(1)$(5).$(2)
endef

#
@@ -281,7 +281,7 @@
wnr2000v4_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,3776k(firmware),64k(art)ro
r6100_mtdlayout=mtdparts=ar934x-nfc:128k(u-boot)ro,256k(caldata)ro,256k(caldata-backup),512k(config),512k(pot),2048k(kernel),122240k(ubi),25600k@0x1a0000(firmware),2048k(language),3072k(traffic_meter)
tew823dru_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(nvram)ro,15296k(firmware),192k(lang)ro,512k(my-dlink)ro,64k(mac)ro,64k(art)ro
-wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata)ro,512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),23552k(ubi),25600k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
+wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),121856k(ubi),123904k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
zcn1523h_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6208k(rootfs),1472k(kernel),64k(configure)ro,64k(mfg)ro,64k(art)ro,7680k@0x50000(firmware)
mynet_rext_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,7808k(firmware),64k(nvram)ro,64k(ART)ro
zyx_nbg6716_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(env)ro,64k(RFdata)ro,-(nbu);ar934x-nfc:2048k(zyxel_rfsd),2048k(romd),1024k(header),2048k(kernel),-(ubi)

 

3.编译

make image PROFILE="WNDR4300V1" PACKAGES="wget ca-bundle ca-certificates iptables-mod-tproxy ip luci-app-samba block-mount kmod-usb-storage-extras kmod-fs-ntfs kmod-fs-vfat kmod-fs-exfat ip kmod-ip6tables ip6tables luci-proto-ipv6 odhcp6c ip6tables luci-ssl openssh-server openssh-sftp-server libssh2"

参考来源:https://simonsmh.cc/2016/03/为wndr4300编译openwrt/

准备工作

  1. sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc
  2. cd
  3. git clone git://git.openwrt.org/15.05/openwrt.git
  4. cd openwrt

源代码同步构建 (out of dated)

  1. git pull
  2. #git checkout 15.05.01 #检查15.05.01稳定分支
  3. ./scripts/feeds update -a
  4. ./scripts/feeds install luci
  5. wget https://downloads.openwrt.org/chaos_calmer/15.05.01/ar71xx/nand/config.diff
  6. sed -i s/'CONFIG_TARGET_ar71xx_nand_R6100=y'/'CONFIG_TARGET_ar71xx_nand_WNDR4300=y'/ config.diff
  7. sed -i s/'23552k(ubi),25600k@0x6c0000(firmware)'/'120832k(ubi),122880k@0x6c0000(firmware)'/ target/linux/ar71xx/image/Makefile
  8. cat config.diff >> .config
  9. make defconfig
  10. make -j #多线程

使用 openwrt image builder 快速构建

  1. wget https://downloads.lede-project.org/releases/17.01.2/targets/ar71xx/nand/lede-imagebuilder-17.01.2-ar71xx-nand.Linux-x86_64.tar.xz
  2. tar -xf lede-imagebuilder-17.01.2-ar71xx-nand.Linux-x86_64.tar.xz
  3. cd lede-imagebuilder-17.01.2-ar71xx-nand.Linux-x86_64
  4. make info #查看默认软件包和硬件支持列表
  5. sed -i s/'23552k(ubi),25600k@0x6c0000(firmware)'/'120832k(ubi),122880k@0x6c0000(firmware)'/ target/linux/ar71xx/image/legacy.mk
  6. make image PROFILE="WNDR4300V1" -j #指定机型+多线程

常用软件包

  1. opkg install wget ca-bundle ca-certificates luci-i18n-base-file-zh-cn luci-i18n-firewall-zh-cn iptables-mod-tproxy ip shadowsocks-libev luci-app-shadowsocks ChinaDNS luci-app-chinadns pdnsd luci-app-pdnsd luci-app-samba luci-i18n-samba-zh-cn block-mount kmod-usb-storage-extras kmod-fs-ntfs kmod-fs-vfat kmod-fs-exfat

This blog is under a CC BY-NC-SA 3.0 Unported License 
本文链接:https://simonsmh.cc/2016/03/为wndr4300编译openwrt/