最近需要把国家自然基金项目赶快结题,所以导师也催的紧.正好自己也在研究网格和高性能计算,所以老板就把部署planet-lab环境的任务交给我.鄙人英语很烂,所以花了很长时间的去读指导书.最后基本上搞定,但是还有问题,希望网友们能给我点解答.(planet-lab一般供给高校做研究)
以hello_world为例,来详细介绍如何布置环境.
- Python 2.3 or higher
- 可以访问的目录,并且这个目录也可被web服务器访问
- 该web服务器需要装php4.1 or higher
- 在planet-lab的主页上注册一个email帐号,并且需要PI(管理员)分配给你一个slice(抽象的).
- 生成访问planet-lab上所有可用节点的公钥私钥.用$ssh-keygen -t rsa -f ~/.ssh/id_rsa 然后把.ssh/id_rsa.pub上传到planet-lab上你的账户的key中
- 把planet-lab上所有的节点加入到你的slice中,可以在浏览器的地址栏中输入:http://comon.cs.princeton.edu/status/tabulator.cgi?table=table_nodeviewshort&format=nameonly&persite=1&
select='resptime>0',把结果存储到nodes.txt中,假设所有的操作都在~/planetlab/hello_world目录下 - 把节点加入到你的slice中,可以在工作目录下输入python脚本$ python
>>> import xmlrpclib >>> api_server = / ... xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') >>> >>> auth = {} >>> auth['Username'] = "user" <-- 用你自己的email帐号替代 >>> auth['AuthString'] = "pass" <-- 用你自己的帐号密码替代 >>> auth['AuthMethod'] = "password" >>> >>> node_list = [line.strip() for line in open("nodes.txt")] >>> >>> api_server.AddSliceToNodes(auth, / ... "你的slice名称", node_list) - 安装部署作业的软件codeploy,具体可参看安装手册(跟一般安装软件步骤相同,注意:在最后可能运行软件时找不到multiquery命令的错误提示,这就要你给codeploy搞好环境变量)
- 如果你所安装的机器正好是一台web服务器,那你就可直接跳过这步;否则,你就要配置你这台机器,使它变成一台web服务器(安装apache,如果你不知道是否安装,你可用rpm -qa|grep httpd来查看)
- 在你的工作目录下建立一个可被写的文件phonehome.txt,并输入命令$ touch phonelog.txt
$ chmod 666 phonelog.txt 在你的可被web访问的目录下,存储一下文件phonehome.php phonelog.php 和phonehome.py文件 <? ### phonelog.php header('Content-type: application/vnd.google-earth.kml+xml'); header('Content-disposition: attachment; filename="hello_world.kml"'); echo '<?xml version="1.0" encoding="UTF-8"?>' . "/n"; echo '<kml xmlns="http://earth.google.com/kml/2.0">' ."/n"; echo '<Document>' . "/n"; $phonelog = file("phonelog.txt"); foreach ($phonelog as $entry) { $fields = explode("/t", trim($entry)); if ($fields[4] == "None" || $fields[5] == "None") continue; ?> <Placemark> <Snippet><?= htmlspecialchars($fields[3]) ?></Snippet> <name><?= htmlspecialchars($fields[1]) ?></name> <LookAt> <longitude><?= $fields[5] ?></longitude> <latitude><?= $fields[4] ?></latitude> <range>1000000</range> </LookAt> <visibility>1</visibility> <Point> <extrude>1</extrude> <altitudeMode>relativeToGround</altitudeMode> <coordinates> <?= $fields[5] . "," . $fields[4] ?>,0 </coordinates> </Point> </Placemark> <? } ?> </Document> </kml> <? ### phonehome.php if (isset($_GET['reset'])) { $phonelog = fopen("phonelog.txt", "w"); fclose($phonelog); echo "Cleared Phone Log."; die(); } if (!isset($_POST['site_id'])) die; $existinglog = file("phonelog.txt"); foreach ($existinglog as $entry) { $f = explode("/t", trim($entry)); if ($f[0] == $_POST['site_id']) die; } $phonelog = fopen("phonelog.txt", "a"); fwrite($phonelog, $_POST['site_id'] . "/t" . $_POST['name'] . "/t" . $_POST['login_base'] . "/t" . $_POST['url'] . "/t" . $_POST['latitude'] . "/t" . $_POST['longitude'] . "/n"); fclose($phonelog); ?> #!/usr/bin/python ### phonehome.py ### Hello World demonstration script phonehome_url = "http://www.your.url/~username/hw_demo/phonehome.php"<这个用你的可访问目录的url来代替,hw_demo就是这三个文件存放位置> import sys, urllib, xmlrpclib, socket api_server = xmlrpclib.ServerProxy('https://www.planet-lab.org/PLCAPI/') auth = {} auth['AuthMethod'] = "anonymous" auth['Role'] = "user" hostname = socket.gethostname() query = api_server.GetNodes(auth, {'hostname': hostname}, ['site_id']) site_id = query[0]['site_id'] site_info = api_server.GetSites(auth, {'site_id': site_id}, ['site_id', 'name', 'url', 'latitude', 'longitude', 'login_base']) site_info = urllib.urlencode(site_info[0]) urllib.urlopen(phonehome_url, site_info) - 最后来运行下./codeploy ~/public_html/helloworld /
> http://www.your.url/~username/helloworld/ hello(注意:这个要跟你的存放目录和具体url有关,不要盲目照写)
- 注意,在连接节点时,可能每连一个节点,它就要你输入passprase,很麻烦,我教你可以用下法: $eval `ssh-agent` $ ssh-add ~/.ssh/id_rsa
- 我的问题,我用ssh连接一个节点时,每次到了sending envirnment时就不走了,但我感觉应该连上了.请各位高手告诉我.
参考文献:
hello_world.pdf 来源于planet-lab网站
我现在知道我为什么ssh不能正确连到nodes上了,因为每个站点要两台机器连到planet-lab节点,才能工作.而我们机房里有一台机器不能被ping通,后来我看了planet-lab上的assistance tutorial才知道如何加入planet-lab里的种种步骤和软硬条件.还是挺麻烦的.
| | |