在 NetBSD 上安装和配置 Xen

到目前为止,VPSee 已经陆续介绍了:在 CentOS 上安装和配置 Xen在 Ubuntu 上安装和配置 Xen在 Debian 上安装和配置 Xen在 OpenSolaris 上安装和配置 Xen,加上这篇 “在 NetBSD 上安装和配置 Xen” 就完整了,这是我们目前所有应用在生产环境的 Xen 系统。有人可能会问为什么要用这么多种系统?管理起来不是更复杂吗?其实没想像的那么复杂,我们实验室应用的虚拟机生产环境和我们销售的 VPS 不同,因为可以不考虑成本,所以采用了昂贵的存储设备,虚拟机都是存储在专门的 iSCSI 存储系统上,Xen 服务器只不过是一个 node 用来连接和启动存储网络上的虚拟机镜像,所以使用什么系统做 node 不是很重要,事实上 NetBSD 是这几个系统里面最容易配置和安装的系统,没有 trouble shooting,没有 work around,安装即成功,非常的赞!以下操作在 NetBSD 5.0.2 上完成。

安装 Xen

在 NetBSD 上使用 pkg_add 来安装软件包,相当于 CentOS/Fedora 的 yum 和 Ubuntu/Debian 的 apt-get,如果在公司或者学校使用代理上网的话需要先配置代理服务器:

# vi .kshrc
...
PKG_PATH=http://ftp.us.netbsd.org/pub/pkgsrc/packages/NetBSD/ \
amd64/5.0.2_2010Q3/All

export HTTP_PROXY=http://username:[email protected]:3128/
export FTP_PROXY=http://username:[email protected]:3128/

安装 xen hypervisor 和 xen tools:

# pkg_add -v xenkernel33
# pkg_add -v python26
# pkg_add -v xentools33
# pkg_add -v e2fsprogs

在上面的步骤安装 xentools33 的是后屏幕会打印提示需要从 /usr/pkg/share/examples/rc.d/ 拷贝一些配置文件到 /etc/rc.d 以便开机启动后自动运行:

# cd /etc/rc.d
# cp /usr/pkg/share/examples/rc.d/xendomains .
# cp /usr/pkg/share/examples/rc.d/xend .
# cp /usr/pkg/share/examples/rc.d/xenbackendd .

# vi /etc/rc.conf
...
xend=yes
xenbackendd=yes
xendomains=yes

确定 xend 需要的 xen 设备存在(没有的话创建一个):

# cd /dev && sh MAKEDEV xen

把上面安装的 Xen Hypervisor (xen.gz) 拷贝到根目录下 /:

# cp /usr/pkg/xen3-kernel/xen.gz /

下载和安装 Xen dom0 kernel:

# cd /
# wget http://ftp.us.netbsd.org/pub/NetBSD/NetBSD-5.0.2/amd64/ \
binary/kernel/netbsd-XEN3_DOM0.gz
# gunzip netbsd-XEN3_DOM0.gz

配置 NetBSD 开机引导,比 Linux 的 Grub 和 LILO 都简单多了:

# vi /boot.cfg
...
menu=NetBSD/XEN:load /netbsd-XEN3_DOM0;multiboot /xen.gz dom0_mem=64M
installboot -v -o timeout=5 /dev/rwd0a /usr/mdec/bootxx_ffsv1

配置 bridge:

# vi /etc/ifconfig.bridge0
create
!brconfig $int add re0 up

重启系统,选择 NetBSD/Xen 内核登陆,登陆后用 xm 检查 xen 是否正常运行:

# shutdown -r now

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0    64     1     r-----     18.5

安装虚拟机

先做个连接,方便以后使用:

# ln -sf /usr/pkg/etc/xen/ xen

在 NetBSD 上没有 xen-create-image, virt-install 等工具,而且没有 lvm,文件系统又不同,所以要创建 Linux 虚拟机(domU)比较麻烦,这里 VPSee 直接从另外一台 Linux Xen 服务器上拷贝一个虚拟机镜像(模版)过来运行,只需要编辑 debian.cfg 配置文件就可以了:

# vi /etc/xen/debian.cfg
bootloader = "/usr/pkg/bin/pygrub"
memory = 128
name = "debian"
vif = [ 'bridge=bridge0' ]
disk = ['file:/home/vpsee/debian.img,sda1,w']
root = "/dev/sda1"
extra = "fastboot"
extra = "xencons=tty1"

启动和查看 debian 虚拟机:

# xm create debian.cfg

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0    64     1     r-----   4764.1
debian                                      10   128     1     ------      6.6

解决 INIT: Id “xvc0” respawning too fast 问题

有位也做 VPS 的同行网友前几天来信说他用 SolusVM 创建用 PyGrub 引导的 Debian VPS 时遇到如下问题,每隔几分钟这个消息就跳出来1次,只打印在控制台(console):

INIT: Id "xvc0" respawning too fast: disabled for 5 minutes

这条消息无害,不影响用户正常使用,因为用户一般是 ssh 登陆,甚至不会看到这条消息。tty 设备文件是用来让用户和系统打交道的(通过 ssh 或 console),通过 pygrub 使用自己内核启动的 VPS 如果没设置好 tty 就容易出现以上错误。解决办法很容易,进入 VPS(虚拟机)后在 /etc/inittab 注释掉 xvc0 一行、在 /etc/securetty 文件里加上 hvc0 一行(如果没有的话):

# vi /etc/inittab
hvc0:2345:respawn:/sbin/getty 38400 hvc0
#xvc0:2345:respawn:/sbin/getty 38400 xvc0

# vi /etc/securetty
# Standard hypervisor virtual console
hvc0

# Oldstyle Xen console
#xvc0

修改完毕后重载一下 inittab 就应该看不到那条烦人的错误提示了:

# telinit q

最近收到的邮件特别多,如果大家有技术问题欢迎直接发在博客上一起讨论,这样同样的问题只需要被解决和回复一次,而且也会帮助有类似问题的朋友通过搜索引擎找过来。我们一般会在有时间的时候回复,如果问题值得继续深入的话 VPSee 会抽时间写博客来详细解释。我们的 email 和即时聊天工具仅用做客户支持和商业合作,谢谢:)

在 Debian 上安装 Xen 虚拟机集群管理工具 Ganeti

随着 Xen 服务器的增多,管理起来会越来越麻烦,如果有一些集成化的辅助工具来统一管理所有的服务器、虚拟机以及集中分配计算资源将会很方便。不过 VPSee 一般都避免使用一些太智能的工具,智能化自动工具有时候太智能,而且很难理解,特别是遇到问题的时候很难排错,因为自动和智能掩盖了工具背后的原理和过程,不知道是工具错了还是自己用错了。市面上有一些结合虚拟技术面向云计算的 Xen/KVM 管理工具,比如 Eucalyptus, OpenNebula, OpenQRM 等用来统一部署和管理虚拟环境,Ganeti 虽然没有前面几个强大,也勉强算一员。Ganeti 最初是由 Google 瑞士苏黎世 office 的一小撮人开发的 Xen/KVM 虚拟机集群管理工具,用来管理内部一些由廉价计算机组成的虚拟服务器集群,廉价计算机集群是 Google 的特色之一

详细一点说,Ganeti 是一个基于 Xen 或 KVM 虚拟技术的虚拟集群环境管理工具,用来管理一堆运行 Xen 服务器的统一管理界面,这样创建、删除、启动、关闭、重装、查看、移植虚拟机就用不着逐个去某台 Xen 服务器上操作,整合了整个虚拟操作环境,统一管理所有硬盘、操作系统、内存等资源,简化了操作,显然 Ganeti 需要运行在 Xen/KVM 平台上。把 Ganeti, Xen/KVM, LVM, DRBD, RAID10 等几个技术整合起来可以架设一个云计算基础环境,配上一个基于 Web 的控制面板和计费系统就可以当作 “云 VPS” 拿来忽悠。

安装和配置基本系统

首先在每个 node(node1, node2, …)上都安装上最基本的 Debian 系统(Ganeti 官方推荐1个集群里的 node 数目不要超过40个),VPSee 建议在所有 node 上一致采用最小化安装并使用最简单的分区方式:使用 sda1 做 /(10GB),使用 sda2 做 swap(2GB),剩余的空间将会在下面的步骤用到。安装完后开始对每个 node 都做如下类似配置,以 node1 为例,每个 node 上都需要配置 /etc/hosts,Ganeti 就是靠这里的 hostname 来识别 node 的,所以这一步很重要,设置好 hostname 后用 hostname -f 测试一下是否正确:

# vi /etc/hosts

127.0.0.1       localhost.localdomain   localhost
172.16.39.10    cluster1.vpsee.com      cluster1
172.16.39.11	node1.vpsee.com node1
172.16.39.12	node2.vpsee.com node2
172.16.39.101   inst1.vpsee.com         inst1

# hostname -f
node1.vpsee.com

如果 node1 上的 hostname 不正确可以修正:

# vi /etc/hostname
node1.vpsee.com
# /etc/init.d/hostname.sh start

接下来需要给每个 node 配置一个静态 IP,需要注意的是 Ganeti 在默认 bridge 模式下会是用 xen-br0 这个名字,所以我们需要在每个 node 上建立这个 bridge:

# vi /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 172.16.39.11
    netmask 255.255.254.0
    network 172.16.38.0
    broadcast 172.16.39.255
    gateway 172.16.38.1
auto xen-br0
iface xen-br0 inet static
    address 172.16.39.11
    netmask 255.255.254.0
    network 172.16.38.0
    broadcast 172.16.39.255
    gateway 172.16.38.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0

需要注意的是,要对每个想加入 Ganeti 的 node 做相应的配置和调整,比如 IP,hostname 等。在 node2, node3, …, nodeN 上重复上面的步骤。

安装和配置 LVM

这一步骤也需要在每个 node 上重复。先检查分区,在 sda3 上分区,分区格式是 LVM,每个 node 上的这个区将被拿来做 Ganeti 的存储池(storage pool)用来存储 Xen 虚拟机镜像(要注意的是记得在安装 debian 的是后就留出大部分空间来做 sda3):

$ sudo fdisk -l
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1216     9764864   83  Linux
/dev/sda2            1216        1703     3906560   82  Linux swap / Solaris

$ sudo fdisk /dev/sda

n p 3 enter enter t 3 L 8e w

$ sudo fdisk -l
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1216     9764864   83  Linux
/dev/sda2            1216        1703     3906560   82  Linux swap / Solaris
/dev/sda3            1703       60801   474711584+  8e  Linux LVM

安装 LVM 工具包,并用 LVM 工具创建物理卷和 LVM 卷组:

# apt-get install lvm2

$ sudo pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

$ sudo vgcreate xenvg /dev/sda3
  Volume group "xenvg" successfully created

重启系统以便刚创建的 LVM 生效:

# shutdown -r now

安装和配置 Xen 系统

按照 “在 Debian 上安装 Xen” 的步骤安装 Xen:

# apt-get install xen-hypervisor-3.2-1-amd64 \
xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 \
xenstore-utils xenwatch xen-shell xen-tools

安装和配置 Ganeti

可以从 Ganeti 官方网站下载源代码编译安装,为了少给自己添麻烦避免一些未知的编译、安装错误,建议新手直接从 debian 源安装:

# apt-get install ganeti

开始使用 Ganeti

在给集群(cluster)增加结点(node)之前需要先初始化这个集群,指定谁是老大(master node)。所以首先用 gnt-cluster 初始化一个 node (node1),这个 node1 将成为 master node,登陆到 node1 上,在 node1 上执行以下操作:

# gnt-cluster init node1

# gnt-node list
Node            DTotal  DFree MTotal MNode MFree Pinst Sinst
node1.vpsee.com 454044 454044   3893  3686   128     0     0

有了 master node (node1) 后,这个 master node 就是老大,用来管理其他的 slave nodes (node2, node3, …, nodeN) ,所有操作都要在 master node 上执行。现在我们可以在这个集群中加入 node2:

# gnt-node add node2.vpsee.com

# gnt-node list
Node            DTotal  DFree MTotal MNode MFree Pinst Sinst
node1.vpsee.com 454044 454044   3893  3686   128     0     0
node2.vpsee.com  37440  37440   2035  1024   969     0     0

可以看到这个集群已经统一管理 node1, node2 以及 node1 和 node2 上的资源,比如内存、硬盘等。现在我们终于可以开始创建虚拟机了,我们只需要在 master node (node1) 上执行安装虚拟机的命令就可以自动部署到集群中:

# gnt-instance add -t plain -n node2.vpsee.com -o debootstrap -s 5g \
--swap-size 256 -m 256 --kernel /boot/vmlinuz-`uname -r` \
--ip 172.16.39.101 inst1.vpsee.com
* creating instance disks...
adding instance inst1.vpsee.com to cluster config
 - INFO: Waiting for instance inst1.vpsee.com to sync disks.
 - INFO: Instance inst1.vpsee.com's disks are in sync.
creating os for instance inst1.vpsee.com on node node2.vpsee.com
* running the instance OS create scripts...
...

要重装虚拟机的话,执行 reinstall:

# gnt-instance reinstall inst1.vpsee.com
This will reinstall the instance inst1.vpsee.com and remove all data.
Continue?
y/[n]/?: y
Running the instance OS create scripts...

查看正在运行的虚拟机(instance):

# gnt-instance list
Instance          OS          Primary_node      Status  Memory
inst1.vpsee.com debootstrap node1.vpsee.com running    256

Ganeti 结合 DRBD 后还可以实现冗余、备份、在不同 node 之间自由迁移等功能,比如一个 node 挂了另一个 node 自动接替,某个 node 负载太高把上面的一个或几个 instance(虚拟机)暂时或永久迁移到另一个 node 降低单一 node 的负载等,非常酷。更多参考资料、帮助文档和命令行参数解释请看 Ganeti 的官方文档

FeHosting:$6 512MB OpenVZ VPS

fehosting

FeHosting 提供 Scranton(美国)和 Manchester(英国)的服务器,域名是今年8月份注册的。最近 WHT 和 LowEndBox 上貌似3-5美元的超低价 VPS 特别多,比 bluehost 的虚拟主机(6.95美元每月)还便宜,有点不合理了,不管哪个行业如果没有利润还能坚持下去不跑路那他们一定是在做慈善,尤其是 VPS 和 Web Hosting 行业门槛低,进去容易跑路也容易。这家服务商的技术很值得怀疑,他们在 LowEndBox 上留言说他们可以安装 FreeBSD:

Hanh wrote:
Is possible a FreeBSD 32bit image for SolusVM?

November 6, 2010 @ 1:34 am | Reply
Michael wrote:
Hey Hanh, Yeah i could upload one. Can you email us at [email protected] with what one you would like. Have a great weekend!

估计他们还没有弄清楚 OpenVZ 是什么,FreeBSD 是不能安装在 OpenVZ 上的,FreeBSD 可以安装在 Xen PV 上,但是不够稳定,目前能稳定运行 FreeBSD 的只有 Xen HVM 和 KVM. 还没有完,VPSee 又在 WHT 上找到他们内部的一些矛盾,不知道事情真相不好说,不过 VPSee 建议远离这些说不清楚技术、说不清楚关系的服务商。他们说他们可以即时开通和 24×7 服务,根据 LowEndBox 上网友的留言他们只能在工作时间内开通和服务,显然不厚道。他们使用 SolusVM 控制面板,现在是用优惠码 20OFFVPS 可以永久8折,相当于只要4.8美元就可以拿到 512MB VPS,8.8美元就可以拿到 1GB VPS,价格很诱人。VPS 配置如下:

VZBronze VZSilver
512MB RAM 1024MB RAM
1024MB Burst 1596MB Burst
15GB 硬盘 25GB 硬盘
175GB 流量 275GB 流量
2 IPs 2 IPs
6美元 11美元

没有提供服务器硬件配置信息。

5ITE:$5 256MB OpenVZ VPS

5ite

5ITE Hosting Solutions 是今年7月刚创立的一家英国 VPS 服务商,运营在英国,数据中心在德国,租用的是 Hetzner 的服务器。他们的域名是2007年注册的,one man 老板 Andrew 其实从事的是 VoIP 方面的工作,hosting 是他的业余项目,Andrew 做过和托管过一些网站,技术方面应该比较熟练。使用优惠码 LowEndBox-Special 以后原价14.95美元的这款 VPS 只要5美元,$5 就可以买个 2GB burstable VPS 很实惠,问题是不知道他们介不介意长期 burst:),CPU 是分享的,没有限制频率。让 VPSee 感兴趣的是这类提供超大 burst RAM 的 OpenVZ 服务商是怎么定价和安排的,比如一个 16GB 的母鸡是按照 256MB guaranteed RAM 分呢(理论能分64个)还是按照 2GB burst RAM 分呢(只能分8个)?如何找到中间的最佳平衡点呢?即如何让利润最大并且保证每个 VPS 都和谐共处呢。要是承诺给客户 2GB burst,如果有8个用户同时都用到 2GB,那其他用户怎么办呢?VPS 配置如下:

256MB guaranteed RAM
2048MB burst RAM
20GB 硬盘
200GB 流量
5美元每月

服务器硬件配置信息:

Minimum of 24GB RAM per server, Quad-Core CPU servers as a minimum, 1 GBit OnBoard connectivity as standard, Eco-Friendly, Hosted on a redundant network.

我们 VPS 服务器的 uptime?

我们经常收到 VPS 客户询问的两个问题就是“你们的网络对中国大陆快吗?”,“你们的服务器稳定吗?”。第一个问题不好回答,取决于中美线路和当地中国电信/网通的心情以及 RP~~;对于第二个问题我们决定公布部分服务器的 uptime 以供大家参考和监督。

刚开始打算用 PHP 和 Javascript 写那种实时打印 uptime 的页面,每秒更新看上去会比较酷,不过客户更关心的可能是服务器在线的天数和长期的稳定。如果用 Python 写这个脚本,字符串处理部分会更方便一些,可惜这台 VPS 上没有 Python(也不打算装)。昨晚纠结了一下还是决定用 Bash 写个简单的脚本用来打印我们服务器 dom0 上的 uptime 时间,这个 uptime 代表这台服务器已经连续不断运行多长时间。按照我们服务器的 uptime,最长的一台服务器已经连续运行了150多天,绝大部分服务器都连续工作90天左右。216.108.x.x 是新服务器,上线刚9天,load 是 0;69.64.x.x 上个月机房出现电力故障,导致重启一次。参考这个表格的时候有些需要注意的地方:

  • 数据每天更新一次,因为每台服务器的系统时间不同(差别很大),所以使用 cron 检查的时候可能出现某台服务器统计天数已经加一而其他服务器统计天数没变的情况;
  • 数据统计在北京时间凌晨完成,所以 load average 一般很小;
  • 因为每天更新一次,所以 ping 和 load average 的数据在这里没有多大意义。

uptime on our servers

Debian 上 Xen 和 X 之间的 bug

上周五 VPSee 在一台新 PC 上安装 Debian 的时候遇到一堆问题,先是安装程序没有找到网卡,没有网卡就需要自己编译驱动,但是编译又需要一些编译包、头文件和库,没有网络就没法 apt-get(因为只下载了 cd1),所以不得不从另外一台机器上下载网卡驱动 e1000e-1.2.10.tar.gz(内核树里居然也没有发现这款网卡,需要从 Intel 官网下载)以及编译驱动所必须的软件包和依赖包。最后 dpkg -i 软件包到 Debian、编译驱动、modprobe 驱动到内核,终于找到网卡。好不容易配好了网络,开始装 X,配置 X Window 的时候居然没有找到鼠标,一查原因原来是 gpm 鼠标服务由于某种原因没起来。最后把 X Window 和窗口管理器装上又发现字体和渲染都很难看,然后又下载其他的字体更改 .fonts.conf. 好不容易可以用桌面了,却发现在 Debian 上安装完 Xen 后进入 Xen(2.6.26-1xen-amd64)内核启动 X Window 就报错:

$ uname -r
2.6.26-1-xen-amd64

$ tail /var/log/Xorg.0.log 
(==) intel(0): RGB weight 888
(==) intel(0): Default visual is TrueColor
(II) intel(0): Integrated Graphics Chipset: Intel(R) G33
(--) intel(0): Chipset: "G33"
(--) intel(0): Linear framebuffer at 0xC0000000
(--) intel(0): IO registers at addr 0xD0300000

Fatal server error:
xf86MapVidMem: Could not mmap framebuffer (0xd0300000,0x80000) (Invalid argument)

VPSee 发现只要用 Xen 内核启动就无法进入 X,但是用原来的内核启动就可以。Debian 用户组有人2008年就报告了这个 bug,原因是 Debian 自带的这个 Xen 内核 2.6.26-1-xen-amd64 在启动 X 调用 mmap () 的时候,CPU 和显卡之间作内存映射(MMIO)出错,导致 X Window 不能启动。这个 bug 居然到现在都没有解决,可能大家都用 Debian 做 Xen 服务器,很少拿 Debian 桌面和 Xen 一起用吧。目前最简单的解决办法是限制 dom0 的内存(小于 2GB 就可以):

# vi /boot/grub/menu.lst
...
kernel          /boot/xen-3.2-1-amd64.gz dom0_mem=1024mb
...

这个 bug 只存在使用共享显卡的机器上,如果使用独立显卡就不会有这个问题。

VPSColo:$5 256MB OpenVZ VPS

vpscolo

VPSColo 是 SolarVPS 旗下面向低端 unmanaged VPS 的一个子品牌,运营可能还是 SolarVPS 的人,他们还有一个子品牌是 JVDS,原先 JVDS 也是面向 unmanaged,现在改成 managed 的了。他们对这两个子品牌都采用相同的硬件和网络,区别可能就在服务方面了。VPSColo, SolarVPS 还和 Fortress ITX 有关系(Fortress ITX 还拥有一家独立服务器提供商 DedicatedNOW),hosting 行业够乱的了,业务被卖来卖去,域名也被转来转去,据 LowEndBox 爆料,JVDS 原先是 Rus Foster 的,后来卖给了 Fortress ITX,然后又卖给了 SolarVPS,现在 Rus Foster 还在同时运营两个我们熟悉的 ThurstVPS 和 GigeVPS,其中 GigeVPS 还是和 Jacob Wall 一起运营的,而 Jacob Wall 刚刚收购了 HostLatch. 是不是被搞糊涂了?不管怎么说,VPSColo 的团队已有多年的行业经验,碰到的问题和解决的问题应该也多一些,至少他们知道自己在做什么。他们的数据中心可选新泽西和洛杉矶,洛杉矶机房应该对中国大陆的更快一些,VPSee 推荐他们的洛杉矶机房。VPS 配置如下:

256MB guaranteed RAM
512MB burst RAM
10GB 硬盘
250GB 流量
SolusVM 控制面板
5美元每月

服务器硬件配置信息:

Our VPS nodes are powered by top quality Supermicro dual quad core Xeon processors with 16-32GB of RAM and LSI hardware RAID 10 disk arrays.

Ubuntu 10.04 上编译安装 Xen 4.0.1 后的 xend 启动问题

因为 Ubuntu 10.04 不再官方维护 Xen 软件包了(RedHat 6 也不再支持 Xen 了),所以以后要想在这两大平台上用到 Xen 的话就需要自己亲自下载 Xen 源代码编译安装(当然也可以用第三方源)。今天 VPSee 在一台 Ubuntu 10.04 服务器上升级 Xen 到 4.0.1 的时候遇到一个问题,按照 Ubuntu 9.10 上源码安装 Xen 上的步骤编译和安装都正常,启动 Xen 内核也没问题,最后启动 xend 的时候报错如下:

$ sudo /etc/init.d/xend start
Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in 
    from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in 
    from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
.Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in 
    from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
.Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in 
    from xen.xend.server import SrvDaemon

刚开始怀疑是 Python 版本问题,后来查了一下 /usr/sbin/xend 文件发现第36行:from xen.xend.server import SrvDaemon 在导入 SrvDaemon 就报错,xend 可能没有找到 xen tools,怀疑和安装路径有关。Ubuntu 上 Python 的默认安装在 /usr/lib/python2.6/ 下面,如果不设定 PYTHON_PREFIX_ARG 参数手动编译安装 xen tools 后也会默认安装到 /usr/lib/python2.6/,这样就出问题了,因为 xend 会默认从 /usr/local/lib/python2.6/dist-packages/ 找 script 和导入库,但是这时候 /usr/local/lib/python2.6/dist-packages/ 下面什么东西都没有。所以要改变 install-tools 的默认安装路径到 /usr/local/lib/python2.6/dist-packages/ 下,PYTHON_PREFIX_ARG 不带任何参数就可以了:

$ sudo make install-tools PYTHON_PREFIX_ARG=

最后检查一下是否能正常启动 xend:

$ sudo /etc/init.d/xend start
$ sudo xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3713     4     r-----      6.4

Mesh Potato Workshop

上周五开了一整天的 workshop,Mesh Potato 的几个主要开发人员都过来了,上午主要是几个 talk,一些 Mesh Potato 的背景、历史和未来计划,下午是一些技术演示和讨论。这个开发团队非常分散,技术大牛是一个来自德国的 woman,黄白的头发,一看就很 geek,Mesh Potato 硬件、OpenWrt kernel 和 mesh 协议都是由她开发的,很强悍。A2Billing 的主要作者是个西班牙的小帅哥,28岁左右,英语很流利但是口音很重,听得很费力,A2Billing 也是目前 Asterisk 上最好的 billing 工具,他给我们展示了新版本的 A2Billing,目前还没有发布,就从界面上来看比老版本的 A2Billing 简洁了很多。还有一位来自瑞典 Asterisk/VoIP 安全方面的高手给我们展示了一些基于 VoIP 方面的入侵、检测,他们实验室做了一个蜜罐用来收集来自全球的 VoIP 入侵资料,并像 Google 地球那样能闪烁提醒入侵来自哪里,结果是入侵扫描大多数来自中国:(,还有1个来自瑞典的 MM 介绍了基于 web 的 Mesh Potato 管理工具,主要是用户可用性方面的东西。项目老大是加拿大人,给我们演示了他们使用 Mesh Potato 的场景,他们利用 Google Map 开发了一个实时监测 Mesh Potato 的可视化工具,如果某个 Mesh Potato 到某个 Mesh Potato 之间的信号不好就会在地图上显示一条红线,如果信号好就是一条绿线,很酷的工具。最后是来自印度洋某岛国(没听懂那个国名)的两个技术人员给我们分享了他们应用100个 Mesh Potato 的经验,他们说他们国家电话费是1分钟1美元,上网费是1小时10美元,所以 Mesh Potato 能大大帮助他们减轻通信费用。

因为前几天提前拿到了样品,试玩了一下 Mesh Potato,所以整个 workshop 听起来比较轻松。下午他们架了几个 Mesh Potato 结点,并且演示了各种不同场景,比如带 wifi 的笔记本装上软件后也能加入这个 mesh 网络并充当 Mesh Potato 的功能,以后还会有 Android 版本推出,这样每个 Android 手机都是一个 Mesh Potato 结点,将会极大扩展 mesh 网络的应用空间。Mesh Potato 采用 B.A.T.M.A.N. (better approach to mobile ad-hoc networking) 协议。他们还开发了监测系统,能完整看到整个 mesh 网络、各个结点之间的路由、结点加入离开等各种状况,非常酷。发现高手们都有一个特点,能把复杂的东西用简单的语言解释清楚,我问到了一个 Mesh Potato 之间的路由问题,他们就解释的非常明白,一听就是那种有实战经验的人的讲解,非常易懂。这个 workshop 真是学到了不少好东西。

mesh potato workshop