Android x86项目提供的还是1.6版本的iso,这里做了很多的最新版本2.2的工作,可以由他上传的源码编译一个Virutal Box能使用的vm.iso文件.

编译主机用的Ubuntu 10.04,其他OS可能要安装的相关依赖文件有所不同. 10.04默认没有sun jdk,要加个新源

http://archive.canonical.com/ lucid partner.

1.安装相关依赖文件

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install git-core 
sudo apt-get install sun-java6-jdk 
sudo apt-get install flex 
sudo apt-get install bison 
sudo apt-get install gperf
sudo apt-get install libsdl-dev
sudo apt-get install libwxgtk2.6-dev 
sudo apt-get install build-essential 
sudo apt-get install curl 
sudo apt-get install valgrind

2.安装repo

cd
mkdir bin
cd bin
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x repo

3.下载同步源代码

cd
mkdir android2.2
cd android2.2
 ../bin/repo init -u git://android-x86.git.sf.net/gitroot/android-x86/manifest.git -b froyo-x86
 ../bin/repo sync

同步要花n久时间.取决于网速,我这200+KB/s跑了四个多小时.

4.编译成vm.iso 其中编译参数-j4是我有四个cpu核心,所以设定同时运行4个进程.

 . build/envsetup.sh
lunch vm-eng 
m -j4 iso_img  ' cpu x 4

编译也要花n久时间,取决于CPU性能,我的Xeon 4核心花了近三个小时. 然后你就能在out下找到vm.iso了.文件大小约557,714KB. 新开一个Virtual Box虚拟机,挂载vm.iso,直接光盘运行或安装到硬盘都可.鼠标独占要去掉,否则不会显示鼠标.而且鼠标的速度慢了点,得等作者在新版本里进行修正了.

ISO文件已经上传到网盘,点此查看.

无图无真相,给几张在我的VB中运行的靓照.多图杀猫啊~ 点击查看清晰无码大图.

[gallery link="file" columns="2" orderby="title"]

-----END-----

现在用的路由器安装的是Tomato Pandora Version 1.27.0475,有时候要在路由器上抓包,发现这个系统没有配置ngrep或者tcpdump,也没有ipkg,没法直接安装现成的opt包. 不过发现作者有写接口程序,只是没直接公布.

  1. login到路由器,下载ipkg包的接口程序,用于安装ipkg

    wget http://pandoric.googlecode.com/svn/Pandora%20%e8%84%b1%e6%9c%ba%e8%bd%af%e4%bb%b6/optware-install.sh
    

    不过发现直接下载的文件换行符有问题,要处理一下,或者copy下面的内容,存成optware-install.sh后再上传到路由器里面.

    #!/bin/sh
    # Optware pre-installation script, Leon Kos 2006
    
    REPOSITORY=http://pandoric.googlecode.com/svn/optware/stable
    TMP=/tmp
    
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin
    unset LD_PRELOAD
    unset LD_LIBRARY_PATH
    
    _check_config()
    {
        echo "Checking system config ..."
        GATEWAY=$(netstat -rn |
        sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' )
        if [ -n "${GATEWAY}" ]; then
        echo "Using ${GATEWAY} as default gateway."
        else
        echo "Error: No default gateway set!"
        exit 2
        fi
        if [ -s /etc/resolv.conf ]; then
        echo "Using the following nameserver(s):"
        if grep nameserver /etc/resolv.conf ; then
                GATEWAY_SUBNET=$(echo "${GATEWAY}" |
            sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//')
            if [ "${GATEWAY_SUBNET}" = "192.168" ]; then
            if grep -q ${GATEWAY} /etc/resolv.conf ; then
                echo "Gateway ${GATEWAY} is also nameserver."
            else
                echo "Warning: local nameserver is different than gateway!"
                echo "Check config or enter:"
                if test -L /etc/resolv.conf ; then 
                  echo "  sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf"
                else
                  echo "  sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf"
                fi
                echo "to correct this."
            fi
            fi
        else
            echo "Error: No nameserver specified in /etc/resolv.conf"
            exit 5
        fi
        else
        echo "Error: Empty or nonexistent /etc/resolv.conf"
        exit 3
        fi
    
        if mount | grep -q /opt ; then
        [ -d /opt/etc ] && echo "Warning: /opt partition not empty!"
        else
        echo "Error: /opt partition not mounted."
        echo "Enter"
        echo "    mkdir /jffs/opt"
        echo "    mount -o bind /jffs/opt /opt"
        echo "to correct this."
        exit 4
        fi
    }
    
    _install_package()
    {
        PACKAGE=$1
        echo "Installing package ${PACKAGE} ..."
        wget -O ${TMP}/${PACKAGE} ${REPOSITORY}/${PACKAGE}
        cd  ${TMP} 
        tar xzf ${TMP}/${PACKAGE} 
        tar xzf ${TMP}/control.tar.gz
        cd /
        if [ -f ${TMP}/preinst ] ; then
        sh ${TMP}/preinst
        rm -f ${TMP}/preints
        fi
        tar xzf ${TMP}/data.tar.gz
        if [ -f ${TMP}/postinst ] ; then
        sh ${TMP}/postinst
        rm -f ${TMP}/postinst
        fi
        rm -f ${TMP}/data.tar.gz
        rm -f ${TMP}/control.tar.gz
        rm -f ${TMP}/control
        rm -f ${TMP}/${PACKAGE}
    }
    
    _check_config
    _install_package uclibc-opt_0.9.28-13_mipsel.ipk
    _install_package ipkg-opt_0.99.163-10_mipsel.ipk
    /opt/sbin/ldconfig
    /opt/bin/ipkg update
    /opt/bin/ipkg install -force-reinstall uclibc-opt
    /opt/bin/ipkg install -force-reinstall ipkg-opt
    
  2. 进入路由器web界面.启用JFFS 如果启用后,空间不够3M,也就没戏了.我用的一共16M空间,系统占了8M,还空8M.但opt的初始安装,要近3M左右空间.

  3. 运行下面的命令安装ipkg

    mkdir /jffs/opt
    mount -o bind /jffs/opt /opt
    sh optware-install.sh
    
  4. 修改下/opt/etc/ipkg.conf,源设置为

    src/gz optware http://pandoric.googlecode.com/svn/optware/stable
    

    如果能正常下载,这步不改,用默认源也可

  5. ok.能安装想要的软件了

    ipkg install ngerp
    

如果路由系统升级,这些要重做一次.

新安装了个中文版的firefox,已经更新到3.6.8,发现有个常去的论坛死活登录不上去,IE没有问题,以前一直用的英文版ff也ok,于是怀疑是中文版的cookies的问题,找到

C:\Users\ahui\AppData\Roaming\Mozilla\Firefox\Profiles\XXXX.default\cookies.sqlite

用sqlite管理软件查看内容,发现没有保存刚登录的论坛的记录. 尝试将cookies.sqlite改名,重新登录,问题解决. 原因不明.特记之.

编辑single.php,放到comments_template之前.

<div class="entry-title"">
相关文章
</div>
<div id="related_posts" class="box">
   <?php do_action(
    'related_posts_by_category',
    array(
      'orderby' => 'post_date',
      'order' => 'DESC',
      'limit' => 5,
      'echo' => true,
      'before' => '&lt;li>',
      'inside' => '&raquo; ',
      'outside' => '',
      'after' => '&lt;/li>',
      'rel' => 'nofollow',
      'type' => 'post',
      'image' => array(50, 50),
      'hidden' => 'image',
      'message' => '没有相关文章.'
    )
  ) ?>
</div>

其中'hidden' => 'image'防止自动显示相关图片.

今天收到burstnet的邮件,有个好消息,说是支持ipv6了

BURSTNET®: IPv6 IP Addressing Now Available!

SCRANTON, PA - July 27, 2010 - BurstNET Technologies, Inc.™ (http://www.burst.net), a leading provider of budget hosting services, today announced IPv6 addressing service available end-to-end on its entire product line: including Dedicated Servers, Virtual Private Servers (VPS), & Co-Location.

原生支持ipv6真是个相当好的消息,于是赶紧发了个Ticket进行申请. 有消息再update. Ticket发送的当地时间为07-29-2010 - 01:34AM,应该睡得正香的时候,或者还没开始睡.....

update: 07-29-2010 - 02:04AM收到回复,已经给我添加了二个ipv6的地址,回应速度很快啊,足以说明晚上有人值班,而且没有睡着...

接下来看能用v6的地址做点什么.

常用的bash PS1值

PS1="[\033[35m]\t[\033[m] [\033[36m]\u[\033[m]@[\033[32m]\h:[\033[33;1m]\w[\033[m] ->"
效果如下

or

PS1="[\033[37m]\t[\033[m] [\033[36m]\u[\033[m]@[\033[32m]\h:[\033[33;1m]\w[\033[m]>"

记得最早用的Linux发行版本就是Redhat,6,7,8,9的样子.记得8,9的时候,桌面就已经能用了.当然还不算好用.那时候其实也只会看看桌面是个啥样子,而且终究没有win好用,特别是中文支持方面,问题太多,基本每次都是安装几天后,就又删除了.中间还试用过国内出的redflag,bulepoint,magic之类的,虽然时间过去了很久,还是记得bulepoint似乎用起来不错,因为中文方面很多问题都被修正了,可惜后来就不见踪影了.

刚开始工作的时候,主要还是应用MS在产品,几年后才转移到Unix/Linux类.生产平台用的是Sun的硬件,相应系统也是用的SunOS,也叫Solaris,可怜见的,现在应该叫Oracle的硬件了.说到Oracle,第一次用的似乎是7i,安装在win2000上的.第二次用的是8了,安装在Solaris上.那时候x86的版本用得还不多,所以内部测试,还是安装Linux类,而能一下想起的linux,还是当然的redhat.这时候用redhat,也就没怎么在乎桌面好不好了,大部分情况下,桌面根本就没有安装.

差不多04,05年左右,因为工作环境变得复杂,才觉得win用起来不太方便,而且太过脆弱,才正式把linux做为主系统.这时候能想起的,还是redhat,不过开源桌面版本名字已经换成Fedora core,从fc2到fc3,感觉相当好用.在工作上,用fc3上gnome,已经能更好的完成在win桌面下能完成的工作了.fc3是用得比较久的发行版,之后有很长时间没换过,甚至也没升级.现在版本号破10了,3之后的都基本没用过,只是从用老版本的感受推测,这个系列应该是都还很不错的.

在自己家的电脑上用Linux做桌面时,发现要求高得多.除了能用,还要好用,除了好用,还要好看.而印象中Ubuntu也是那几年里横空出世.等我试用的时候,好象是6.04还是6.10的版本来着,然后7,8,9,10都有安装.对于Ubuntu的感觉,就是桌面应用方面.已经基本完美到安装好就能满足大部分的需求,除了某个银行的专业版没法运行外.这个严格说来,还不算是系统的问题,而是某行的刻意而为.所以除了这家,大部分别的银行都还是有解决办法. <!--more--> Ubuntu 8用了近二年时间,等我升级9的时候,10也快出来了.这时候才发现Ubuntu很是热情的一年二个版本,也是一种相当大的困扰,于是转而去寻找稳定期长点的版本.测试用了debian,LFS,gentoo,Arch linux等发行版,其中LFS一直没有全部完工过,要手工做的事太多,实在不是我等懒人坚持得下来,最主要还是担心后期的维护.而Arch linux的无缝升级,安装过程简单,包维护简便,理论上i686的编译方式也速度快等,正好符合要求.只是要把桌面配置成Ubuntu一样,还是得做不少手工工作.

Centos则是很早前试用过一次外,在VPS可选系统不多的情况下,才采用的.我比较中意的VPS系统,还是Arch适合,可惜所有的vps都有提供centos,极少有能提供Arch.不过做为redhat as开源系列,也算是很熟悉的一个版本,以及那著名的rpm包.当然yum用起来方便得多.

于是我个人主要还是用Archlinux做主系统,特别是虚拟机安装测试系统,Arch又小又方便.有朋友抱怨win xx老中病毒木马时,我则会推荐他们安装Ubuntu,基本上安装好就能用,我也能省不少事.而VPS上,就Centos到底了,这样换VPS时,有些东西还能直接使用.

有可能的问题: 无论Ubuntu还是Arch,刚安装调试好后,都是很正常很好用的.不平常不好用,往往发生在系统更新之后.Ubuntu的小更新还好,出的问题不多,但版本升级出的问题就不少了.Arch因为是无缝升级,导致几乎每天都有不少包要更新,特别在安装很多桌面软件后,常一更新就得100M+,而且每过一段时间,更新后都会出点小问题.在几个朋友都抱怨更新后啥啥啥不正常了,我都建议他们不再做更新.而我自己用的系统,也会在配置好后很长一段时间不做更新.如果只是用做桌面,这样可以免掉些麻烦,也不用太担心安全问题.

小时候长话费尤其是国际长话费贵得惊人,几分钟就得10多块几十块上百块的.由此也出现了不少守个公用电话做为小营生的小商人,倒是制造了或多或少的就业机会,当然那高额的利润究竟最后到了谁手上,就不知道了.

现在费用倒是明里暗里下降了不少,不过你要是有个必须每天打N通电话的重要人物在外地甚至在外国,话费的N倍还是吃不太消.就算不存乎,能省点也是几千年来的光荣传统不是?自己架个SIP Server,再用个phone 2 network类的设备,你想打N通就打N通,每通想打N久就打N久,如果你有那么多话说,不必再担心话费问题了.取而代之的,你可能要担心网费和电费的问题.

现在有不少几合一的家用路由交换一体的设备,都带有电话接口,设置好SIP帐号,接部普通电话就能用了.而最新的智能手机,带wifi功能的,也都基本支持SIP类软件,设置好帐号,直接用wifi通话,也要比走GSM,3G类的网络节省很多.

首先,官网下载源代码.BTW,只能在Linux下安装.Window下也有类似的程序,国产的就有不少,不过我没用过,不做评论.我个人仍然喜欢用开源的东西自己来编译.

下载 ser-0.9.6_src.tar.gz

tar vzxf ser-0.9.6_src.tar.gz
cd ser-0.9.6

修改Makefile,加入mysql支持

# if not set on the cmd. line or the env, exclude this modules:
    exclude_modules?=cpl ext extcmd \
                postgres snmp \
                im \
                jabber mysql \
                cpl-c \
                auth_radius group_radius uri_radius avp_radius \
                pa

删除其中的mysql字样.

make all
make install

修改/usr/local/sbin/ser_mysql.sh,防止默认utf编码时.建立库失败. 查找

echo "creating database $1 ..."

sql_query <<EOF
create database $1;
use $1;

create database $1;行后加入

alter database ser character set latin1;

建立初始数据库,没有出错提示,会自动建立24个表,而且其中大部分没用到.

make dbinstall or run /usr/local/sbin/ser_mysql.sh create

建立新用户

serctl add username@domin password email

安装语音代理rtpproxy,一样从http://www.iptel.org/ser/下载,make,make install就好

配置文件/usr/local/etc/ser/ser.cfg,配置mysql认证,以及NAT修正. 其他类型可在这查看

ftp://siprouter.teigre.com/pub/gettingstarted/configs/

# $Id: nat-rtpproxy.cfg 51 2006-01-31 13:28:04Z /CN=Paul Hazlett/emailAddress=paul@onsip.org $
debug=3
fork=yes
log_stderror=no

listen=192.0.2.13           # INSERT YOUR IP ADDRESS HERE
port=5060
children=4

dns=no
rev_dns=no
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"

loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"

modparam("auth_db|uri_db|usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 30) 
modparam("nathelper", "ping_nated_only", 1)   
modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

route {

    # -----------------------------------------------------------------
    # Sanity Check Section
    # -----------------------------------------------------------------
    if (!mf_process_maxfwd_header("10")) {
        sl_send_reply("483", "Too Many Hops");
        break;
    };

    if (msg:len > max_len) {
        sl_send_reply("513", "Message Overflow");
        break;
    };

    # -----------------------------------------------------------------
    # Record Route Section
    # -----------------------------------------------------------------
    if (method!="REGISTER") {
        record_route();
    };

    if (method=="BYE" || method=="CANCEL") {
        unforce_rtp_proxy();
    } 

    # -----------------------------------------------------------------
    # Loose Route Section
    # -----------------------------------------------------------------
    if (loose_route()) {

        if ((method=="INVITE" || method=="REFER") && !has_totag()) {
            sl_send_reply("403", "Forbidden");
            break;
        };

        if (method=="INVITE") {

            if (!proxy_authorize("","subscriber")) {
                proxy_challenge("","0");
                break;
            } else if (!check_from()) {
                sl_send_reply("403", "Use From=ID");
                break;
            };
            consume_credentials();

            if (nat_uac_test("19")) {
                setflag(6);
                force_rport();
                fix_nated_contact();
            };
            force_rtp_proxy("l");
        };
        route(1);
        break;
    };

    # -----------------------------------------------------------------
    # Call Type Processing Section
    # -----------------------------------------------------------------
    if (uri!=myself) {
        route(4);
        route(1);
        break;
    };

    if (method=="ACK") {
        route(1);
        break;
    } else if (method=="CANCEL") {
        route(1);
        break;
    } else if (method=="INVITE") {
        route(3);
        break;
    } else  if (method=="REGISTER") {
        route(2);
        break;
    };

    lookup("aliases");
    if (uri!=myself) {
        route(4);
        route(1);
        break;
    };

    if (!lookup("location")) {
        sl_send_reply("404", "User Not Found");
        break;
    };

    route(1);
}

route[1] {

    # -----------------------------------------------------------------
    # Default Message Handler
    # -----------------------------------------------------------------

    t_on_reply("1");

    if (!t_relay()) {
        if (method=="INVITE" && isflagset(6)) {
            unforce_rtp_proxy();
        };
        sl_reply_error();
    };
}

route[2] {

    # -----------------------------------------------------------------
    # REGISTER Message Handler
    # ----------------------------------------------------------------

    if (!search("^Contact:[ ]*\*") && nat_uac_test("19")) {
        setflag(6);
        fix_nated_register();
        force_rport();
    };

    sl_send_reply("100", "Trying");

    if (!www_authorize("","subscriber")) {
        www_challenge("","0");
        break;
    };

    if (!check_to()) {
        sl_send_reply("401", "Unauthorized");
        break;
    };

    consume_credentials();

    if (!save("location")) {
        sl_reply_error();
    };
}

route[3] {

    # -----------------------------------------------------------------
    # INVITE Message Handler
    # -----------------------------------------------------------------

    if (!proxy_authorize("","subscriber")) {
        proxy_challenge("","0");
        break;
    } else if (!check_from()) {
        sl_send_reply("403", "Use From=ID");
        break;
    };

    consume_credentials();

    if (nat_uac_test("19")) {
        setflag(6);
    }

    lookup("aliases");
    if (uri!=myself) {
        route(4);
        route(1);
        break;
    };

    if (!lookup("location")) {
        sl_send_reply("404", "User Not Found");
        break;
    };

    route(4);
    route(1);
}

route[4] {

    # -----------------------------------------------------------------
    # NAT Traversal Section
    # -----------------------------------------------------------------

    if (isflagset(6)) {
        force_rport();
        fix_nated_contact();
        force_rtp_proxy();
    }
}

onreply_route[1] {

    if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") {
        if (!search("^Content-Length:[ ]*0")) {
            force_rtp_proxy();
        };
    };

    if (nat_uac_test("1")) {
        fix_nated_contact();
    };
}

先启动rtpproxy,用ftp的用户权限

/usr/local/bin/rtpproxy -u ftp

启动ser

serctl start

停止ser

serctl start

查看注册用户

serctl ul show