Install ATT Global Network Client on Fedora 15 64bit

ATT Client only provides 32bit package, how can we install and run it on a 64bit Linux, e.g., Fedora 15?

1. Resolve dependencies:

$ sudo yum install libcurl.i686
 
$ cd /lib
$ sudo ln -s libcrypto.so.1.0.0d libcrypto.so.4
 
$ cd /usr/lib
$ sudo ln -s libssl.so.1.0.0d libssl.so.4
$ sudo ln -s libcurl.so.4.2.0 libcurl.so.3
 
$ sudo ldconfig

2. Install:

Even you have installed the dependent packages and created symbol links like the above, you may still get the below error when trying to install it:

$ sudo rpm -Uvh agnclient-1.0-2.0.1.3002a.i386.rpm 
warning: agnclient-1.0-2.0.1.3002a.i386.rpm: Header V3 DSA/SHA1 Signature, key ID c776ad20: NOKEY
error: Failed dependencies:
	libcrypto.so.4 is needed by agnclient-1.0-2.0.1.3002a.i386
	libcurl.so.3 is needed by agnclient-1.0-2.0.1.3002a.i386
	libssl.so.4 is needed by agnclient-1.0-2.0.1.3002a.i386

Hence we have to install it without checking dependencies:

$ sudo rpm -Uvh --nodeps  agnclient-1.0-2.0.1.3002a.i386.rpm

3. Check the daemons’ status, and start them if not started:

$ sudo service agnclientd status
$ sudo service agnLogd status
 
$ sudo service agnclientd start
$ sudo service agnLogd start

After two daemons started successfully, you can launch ATT Client to connect your company’s VPN service.

Posted in Uncategorized | Tagged , , | 2 Comments

Flashing Router with DD-WRT Firmware

DD-WRT 官方 wiki 上有详细的刷机指南,不过因为它要照顾到多种可能性、可选项,使得文章的长度很吓人,其实刷机超简单,只有简单的三步。

1,下载一个适用于你的路由器的 firmware build。(如何选择合适的 build?

2,重置路由器至出厂状态
使用浏览器打开路由器的管理页面,然后切换至 Administration -> Factory Defaults 功能页,在 Restore Factory Defaults 选项中选中 Yes,然后点击 Apply Settings 按钮。重置完成后,在出现的初始化页面上设置一个用户名和密码。

dd-wrt - reset to factory defaults

3,刷机
使用浏览器打开路由器的管理页面,然后切换到 Administration -> Firmware Upgrade 功能页,选中 After flashing reset to default settings,并选中你在第一步中下载的固件安装包,然后点击 Upgrade 按钮。等待数分钟,待刷机完成后,在出现的初始化页面上设置一个用户名和密码。

dd-wrt - flashing firmware

Posted in Uncategorized | Tagged | Leave a comment

How to Choose DD-WRT Build for Broadcom Based Router

DD-WRT 支持多种路由器设备,其 wiki 上维护有一个 Supported Devices 页面,你可以查找你的路由器是否可以安装 DD-WRT 固件。本文假定你的路由器在支持列表中,且 CPU 是 Broadcom 的。

最简单的选择方式当然是 DD-WRT 官网的下载页面,但其上给出的推荐 build 通常都太老了。在 DD-WRT 的 FTP 中有很多 builds,但很难知道哪个 build 是最合适的,你可以逐个测试… 嘿嘿,工程量浩大、而且容易变砖。还好论坛中有一个专门的 Firmware Recommendations 贴,著名的 redhawk 同学根据测试给出推荐,通常都是很靠谱的,如果你懒得自己动手测试,这是一个很好的选择。

Package Type

根据安装包中的所含功能的不同,DD-WRT 固件安装包有很多不同的类型,比如:micro, mini, std, mega 等等。在 wiki 上有一张表格详细列出了每种包所带的功能,你可以根据自己的需求进行选择。比如,我需要我的路由器能够支持 OpenVPN,所以我只能从 openvpn_jffs_small、voip、big、mega 四个中选一个,又因为我希望固件包尽量小,所以最终我会选择 openvpn_jffs_small 这个类型。

K24 or K26

目前 DD-WRT 固件内核有 K24 和 K26 两种,分别使用 Linux Kernel 2.4 和 2.6。根据路由器的 corerev 值来进行判断。

使用 telnet or SSH 登录到路由器,然后运行:

# nvram get wl0_corerev

如果是 dual radio 设备,还要运行:

# nvram get wl1_corerev

如果返回的 corerev 数值大于等于16,那么你可以使用 K26 固件。但在目前阶段,还是 K24 的比较稳定。

VINT or NEWD or NEWD-2

这个划分是以 Broadcom CPU 型号和驱动版本为依据的。VINT 针对 47xx 系列 CPU,NEWD 针对 5352 的 CPU。NEWD-2 与 NEWD 的区别是 wl driver 的版本:

NEWD = kernel 2.4.37 and wl driver 4.150.10.31
NEWD-2 = kernel 2.4.37 and wl driver 4.150.66.6

如何判断你的路由器应该选择哪种版本?还是根据 corerev 值进行判断:

  • corerev =4,则一定要使用 VINT 版
  • corerev >=5 <=7,则 VINT 版 和 NEWD 版都可用,建议使用 VINT 版
  • corerev >=8,则 VINT 版 和 NEWD 版都可用
  • corerev >=9,则一定要使用 NEWD 版
  • corerev =16,可以使用 NEWD2 版本(使用 NEWD2 变砖可能性比较大)

<EOF>

Posted in Uncategorized | Tagged | 1 Comment

Getting Started with GitHub

Git 实在太强大了,GitHub 实在太有用了!下面记录的是如何在 Fedora 15 上设置使用 GitHub 服务。

1. 设置 SSH keys

GitHub 使用 SSH keys 来确保你的计算机与 GitHub 服务器之间的连接安全,所以我们需要生成 SSH keypair:
$ ssh-keygen -t rsa -C "your_email@foobar.com"
这会在 ~/.ssh 目录下生成两个文件 id_rsaid_rsa.pub,前者是你的私钥,后者是对应的公钥。

登陆 github.com 后,进入 Account Settings -> SSH Public Keys -> Add another public key,将上一步中生成的公钥贴入出现的对话框中,点击 Add key 以添加这个公钥到你的 GitHub 帐号。

测试一下是否设置成功:
$ ssh -T git@github.com
你会看到如下信息:

Hi your_username! You’ve successfully authenticated, but GitHub does not provide shell access.

这就表示你的计算机和 GitHub 服务器之间的连接ok.

2. 设置 Git 基本信息

安装 Git,如果你的 Fedora 还没有安装的话:
$ sudo yum install git

设置个人信息
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@foobar.com"

设置 GitHub 信息
$ git config --global github.user your_username
$ git config --global github.token 0123456789your0123456789token

* 登陆 github.com,打开 Account Settings -> Account Admin,就可以看到你的 API Token

其实以上设置都记录在 ~/.gitconfig 文件中。

3. 创建一个项目

登陆 github.com 后,进入 Dashboard,点击 New Repository 按钮以创建一个新项目:

Project Name: firstprj
Description: This is my first try to use github.

成功创建一个 repository 后,github.com 会给一个页面列出使用这个 repository 的详细步骤:

$ mkdir firstprj
$ cd firstprj
$ git init

接着你可以往这个目录下添加项目文件,这里假设我们就添加了两个文件:READMEHelloWorld.java

$ git add README HelloWorld.java
$ git commit -m 'my first comment'
$ git remote add origin git@github.com:your_username/firstprj.git
$ git push -u origin master

打开浏览器 https://github.com/your_username/firstprj 就可以看到你的项目文件列表了。

Have fun!

Posted in Development | Tagged , , | Leave a comment

Enable VNC Server on Fedora 15

Install:
$ sudo yum install tigervnc-server

Configure:
$ sudo vi /etc/sysconfig/vncservers

VNCSERVERS=”1:huangys 2:root”
VNCSERVERARGS[1]=”-geometry 1024×768″
VNCSERVERARGS[2]=”-geometry 1024×768″

Set password(s) for user(s):
According to the above configuration, we need to set passwords for two users: huangys, root.
Logged in as huangys, then issue the command vncpasswd. Do same thing for user root.

Configure iptables:
If your Fedora has iptables started, you need to open TCP ports used by VNC daemons.

$ sudo vi /etc/sysconfig/iptables

add lines like the following:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 5901 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 5902 -j ACCEPT

Then restart iptables.

Start:
$ sudo service vncserver start

Set to auto-start:
$ sudo chkconfig vncserver on

You can use any VNC client to connect your_fedora_ip:1 as user huangys, connect your_fedora_ip:2 as user root.

<EOF>

Posted in Linux | Tagged , | 1 Comment

Using KVM and libvirt for Virtualization on Ubuntu 10.10

The version of libvirt in Ubuntu 10.10 repository is 0.8.3, it has some known stability issues which are not acceptable for production use. So I have to install a newer libvirt from compiling source. Since the version of qemu in Ubuntu 10.10 repository is 0.12.5, I’m going to use libvirt 0.8.7 which is the newest version working with qemu 0.12.x series. (Since 0.8.8 libvirt requires qemu 0.14)

1. libvirt

Prepare compile environment:

$ sudo apt-get install libgnutls-dev libdevmapper-dev libxml2-dev python python-dev libhal-dev hal libudev-dev libpciaccess-dev libssh2-1-dev

Get tarball:

$ wget http://libvirt.org/sources/libvirt-0.8.7.tar.gz

Compile and install:

$ tar zxvf libvirt-0.8.7.tar.gz
$ cd libvirt-0.8.7
$ ./configure --with-qemu --with-yajl --with-libxml=/usr --with-python --with-udev --with-hal --without-openvz --without-vmware --without-xen --without-xen-inotify --without-xenapi --without-vbox --without-lxc --without-lxc --without-esx --without-selinux
$ make
$ sudo make install

Update LD:
$ sudo ldconfig

Enable IP forwarding:
$ sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1

Start libvirtd:

$ sudo libvirtd &

2. virtinst

virt-install is a handful tool for creating VM. It is an open-source tool from Red Hat, written in Python.

$ sudo apt-get install python-urlgrabber
$ wget http://virt-manager.et.redhat.com/download/sources/virtinst/virtinst-0.500.6.tar.gz
$ tar zxvf virtinst-0.500.6.tar.gz
$ cd virtinst-0.500.6
$ sudo python setup.py install

3. virt-manager

$ sudo apt-get install intltool python-gtk-vnc
$ wget http://virt-manager.et.redhat.com/download/sources/virt-manager/virt-manager-0.8.7.tar.gz
$ tar zxvf virt-manager-0.8.7.tar.gz
$ cd virt-manager-0.8.7
$ ./configure
$ make
$ sudo make install

EOF

Posted in Cloud Computing | Tagged , , , | Leave a comment

Setting Up Android SDK on Ubuntu

1. 下载 SDK

你可以从 http://developer.android.com/sdk/ 上找到最新的 SDK。
你可能需要翻墙,因为 developer.android.com 被墙了。

$ wget http://dl.google.com/android/android-sdk_r08-linux_86.tgz
$ tar zxvf android-sdk_r08-linux_86.tgz

2. 安装 Platform tools

$ cd android-sdk-linux_86
$ tools/android

这时会出现一个图形界面的 Android SDK and AVD Manager,在 Available packages 里选择安装 Android SDK Platform-tools

3. 连接手机

首先在手机上打开 设置 -> 应用程序 -> 开发,确认选中了 USB 调试

接着使用 USB 线把手机连接到电脑。

然后启动 adb server:
$ sudo platform-tools/adb start-server

注:必须要使用 root 权限启动 adb server,否则会没有权限操作手机。

附:停止 adb server:
$ sudo platform-tools/adb kill-server

然后就可以使用 adb 来操作手机了。
键入 adb help 查看各种详细用法。

Posted in Android | Tagged , | Leave a comment

Getting Started with HBase Fully-Distributed

本文描述如何安装配置 HBase 集群,并使用一个外置的 ZooKeeper 集群。

使用的软件版本:
CentOS 5.5, Sun JDK 1.6.0_22, ZooKeeper 3.2.2, Hadoop 0.20.2, HBase 0.20.6.

1. 操作系统准备

本文的实验环境共用到了三台机器,分别为:
hmc1.yunsong.net: 10.10.30.221
hmc2.yunsong.net: 10.10.30.222
hmc3.yunsong.net: 10.10.30.223

三台机器上运行的组件分配:
hmc1: zookeeper, hadoop namenode/jobtracker, hbase master
hmc2: zookeeper, hadoop datanode/tasktracker, hbase regionserver
hmc3: zookeeper, hadoop datanode/tasktracker, hbase regionserver

说明:本文只是一个实验环境。在生产环境中,推荐使用单独的机器运行 ZooKeeper 服务,不要把它与 Hadoop、HBase 的组件混在同台机器上运行。

每台机器安装一个最基本的 CentOS 就可以了,并:

  • 禁用 firewall、SELinux、IPv6,以及无必要的服务
  • 配置 /etc/hosts 或者 DNS,使得各台机器的 hostname 和 IP 地址可以解析
  • 同步各台机器的时间,使之保持一致
  • 配置 RSA keypair,使得各台机器间相互 SSH 无密码要求

2. 约定

当然可以使用 root 用户来运行所有服务,不过通常情况下应该使用一个普通用户来运行这些服务。本文的实验环境中,在每台机器上都有一个相同帐号,用户名是 huangys,宿主目录为 /home/huangys

部署目录结构为:

Sun JDK 安装在 /opt/sunjdk1.6.0_22
ZooKeeper 安装在 /home/huangys/zookeeper-3.2.2
Hadoop 安装在 /home/huangys/hadoop-0.20.2
HBase 安装在 /home/huangys/hbase-0.20.6

相关数据目录为:

ZooKeeper data 位于 /var/zookeeper/data
                 datalog 位于 /var/zookeeper/datalog

Hadoop 默认情况下将数据写在 /tmp 目录下,对于生产环境,建议指定到其他更安全可靠的目录。

3. ZooKeeper

建立数据目录:
# mkdir -p /var/zookeeper/{data,datalog}

修改权属(如有需要)
# chown -Rc huangys.huangys /var/zookeeper

解包:
$ tar zxvf zookeeper-3.2.2.tar.gz

指定 Java 环境:
$ cd zookeeper-3.2.2/conf
$ vi java.env

JAVA_HOME=/opt/sunjdk1.6.0_22
PATH=$PATH:$JAVA_HOME/bin
JVMFLAGS=-Xmx384M

配置:
$ vi zoo.cfg (确保有以下项)

maxClientCnxns=100
dataDir=/var/zookeeper/data
dataLogDir=/var/zookeeper/datalog
clientPort=2181
server.1=hmc1.yunsong.net:2888:3888
server.2=hmc2.yunsong.net:2888:3888
server.3=hmc3.yunsong.net:2888:3888

在每台机器上建立一个文件,文件名为 myid,内容是 zoo.cfg 中定义的 server 序号(如上的 1、2、3),存放于 /var/zookeeper/data 中:
$ cd /var/zookeeper/data
$ echo 1 > myid (在 hmc1 上)
$ echo 2 > myid (在 hmc2 上)
$ echo 3 > myid (在 hmc3 上)

启动:
$ bin/zkServer.sh start

停止:
$ bin/zkServer.sh stop

客户端连接并校验:
$ bin/zkCli.sh

4. Hadoop

解包:
$ tar zxvf hadoop-0.20.2.tar.gz

指明 Java 位置:
$ cd hadoop-0.20.2/conf
$ vi hadoop-env.sh (确保有以下项)

export JAVA_HOME=/opt/sunjdk1.6.0_22
export HADOOP_HEAPSIZE=1000
export HADOOP_SSH_OPTS=”-o StrickHostKeyChecking=no”
export HADOOP_PID_DIR=/var/run

指定主从节点:
$ vi masters

hmc1.yunsong.net

$ vi slaves

hmc2.yunsong.net
hmc3.yunsong.net

配置 core-site.xml:
$ vi core-site.xml

<property>
    <name>fs.default.name</name>
    <value>hdfs://hmc1.yunsong.net:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop</value>
</property>

配置 hdfs-site.xml:
$ vi hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
    <name>dfs.datanode.max.xcievers</name>
    <value>4096</value>
</property>

配置 mapred-site.xml:
$ vi mapred-site.xml

<property>
    <name>mapred.job.tracker</name>
    <value>hmc1.yunsong.net:9001</value>
</property>

注:
1,Hadoop 默认将数据写在 /tmp 目录下,可以如上在 core-site.xml 重定义其总目录,也可以在 hdfs-site.xml 和 mapred-site.xml 中重定义分别改变相关数据目录。
2,在生产环境中,为了保证数据的冗余和可靠,可以指定多个目录、且这多个目录位于不同的物理磁盘上。

格式化 namenode:
登录到主节点 hmc1 上,并执行以下指令
$ cd hadoop-0.20.2
$ bin/hadoop namenode -format

启动 Hadoop 集群:
登录到主节点 hmc1 上,并执行以下指令
$ cd hadoop-0.20.2
$ bin/start-all.sh

停止 Hadoop 集群:
登录到主节点 hmc1 上,并执行以下指令
$ cd hadoop-0.20.2
$ bin/stop-all.sh

检查服务运行状态:
DFS: http://hmc1.yunsong.net:50070
MapReduce: http://hmc1.yunsong.net:50030

5. HBase

解包:
$ tar zxvf hbase-0.20.6.tar.gz

设置环境:
$ cd hbase-0.20.6/conf
$ vi hbase-env.sh (确保有以下项)

export JAVA_HOME=/opt/sunjdk1.6.0_22
export HBASE_HOME=/home/huangys/hbase-0.20.6
export HBASE_HEAPSIZE=1000
export HBASE_SSH_OPTS=”-o StrictHostKeyChecking=no”
export HBASE_PID_DIR=/var/run
export HBASE_MANAGES_ZK=false

指定从节点:
$ vi regionservers

hmc2.yunsong.net
hmc3.yunsong.net

配置:
$ vi hbase-site.xml

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://hmc1.yunsong.net:9000/hbase</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <name>hbase.regionserver.handler.count</name>
    <value>50</value>
</property>
<property>
    <name>hbase.hregion.majorcompaction</name>
    <value>3600000</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>hmc1.yunsong.net,hmc2.yunsong.net,hmc3.yunsong.net</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>
<property>
    <name>zookeeper.session.timeout</name>
    <value>90000</value>
</property>
<property>
    <name>hbase.regionserver.restart.on.zk.expire</name>
    <value>true</value>
</property>
<property>
    <name>hbase.master.wait.on.regionservers.timeout</name>
    <value>10</value>
</property>

因为 HBase 集群模式运行在 HDFS 上,所以 HBase 也需要知道 HDFS 的配置。最简单的做法就是把 Hadoop 的 hdfs-site.xml 做个字符链接到 HBase 的配置目录下:
$ cd hbase-0.20.6/conf
$ ln -s ../../hadoop-0.20.2/conf/hdfs-site.xml .

启动:
登录到主节点 hmc1 上,并执行以下指令
$ cd hbase-0.20.6
$ bin/start-hbase.sh

停止:
登录到主节点 hmc1 上,并执行以下指令
$ cd hbase-0.20.6
$ bin/stop-hbase.sh

检查服务运行状态:
HBase: http://hmc1.yunsong.net:60010

Posted in Cloud Computing | Tagged , , | Leave a comment

Remote Desktop Access with NX

We connect to remote machines, whatever physical or virtual machines, through SSH in most cases, but occasionally we do need to live with graphical desktop. Yes, VNC is always used here, but.. urh.. VNC is too slow! NX is another option, and the most important thing is that NX is very fast! Fastest I’ve ever seen.

NX is a commercial product from NoMachine, but this company also provides a free edition which limits two connections simultaneously. There is an open source implementation of NX, NeatX, which is developed by Google.

It’s easy to install NeatX on Ubuntu 10.04:

$ sudo apt-add-repository ppa:freenx-team
$ sudo apt-get update
$ sudo apt-get install neatx-server

NX Clients

Several NX clients are available in the market, e.g., opennx, qtnx, and NoMachine’s NX Client, etc.. I tried and found that NX Client from NoMachine is the best one. It supports Windows, Mac OS X, Linux, and Solaris. Go its download page, and get your version.

Posted in Linux | Tagged , | 1 Comment

Google Storage for Developers 初印象

前天收到 Google Storage (GS) for Developers 的注册邀请,我都忘记我曾经提交过申请了,还好 Google 的排队系统记得 :-)   昨晚试用了一下,初印象就是一个类似 Amazon S3 的存储服务。很好,我正好需要一个类似 S3 的在线存储服务。

Google Storage for Developers is a RESTful service for storing and accessing your data on Google’s infrastructure.

简单地说,就是你可以把数据存放在 Google 的云计算基础设施里,并使用 Google 或者第三方提供的一系列 services, APIs, tools 来访问和操作你的数据。

目前可用的工具

Developer Keys

第一次使用 GSUtil 时,会要求提供 Access Key 和 Secret Key。这对 Keys 可以通过 Key Management tool 来创建。

使用 GSUtil

创建 bucket
$ gsutil mb gs://musics
注意遵循 bucket 命名规则

上传对象到 bucket
$ gsutil cp *.mp3 gs://musics
对象通常就是文件夹和文件。

列出 buckets
$ gsutil ls

列出某 bucket 中的对象
$ gsutil ls gs://musics

移动对象
$ gsutil mv gs://musics/*.mp3 gs://newplace/

重命名
$ gsutil mv gs://musics/xyz.mp3 gs://musics/abc.mp3

下载对象到本地
$ gsutil cp gs://musics/*.mp3 file://MyMusics/

删除对象
$ gsutil rm gs://musics/xyz.mp3

删除 bucket
$ gsutil rb gs://musics

开发

如果你需要开发自己的应用使用 GS,目前 Google 提供了一个 Python library,是基于 Boto 改写,GSUtil 使用的也是它。

在 GSUtil 的安装目录下有一个 cloudreader,这是一个 sample app,可以运行在 Google App Engine (GAE) 中。GAE 和 GS 实在是绝佳的搭档。

Posted in Cloud Computing | Tagged , | 1 Comment