发布于Software分类中的文章

Jan 03

就是记录一下,别期望太高,暂时推荐使用的是 DNSPod,PandaDNS 和 AliDNS。

OpenNIC 151.236.20.236,106.186.17.181;
PandaDNS 182.254.158.191,120.27.30.176
dnspod 119.29.29.29
oneDNS 112.124.47.27,114.215.126.16
HelloDNS 123.56.46.123,121.40.144.82
114 114.114.114.114,114.114.115.115
AliDNS 223.5.5.5,223.6.6.6
BaiduDNS 180.76.76.76
DNSPod DNS+ 119.29.29.29,182.254.116.116
CNNIC DNS 1.2.4.8,210.2.4.8
DNS 派 101.226.4.6,218.30.118.6
DNS 派 联通 123.125.81.6,140.207.198.6
Google DNS 8.8.8.8,8.8.4.4
OpenDNS 208.67.222.222,208.67.220.220
V2EX DNS 199.91.73.222,178.79.131.110

Apple TV DNS
上海电信 180.153.225.136
杭州电信 115.29.189.118
广东电信 203.195.182.150
北方联通 118.244.224.124

Tags: ,

Jan 02

一. 预备工作:

首先请建立一个足够大的 SWAP 分区/文件,建议 512M 以上。通过源码编译 Go 的时候路由器的 256M 内存很快就会被耗尽。如下是建立一个 1G 的 swapfile 并且挂载为交换区:

dd if=/dev/zero of=/mnt/swap/swapfile bs=1024 count=1048576
mkswap /mnt/swap/swapfile
swapon /mnt/swap/swapfile

然后你需要指定一个临时文件存放目录 TMPDIR,在编译 Go 时,Tomatoware 内置的 TMP 和 TEMP 环境变量不能被编译过程识别,它会把临时文件全部丢去 /tmp 目录,而 /tmp 目录是用内存虚拟的,空间瞬间就会被耗尽。

export TMPDIR=/mmc/tmp

二. 开始编译:(安装目标目录为 /mmc/usr/go,你可以修改为你自己的)

下载解压源码:

rm -fr /mmc/usr/go
curl -sSL https://storage.googleapis.com/golang/go1.4.3.src.tar.gz | tar -xz -C /mmc/usr
#或者:
rm -fr /mmc/usr/go
curl -O https://storage.googleapis.com/golang/go1.4.3.src.tar.gz
tar -xzf go1.4.3.src.tar.gz -C /mmc/usr

编译:
cd /mmc/usr/go/src
./make.bash

这里耗时约 20分钟(ASUS RT-AC68P 1000MHz);
测试:

export PATH=/mmc/usr/go/bin:$PATH
go version
#应该显示:
go version go1.4.3 linux/arm

打包:
为了在其他路由器上也能直接使用,我们可以压缩打包这个编译好的 Go:
tar --numeric-owner -czf /mnt/data/go1.4.3.linux-armv7.tar.gz -C /mmc/usr go
保存这个压缩包,今后在其他路由器上,只需:

rm -fr /mmc/usr/go
tar -xzf /mnt/data/go1.4.3.linux-armv7.tar.gz -C /mmc/usr
export PATH=/mmc/usr/go/bin:$PATH
go version

#应该显示:
go version go1.4.3 linux/arm

即可。

三. 升级为 Go 1.5.2:
Go 1.5.2 并不能直接编译,它需要 1.4.3 版本的支持,还好,我们上面已经编译好 1.4.3 版本的 Go 了。那么开始编译 1.5.2:

mv /mmc/usr/go /mmc/usr/go1.4
rm -fr /mmc/usr/go
curl -sSL https://storage.googleapis.com/golang/go1.5.2.src.tar.gz | tar -xz -C /mmc/usr
#或者解压已下载好的包:
tar -xzf ./go1.11.4.src.tar.gz -C /mmc/usr
cd /mmc/usr/go/src
GOROOT_BOOTSTRAP=/mmc/usr/go1.4 ./make.bash

这个时间很长,你可以去做点别的,大约 30 分钟到 1 小时不等;编译好后你一样可以用上面的方法打包好以便今后使用。

四. 编译实战:

我们以 https://github.com/cyfdecyf/cow 为例来静态编译一下 COW 程序:
export GOPATH=/mnt/data/compile/go
cd /mnt/data/compile/go
go get github.com/cyfdecyf/cow

这里可能会提示出错:
package golang.org/x/crypto/blowfish: unrecognized import path "golang.org/x/crypto/blowfish"
package golang.org/x/crypto/cast5: unrecognized import path "golang.org/x/crypto/cast5"
package golang.org/x/crypto/salsa20/salsa: unrecognized import path "golang.org/x/crypto/salsa20/salsa"

因为 golang.org 被 X 了;使用设置 http_proxy 以及 https_proxy 环境变量的办法在我这不行,所以我们曲线救国:
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://go.googlesource.com/crypto

这样再编译就没问题了:
cd /mnt/data/compile/go/src/github.com/cyfdecyf/cow
go build

不过这样编译出来的不是静态文件,静态编译要这样:
CGO_ENABLED=0 go build

下载链接是基于 go 11.4 源码编译的成品。 编译环境:

Buffalo WZR-1750DHP:1G/512MB
DD-WRT v3.0-r29875M kongac (06/11/16),内核版本的 Linux 3.10.101;

不在 Asus RT-AC68P 上面编译的原因是: Golang 1.9 之后 ARMv5 已经不支持内核版本低于 3.1 以下升级编译(参考链接)。而 Tomato 固件的内核是 2.6 的。

编译后的版本在 Tomato 这种老内核上运行没问题,支持(基于博通 BCM 4708/4709 的 Asus RT-AC68U/P/Netgear R7000/6300v2/6250/小米) 等路由器。

1.11.4
链接: https://pan.baidu.com/s/1Zj547uPNAijml5BXXuFU8g 提取码: wc9i

1.12.0
链接: https://pan.baidu.com/s/1n6vC0nv9C6GIQUeqvRVEsQ 提取码: d56i

参考: How to compile Go on any ARM device



Dec 30

先配置下选项,我这里以 PolarSSL 为例:
./configure --prefix=/opt --with-crypto-library=polarssl --with-polarssl=/mmc/lib --with-polarssl-include=/mmc/include

为了解决编译时出现的 epoll 相关错误(应为 uClibc 版本低的原因),需要:
sed -i "s/epoll_create1/epoll_create/g" ./libev/ev_epoll.c

使用 ldtools 的话,可以在编译二进制文件时指定 -all-static:
sed -i "s/LDFLAGS = /LDFLAGS = -all-static/g" ./src/Makefile

然后就可以:

make
strip ./src/ss-*
make install

Dec 14

在 DD-WRT 下非交互式状态执行脚本时,所执行的脚本最好加上下面的内容:

export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin: 
/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin: 
/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin: 
/opt/usr/bin
export LD_LIBRARY_PATH=/lib:/usr/lib:/jffs/lib:/jffs/usr/lib: 
/jffs/usr/local/lib:/mmc/lib:/mmc/usr/lib:/opt/lib:/opt/usr/lib

特别是 LD_LIBRARY_PATH 这个环境变量,要不很多脚本在 shell 下可以执行,一旦放到计划任务等非交互状态下就不能执行了,还不好调试!

Tags: ,

Nov 24

下载编译 libsodium:

git clone https://github.com/jedisct1/libsodium.git
cd libsodium
./autogen.sh
./configure --enable-minimal --enable-static --disable-shared --prefix=/mmc
make && make install

静态编译 dnscrypt-proxy:

git clone https://github.com/jedisct1/dnscrypt-proxy.git
cd dnscrypt-proxy
./autogen.sh
./configure LDFLAGS='-Wl,-static -static -static-libgcc -s -Wl,--gc-sections' --prefix=/opt
#1.7.0+
LDFLAGS='-Wl,-static -static -static-libgcc -s' ./configure --prefix=/opt --with-included-ltdl && make -j2
make

:twisted: :twisted: :twisted:


Nov 05

使用 Tomato 固件,先下载 tomatoware:

CMake:
./bootstrap --prefix=/mmc && make && make install

libsodium:
./configure --prefix=/mmc && make && make install

然后静态编译 DNSProxy" title="Pcap_DNSProxy GITHUB" rel="external">Pcap_DNSProxy ,需要修改下源码的 /Pcap_DNSProxy/Source/Pcap_DNSProxy/CMakeLists.txt 文件:

Executable file name
#static
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
SET(BUILD_SHARED_LIBRARIES OFF)
SET(CMAKE_EXE_LINKER_FLAGS "-static -pthread -Wl,--whole-archive 
-lpthread -Wl,--no-whole-archive")
#static
add_executable(Pcap_DNSProxy ${MAIN_SRC_FILES})
IF(PLATFORM_OPENWRT)
INSTALL(TARGETS Pcap_DNSProxy RUNTIME DESTINATION sbin)
ENDIF(PLATFORM_OPENWRT)

注意:单独使用 -static 编译出来的文件执行会出错,要结合后面那堆参数:

terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted

Pcap_DNSProxy

当然还是希望作者加一个静态编译的开关选项。

已提交,作者已添加:

* 使用 ./Linux_Build.sh 执行编译程序
* 添加参数 --enable-static 即 ./Linux_Build.sh --enable-static 可启用静态编译


Jul 17

Charter 是国外一个 ISP,它们提供给客户一个 OEM 版本的 R6300 V2,硬件构成和 Netgear R6300 V2 完全相同。外观上,Charter 版本为磨砂面,"NETGEAR" 字样的 Logo 不发光(实际上内部印刷版上有 LED,但是由于外壳不透光所以...),而 Negear 零售版本是镜面 + 发光 Logo。

进入管理界面,Charter 的固件版本显示为 V1.0.3.6_1.0.63CH,注意后面的 CH 字样,不能升级 Netgear 官方固件,也不能直接刷针对 R6300 V2 的 DD-WRT 或者 Tomato 固件,会提示类似信息:

This firmware file is incorrect! Please get the firmware file again and make sure it is the correct firmware for this product.

1. 刷 Kong 的 DD-WRT K3 固件预刷版本,下载地址:dd-wrt.K3_R6300V2CH.chk

2. 登陆 DD-WRT,开启 SSH 服务,用 SSH 客户端登陆路由器,键入以下命令:

burnboardid U12H240T00_NETGEAR

重启路由器,重启完成后,你的路由器已经变成标准版的 Netgear R6300V2

3. 如果只是想刷 DD-WRT,到这一步就可以刷标准 Netgear R6300V2 的 DD-WRT 固件了,包括 BS 版本;

4. 在 DD-WRT 界面刷入 Netgear 官方的 R6300V2 固件,去官方下载即可;

5. 刷入 Shibby Tomato 固件的预刷版本:tomato-R6300v2-initial.chk

6. 刷 Tomato ARM 其他版本。


May 10

其实就是注意 -ldl 放的位置,之前放在 LDFLAGS 最后老是提示 -lcrypto 错误(这样放,在路由器上编译好像没事~~ :evil: ):

make clean

LIBS="-ldl" LDFLAGS="-Wl,-static -static -static-libgcc" ./configure --host=arm-brcm-linux-uclibcgnueabi CC=arm-brcm-linux-uclibcgnueabi-gcc --with-openssl=/home/punk/arm_apps/libs/openssl

make -j`nproc`


Apr 17

直接编译会出错:

/opt/lib//libcrypto.a(c_zlib.o): In function zlib_stateful_expand_block': c_zlib.c:(.text+0x54): undefined reference toinflate'
/opt/lib//libcrypto.a(c_zlib.o): In function zlib_stateful_compress_block': c_zlib.c:(.text+0xd8): undefined reference todeflate'
/opt/lib//libcrypto.a(c_zlib.o): In function bio_zlib_free': c_zlib.c:(.text+0x128): undefined reference toinflateEnd'
c_zlib.c:(.text+0x144): undefined reference to deflateEnd' /opt/lib//libcrypto.a(c_zlib.o): In functionzlib_stateful_finish':
c_zlib.c:(.text+0x194): undefined reference to inflateEnd' c_zlib.c:(.text+0x19c): undefined reference todeflateEnd'
/opt/lib//libcrypto.a(c_zlib.o): In function zlib_stateful_init': c_zlib.c:(.text+0x224): undefined reference toinflateInit_'
c_zlib.c:(.text+0x26c): undefined reference to deflateInit_' /opt/lib//libcrypto.a(c_zlib.o): In functionbio_zlib_ctrl':
c_zlib.c:(.text+0x4a0): undefined reference to deflate' c_zlib.c:(.text+0x56c): undefined reference tozError'
/opt/lib//libcrypto.a(c_zlib.o): In function bio_zlib_write': c_zlib.c:(.text+0x708): undefined reference todeflate'
c_zlib.c:(.text+0x794): undefined reference to zError' c_zlib.c:(.text+0x824): undefined reference todeflateInit_'
/opt/lib//libcrypto.a(c_zlib.o): In function bio_zlib_read': c_zlib.c:(.text+0x900): undefined reference toinflate'
c_zlib.c:(.text+0x954): undefined reference to zError' c_zlib.c:(.text+0x9e0): undefined reference toinflateInit_'
collect2: error: ld returned 1 exit status
Makefile:94: recipe for target 'redsocks2' failed
make: *** [redsocks2] Error 1

解决方法,修改 Makefile:
override LIBS += -lssl -lcrypto -ldl

改成:
override LIBS += -lssl -lcrypto -ldl -lz

然后:
CCFLAGS=-static make

或者(tomatoware)
LDFLAGS="-Wl,-static -static -static-libgcc" make

编译成功。


Oct 21

下载源码: https://github.com/madeye/shadowsocks-libev

直接编译会出错:

/tmp/cciqCfzf.s: Assembler messages:
/tmp/cciqCfzf.s:2903: Error: opcode not supported on this processor: mips1 (mips1) `sync'

修改 \shadowsocks-libev-master\libev 下的 ev.c :

找到:

#define ECB_MEMORY_FENCE         __asm__ __volatile__ ("sync"     : : : "memory")

改为:

#define ECB_MEMORY_FENCE         __asm__ __volatile__ (".set mips2; sync; .set mips0" ::: "memory")

有两处,都改吧。(参考:http://permalink.gmane.org/gmane.comp.lib.ev/2182)

再编译就可以通过了:

Shadowsocks.1.4.0.Tomato.gif


[3/18]  < 1 2 3 4 5 6 7 8 9 10 > ... »