android有处理鼠标动作的GestureDetector,使用起来也挺方便,几个常用事件你都可以找到接口接入处理:
单击、双击(比如双击放大)、滑动(比如翻页)
下面是简化的例子,参考并整合所得,来源参考页尾参考内容:
参考资料:
1 GestureDetector and GestureDetector.OnGestureListener
2 how to implement android double tap?
单击、双击(比如双击放大)、滑动(比如翻页)
下面是简化的例子,参考并整合所得,来源参考页尾参考内容:
package com.aslibra.test;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;
public class touchGesture extends Activity implements OnGestureListener {
private LinearLayout main;
private TextView viewA;
private GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureScanner = new GestureDetector(this);
gestureScanner.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener(){
public boolean onDoubleTap(MotionEvent e) {
viewA.setText("-" + "onDoubleTap" + "-");
//双击时产生一次
Log.v("test", "onDoubleTap");
return false;
}
public boolean onDoubleTapEvent(MotionEvent e) {
//双击时产生两次
Log.v("test", "onDoubleTapEvent");
return false;
}
public boolean onSingleTapConfirmed(MotionEvent e) {
viewA.setText("-" + "onSingleTapConfirmed" + "-");
//短快的点击算一次单击
Log.v("test", "onSingleTapConfirmed");
return false;
}
});
main = new LinearLayout(this);
main.setBackgroundColor(Color.GRAY);
main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
main.setOrientation(LinearLayout.VERTICAL);
viewA = new TextView(this);
viewA.setBackgroundColor(Color.YELLOW);
viewA.setTextColor(Color.BLACK);
viewA.setTextSize(16);
viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));
main.addView(viewA);
setContentView(main);
}
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
@Override
public boolean onDown(MotionEvent e) {
//viewA.setText("-" + "DOWN" + "-");
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);
Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
//viewA.setText("-" + "LONG PRESS" + "-");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);
Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onShowPress(MotionEvent e) {
//viewA.setText("-" + "SHOW PRESS" + "-");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.v("test", "onSingleTapUp");
//viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);
return true;
}
}
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.LinearLayout;
import android.widget.TextView;
public class touchGesture extends Activity implements OnGestureListener {
private LinearLayout main;
private TextView viewA;
private GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureScanner = new GestureDetector(this);
gestureScanner.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener(){
public boolean onDoubleTap(MotionEvent e) {
viewA.setText("-" + "onDoubleTap" + "-");
//双击时产生一次
Log.v("test", "onDoubleTap");
return false;
}
public boolean onDoubleTapEvent(MotionEvent e) {
//双击时产生两次
Log.v("test", "onDoubleTapEvent");
return false;
}
public boolean onSingleTapConfirmed(MotionEvent e) {
viewA.setText("-" + "onSingleTapConfirmed" + "-");
//短快的点击算一次单击
Log.v("test", "onSingleTapConfirmed");
return false;
}
});
main = new LinearLayout(this);
main.setBackgroundColor(Color.GRAY);
main.setLayoutParams(new LinearLayout.LayoutParams(320,480));
main.setOrientation(LinearLayout.VERTICAL);
viewA = new TextView(this);
viewA.setBackgroundColor(Color.YELLOW);
viewA.setTextColor(Color.BLACK);
viewA.setTextSize(16);
viewA.setLayoutParams(new LinearLayout.LayoutParams(320,50));
main.addView(viewA);
setContentView(main);
}
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
@Override
public boolean onDown(MotionEvent e) {
//viewA.setText("-" + "DOWN" + "-");
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//viewA.setText("-" + "FLING" + "- "+velocityX + "- "+velocityY);
Log.v("test", "onFling "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
//viewA.setText("-" + "LONG PRESS" + "-");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
//viewA.setText("-" + "SCROLL" + "- "+distanceX + "- "+distanceY);
Log.v("test", "onScroll "+e1.getX()+" "+e2.getX());
return true;
}
@Override
public void onShowPress(MotionEvent e) {
//viewA.setText("-" + "SHOW PRESS" + "-");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.v("test", "onSingleTapUp");
//viewA.setText("-" + "SINGLE TAP UP" + "-"+ i++);
return true;
}
}
参考资料:
1 GestureDetector and GestureDetector.OnGestureListener
2 how to implement android double tap?
因为要面对将近200人上网的管理,所以低级的路由器会比较麻烦,没有办法控制带宽,到时候就会带来很大的麻烦。高级路由器可能用不上那么好,那就可以折中考虑好一点的路由器,可以刷第三方固件的,比如刷tomato固件,可以方便的控制带宽的使用问题,相应的,按它支持的型号购买相应的路由器即可。
这里选择了Buffalo WHR-HP-G54-AP,无线效率会高一些,可以满足更多的人使用无线,距离也会更远。
刷固件按照官方的readme似乎总刷不上,可以考虑改名后,自己上传,可以参考以下做法:
成功的示例,关键把握网络刚好恢复的时候执行:
这里选择了Buffalo WHR-HP-G54-AP,无线效率会高一些,可以满足更多的人使用无线,距离也会更远。
刷固件按照官方的readme似乎总刷不上,可以考虑改名后,自己上传,可以参考以下做法:
引用
下载后的Tomato_1_22.7z 大小有2818K,用最新的winrar解压缩,里面有好几个文件,从其中的readme.htm有描述"tomato.trx is for the Buffalo WHR-G54S, WHR-HP-G54",实际我的WHR-HP-G54-AP和WHR-HP-G54硬件原理是差不多的,除了天线的区别,所以确定解压缩后中的文件"tomato.trx "就是我需要刷的固件的。下面开始刷固件:
下载Tomato的最新固件解压缩, 将tomato.trx 改为 tomato122.bin (有的教程说要改为bin文件,为了安全我把文件后缀改为.bin文件了) 放到C:\ 即C盘根目录下(为了后面)
将路由器恢复到原厂设置,具体就是通电状态下用一个东西顶住路由器下部的INIT按钮,至少30秒种, 建议2分钟。
用网线将电脑和路由器的LAN口连接,将电脑的IP地址手动设为固定IP地址,设为192.168.11.2,子网掩码为255.255.255.0,网关为192.168.11.1。请不要用无线来刷 Tomato,因为路由器是在启动过程中被刷新,但是这个启动过程中无线模块是不工作的。
从"开始"菜单→"运行"→键入"cmd",点击"确定"进入到命令行模式。
键入tftp命令:tftp -i 192.168.11.1 put C:\tomato122.bin 千万不要回车 。备注我的tomato122.bin放在C:\路径,如果放在其他路径,必须正确输入。否则后面步骤的回车后会提示tftp命令出错。
拔下路由器电源,确保电脑和路由器的网线连接好,然后把路由器电源插上。等电脑任务栏最右下角的网络连接图标(如果没有看到图标,必须在设置IP地址的时候设置在任务栏显示网络图标)从红叉变成正常连接的时候,在当前的命令行窗口 tftp -i 192.168.11.1 put C:\tomato122.bin 按键盘回车键 。
然后又过一段时间,会出现传送数据成功的字样。
如果你键入回车的时间晚了,在经过一段时间的等候,会给出一个Timeout occurred出错的提示。你只要重复6,7步就行,不会损坏路由器。
当出现传送成功字样后,切记一定要等待至少3分钟,路由器不能断电,也不要对路由器有所操作。
等待3分钟以后,将电脑的IP设为自动获取(DHCP)。电脑会获得一个192.168.1.XXX的地址,网关是192.168.1.1。
然后打开浏览器,http://192.168.1.1,回车,用户名:root 密码:admin。
下载Tomato的最新固件解压缩, 将tomato.trx 改为 tomato122.bin (有的教程说要改为bin文件,为了安全我把文件后缀改为.bin文件了) 放到C:\ 即C盘根目录下(为了后面)
将路由器恢复到原厂设置,具体就是通电状态下用一个东西顶住路由器下部的INIT按钮,至少30秒种, 建议2分钟。
用网线将电脑和路由器的LAN口连接,将电脑的IP地址手动设为固定IP地址,设为192.168.11.2,子网掩码为255.255.255.0,网关为192.168.11.1。请不要用无线来刷 Tomato,因为路由器是在启动过程中被刷新,但是这个启动过程中无线模块是不工作的。
从"开始"菜单→"运行"→键入"cmd",点击"确定"进入到命令行模式。
键入tftp命令:tftp -i 192.168.11.1 put C:\tomato122.bin 千万不要回车 。备注我的tomato122.bin放在C:\路径,如果放在其他路径,必须正确输入。否则后面步骤的回车后会提示tftp命令出错。
拔下路由器电源,确保电脑和路由器的网线连接好,然后把路由器电源插上。等电脑任务栏最右下角的网络连接图标(如果没有看到图标,必须在设置IP地址的时候设置在任务栏显示网络图标)从红叉变成正常连接的时候,在当前的命令行窗口 tftp -i 192.168.11.1 put C:\tomato122.bin 按键盘回车键 。
然后又过一段时间,会出现传送数据成功的字样。
如果你键入回车的时间晚了,在经过一段时间的等候,会给出一个Timeout occurred出错的提示。你只要重复6,7步就行,不会损坏路由器。
当出现传送成功字样后,切记一定要等待至少3分钟,路由器不能断电,也不要对路由器有所操作。
等待3分钟以后,将电脑的IP设为自动获取(DHCP)。电脑会获得一个192.168.1.XXX的地址,网关是192.168.1.1。
然后打开浏览器,http://192.168.1.1,回车,用户名:root 密码:admin。
成功的示例,关键把握网络刚好恢复的时候执行:
又搬回了一年前的小区,新屋子比原先的屋子好太多了,有了电视,有了网络,还有24小时热水,还有不用电卡,这个太人性化了,不用想着什么时候该充电卡了。。

乱哄哄的屋子,东西都还没有收拾,厅里的装修简单,但看起来还是不错的

星哥下厨做饭,这顿饭算酒席了吧

去超市逛了逛,买了一些生活用品,这个漂亮的杯子也被收入囊中
乱哄哄的屋子,东西都还没有收拾,厅里的装修简单,但看起来还是不错的
星哥下厨做饭,这顿饭算酒席了吧
去超市逛了逛,买了一些生活用品,这个漂亮的杯子也被收入囊中
本项目可以参考google代码工程:
http://code.google.com/p/cacti-memcached-template/
项目的起因:
1 想做memcached的监测
2 找到python版本的template,可是没法用,不太会python
3 修改为php版本的,原先直接调用memcache的模块,可发现监控服务器没有安装
4 再修改为socket方式访问memcached获得数据,这样兼容性很高,不需要监控服务器安装memcached的扩展
项目参考的知识:
1 python的template。
注:可能会和它有冲突,因为模板里的xml节点hash没有修改,所以估计两者不能同时导入到cacti里使用,以后可能的话,也许可以再更新
2 Memcached INFO 的 socket代码
其实socket脚本也很简单,可是既然有现成的,也就借用了,不修改其函数,修改代码适应了它,比如使用全局变量
注:未照顾多组memcached的情况,未照顾其它端口的情况,后面会做升级,可以使用其它端口号
3 官方的脚本编写方式
文件下载:
下载文件
安装指引:
1 导入template(Console -> Import Templates )
2 上传ss_get_memcached_stats.php到cacti的scripts目录
3 给设备添加一个图 (Create New Graphs)
4 选择你要监控的参数

5 添加即可,十分钟后应该就可以有图像,比如:

如图所示,使用了60M,但只有两个有效项目(注:可能有很多无效的数据)
问题反馈:
可以直接给我email, hqlulu#gmail.com
http://code.google.com/p/cacti-memcached-template/
项目的起因:
1 想做memcached的监测
2 找到python版本的template,可是没法用,不太会python
3 修改为php版本的,原先直接调用memcache的模块,可发现监控服务器没有安装
4 再修改为socket方式访问memcached获得数据,这样兼容性很高,不需要监控服务器安装memcached的扩展
项目参考的知识:
1 python的template。
注:可能会和它有冲突,因为模板里的xml节点hash没有修改,所以估计两者不能同时导入到cacti里使用,以后可能的话,也许可以再更新
2 Memcached INFO 的 socket代码
其实socket脚本也很简单,可是既然有现成的,也就借用了,不修改其函数,修改代码适应了它,比如使用全局变量
注:未照顾多组memcached的情况,未照顾其它端口的情况,后面会做升级,可以使用其它端口号
3 官方的脚本编写方式
文件下载:
下载文件 安装指引:
1 导入template(Console -> Import Templates )
2 上传ss_get_memcached_stats.php到cacti的scripts目录
3 给设备添加一个图 (Create New Graphs)
4 选择你要监控的参数
5 添加即可,十分钟后应该就可以有图像,比如:
如图所示,使用了60M,但只有两个有效项目(注:可能有很多无效的数据)
问题反馈:
可以直接给我email, hqlulu#gmail.com
什么是DHCP服务?
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。
安装和配置DHCP
以ubuntu为例,其余linux版本类似。
1 安装dhcp服务软件
2 修改服务配置
ubuntu下可以指定只监听哪个网卡:
vi /etc/default/dhcp3-server
3 编辑主配置文件:
4 启动服务
检查DHCP客户端都有哪些
你可以检查 /var/lib/dhcp3/dhcpd.leases 文件,知道当前的客户端,可这样不方便。
我用PHP写了一个脚本,方便查看客户端列表,大家可以参考:
源代码 source code - 演示地址 demo
参考阅读
1 http://baike.baidu.com/view/7992.htm
2 dhcpd.conf MAN配置手册
3 英文参考 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch14s10.html
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。
安装和配置DHCP
以ubuntu为例,其余linux版本类似。
1 安装dhcp服务软件
apt-get install dhcp3-server
2 修改服务配置
ubuntu下可以指定只监听哪个网卡:
vi /etc/default/dhcp3-server
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
3 编辑主配置文件:
root@aslibra:~# cat /etc/dhcp3/dhcpd.conf
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.253;
option domain-name-servers 192.168.1.1, 8.8.8.8;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 3600;
max-lease-time 36000;
}
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.253;
option domain-name-servers 192.168.1.1, 8.8.8.8;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 3600;
max-lease-time 36000;
}
4 启动服务
/etc/init.d/dhcp3-server start
检查DHCP客户端都有哪些
你可以检查 /var/lib/dhcp3/dhcpd.leases 文件,知道当前的客户端,可这样不方便。
我用PHP写了一个脚本,方便查看客户端列表,大家可以参考:
源代码 source code - 演示地址 demo
参考阅读
1 http://baike.baidu.com/view/7992.htm
2 dhcpd.conf MAN配置手册
3 英文参考 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch14s10.html
在PHP中,我习惯转换xml为数组,在android里面,我也喜欢这样,可以分配到map类型。
先看看示例数据:
我们可以用一个Map类型的变量保存最后的结果:
简单的分析一下:
取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()
这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型
根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可
最终得到类似php数组类型,可以自己遍历来用:
先看看示例数据:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<site id="65" url="http://www.aslibra.com" >阿权的书房</site>
<site id="5" url="http://www.google.com" >谷歌</site>
</list>
<list>
<site id="65" url="http://www.aslibra.com" >阿权的书房</site>
<site id="5" url="http://www.google.com" >谷歌</site>
</list>
我们可以用一个Map类型的变量保存最后的结果:
Map<Integer,Map<String,String>> sites = new HashMap<Integer,Map<String,String>>();
try{
String myurl = "http://www.aslibra.com/teach/android/sites.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
for(int j=0;j<mysite.getAttributes().getLength();j++){
sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
mysite.getAttributes().item(j).getNodeValue() );
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );
try{
String myurl = "http://www.aslibra.com/teach/android/sites.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
for(int j=0;j<mysite.getAttributes().getLength();j++){
sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
mysite.getAttributes().item(j).getNodeValue() );
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );
简单的分析一下:
取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()
这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型
<A B="C">D</A>
根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可
最终得到类似php数组类型,可以自己遍历来用:
Map<Integer,Map<String,String>> sites = XXXX(前面的处理返回值);
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
row = sites.get(i);
//比如row.get("url")
}
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
row = sites.get(i);
//比如row.get("url")
}
为什么要用虚拟机?
1 机器空闲,需要充分利用资源
2 运行的程序有危险性,需要用独立的机器处理,但又没有空闲机器
3 做一些测试性的操作
4 建立脱离机器配置的服务,容易迁移到另外的服务器,备份硬盘即可
有哪些虚拟机软件?
XEN使用半虛擬化的環境所具備的特色有:
安装XEN
安装相应的软件后,修改启动文件:
/boot/grub/menu.lst
把xen内核版本的作为默认启动项,比如 title CentOS (2.6.18-164.15.1.el5xen)
重启机器后,“uname -r” 检查是否内核带有xen后缀
安装虚拟机
按鸟哥的文章安装吧,其实没有那么麻烦,本地建立web服务,把centos的dvd光盘mount到某个目录,web可以访问即可。当然了,cd版本的按他的做吧。
1 机器空闲,需要充分利用资源
2 运行的程序有危险性,需要用独立的机器处理,但又没有空闲机器
3 做一些测试性的操作
4 建立脱离机器配置的服务,容易迁移到另外的服务器,备份硬盘即可
有哪些虚拟机软件?
引用
1 老牌子的 VMWare (http://www.vmware.com/)
2 已漸趨成熟的 Xen (http://www.xensource.com/)
3 後起之秀 KVM (Kernel based Virtual Machine, http://kvm.qumranet.com/kvmwiki)
4 酷!炫!有勁的 VirtualBox (http://www.virtualbox.org/)
2 已漸趨成熟的 Xen (http://www.xensource.com/)
3 後起之秀 KVM (Kernel based Virtual Machine, http://kvm.qumranet.com/kvmwiki)
4 酷!炫!有勁的 VirtualBox (http://www.virtualbox.org/)
XEN使用半虛擬化的環境所具備的特色有:
引用
虛擬機器的運作效率與實體機器的效能相當;
最多可支援到具有 32 顆以上 CPU 的主機環境;
支援 x86/32, x86/32 含 PAE 技術, 及 x86/64 的硬體平台環境;
良好的硬體驅動程式支援,幾乎支援所有的 Linux 裝置之驅動程式;
最多可支援到具有 32 顆以上 CPU 的主機環境;
支援 x86/32, x86/32 含 PAE 技術, 及 x86/64 的硬體平台環境;
良好的硬體驅動程式支援,幾乎支援所有的 Linux 裝置之驅動程式;
安装XEN
yum -y install kernel-xen
yum -y install xen xen-libs python-virtinst
yum -y install xen xen-libs python-virtinst
安装相应的软件后,修改启动文件:
/boot/grub/menu.lst
把xen内核版本的作为默认启动项,比如 title CentOS (2.6.18-164.15.1.el5xen)
重启机器后,“uname -r” 检查是否内核带有xen后缀
安装虚拟机
按鸟哥的文章安装吧,其实没有那么麻烦,本地建立web服务,把centos的dvd光盘mount到某个目录,web可以访问即可。当然了,cd版本的按他的做吧。






