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 即可。


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: ,

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 其他版本。


Aug 12

iptables -N dnsfilter -t mangle
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x042442b2,0x0807c62d,0x253d369e,0x2e52ae44,0x3b1803ad,0x402158a1,0x4021632f,0x4042a3fb,0x4168cafc,0x41a0db71" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x422dfced,0x480ecd63,0x480ecd68,0x4e10310f,0x5d2e0859,0x80797e8b,0x9f6a794b,0xa9840d67,0xc043c606,0xca6a0102" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xcab50755,0xcb620741,0xcba1e6ab,0xcf0c5862,0xd0381f2b,0xd1244921,0xd1913632,0xd1dc1eae,0xd35e4293,0xd5a9fb23" -j DROP
iptables -t mangle -I dnsfilter -p udp -m udp -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0xd8ddbcb6,0xd8eab30d,0xf3b9bb27,0x4a7d7f66,0x4a7d9b66,0x4a7d2771,0x4a7d2766,0xd155e58a" -j DROP
iptables -t mangle -I PREROUTING -m udp -p udp --sport 53 -j dnsfilter

适用于基于 Linux 系统的路由器,Tomato,DD-WRT,OpenWRT 等,把脚本丢到路由器启动脚本里面即可。 :evil:


Aug 09

家中或者公司使用了 Tomato 或者 DD-WRT 固件路由器的同学可能想分享他们的“私密” Hosts 文件,但是又不方便拷贝到每台机器,那么把这个 Hosts 文件内容放到路由器上是最方便的,不过 DNSMasq 的 Hosts 文件与 Windows 的 Hosts 文件格式不同,需要做一个转换,于是有了下面这个 HTML 文件,其实就是一个简单的 Javascript 转换。复制所有内容,存为任意命名的 HTML 文件,用浏览器打开,然后点击转换按钮,把转换后的数据贴到路由器 DNS 设置界面就行了。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hosts2DNSMasq</title>
<script type="text/javascript">
//类似 PHP 中的 trim
    function trim(str) {
        var str = str.replace(/^\s\s*/, ''),
            ws = /\s/,
            i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
    }
//转换 Hosts 文件格式到 DNSMasq 的格式
    function htol(el) {
        var i;
        var localz = new Array();
        var hosts = document.getElementById(el).value;
        var localzs='';
        hostdomain = hosts.split("\n");
        for (i=0;i<hostdomain.length;i++) {
            if (trim(hostdomain[i]) != '') {
                localz[i] = hostdomain[i].split("\t");
                if (localz[i][1] != undefined && localz[i][0].indexOf("#") == -1) {
                    localzs += 'address=/'+localz[i][1]+'/'+localz[i][0]+'\n';
                } else {
                    localzs += hostdomain[i]+'\n';
                }
            }
        }
        document.getElementById(el).value = localzs;
    }
</script>
</head>
<body>
    <div style="width:1024px; margin:0 auto;">
            <h2>HOSTS</h2>
            <div style="margin: 5px auto; display: block;">
            <button type="button" id="hosttolocal" onclick="htol('hostsMap');">ConventerToDNSMASQ</button>
            </div>
            <textarea id="hostsMap" onclick="this.focus();this.select()" style="width:98%;height:550px;margin:0;padding:3px;display:block;"></textarea>
    </div>
</body>
</html>

例如以下的 Hosts 数据:


203.208.45.200	base0.googlehosted.com
203.208.45.200	base1.googlehosted.com
203.208.45.200	base2.googlehosted.com
203.208.45.200	base3.googlehosted.com
203.208.45.200	base4.googlehosted.com
203.208.45.200	base5.googlehosted.com
203.208.45.200	bks0.books.google.com
203.208.45.200	bks1.books.google.com

会被转换成:


address=/base0.googlehosted.com/203.208.45.200
address=/base1.googlehosted.com/203.208.45.200
address=/base2.googlehosted.com/203.208.45.200
address=/base3.googlehosted.com/203.208.45.200
address=/base4.googlehosted.com/203.208.45.200
address=/base5.googlehosted.com/203.208.45.200
address=/bks0.books.google.com/203.208.45.200
address=/bks1.books.google.com/203.208.45.200

注意,只是做了简单的格式转换,没有利用 DNSMasq 的(泛域名)特性优化。 :shock:


[1/2]  1 2 >