Jan 05

想利用 DD-WRT 支持 Buffalo WZR-1750DHP 全部 512M 内存的固件来做编译机,安装了 Tomatoware。

编译一些无需通过 automake/autoconf 生成 Makefile 的源程序都没啥问题,但是一旦编译通过 autogen.sh (应该调用 automake 等程序)生成的 Makefile 就会直接出错,信息类似:

[goflex@GoFLEX:/home/local/goflex/work/shairport-sync_git 35%] ~ make
make all-recursive
make[1]: Entering directory '/home/local/goflex/work/shairport-sync_git'
Making all in man
Makefile:518: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/local/goflex/work/shairport-sync_git'
Makefile:371: recipe for target 'all' failed
make: *** [all] Error 2
[goflex@GoFLEX:/home/local/goflex/work/shairport-sync_git 36%] ~

参考:

https://forum.openwrt.org/viewtopic.php?id=60605

https://github.com/lancethepants/tomatoware/issues/18#issuecomment-168871785

目前没什么好的解决办法,好在出错的地方有些规律,就是在 Makefile 中 dot_seen=no; 这句上面的反斜杠“\”需要去掉;写了个脚本做提示:

#!/bin/sh

curr_dir=`pwd`

bad_makefile=""
bad_makefile_line=""

bad_makefile_line=$(sed -n '/dot_seen=no;/=' `grep -lr 'dot_seen=no;' $curr_dir`)
bad_makefile=$(grep -lr 'dot_seen=no;' $curr_dir)

for bfile in $bad_makefile; do
    echo $bfile
done

for line in $bad_makefile_line; do
    fi_line="$(($line - 1))"
    echo $fi_line
done

echo "sed -i 'LINEs/\//' FILE"

它会列出需要修改的文件,所在行数,提示用:

sed -i 'LINEs/\//' FILE

去修改。

参考上面的帖子链接,最终确认是 DD-WRT 自带 /bin/bash 的问题,解决方法是:在 ./configure 之前建立一个环境变量:

export CONFIG_SHELL=/mmc/bin/bash

用来覆盖配置文件建立时默认使用的 /bin/bash 即可。


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


Jan 02

2024 更新:

最快的方法还是在虚拟机中交叉编译, 而且最新的 1.2x 版本如果在路由器编译会很容易内存溢出。

下载源码,解压后在 Alpine/Debian 虚拟机中执行:

cd /root/src/go/src
GOARCH=arm GOARM=5 GOOS=linux ./make.bash -v

完成后用 go/bin/linux_arm/ 下的文件替换 go/bin/ 下面的 go 和 gofmt 两个同名文件;删除 go/pkg/tool/linux_amd64 目录,然后打包:

cd ../bin
mv linux_arm/* ./
rm -rf linux_arm/
cd ../pkg
rm -rf tool/linux_amd64/
tar --numeric-owner -czf /root/src/go1.22.5.linux-armv7.tar.gz -C /root/src go

复制到路由器上:

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

------------------------------------------------------------------------------------------------------------------------------

可以不看

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

参考: 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 下可以执行,一旦放到计划任务等非交互状态下就不能执行了,还不好调试!


[14/59]  «< 9 10 11 12 13 14 15 16 17 18 > ... »