Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2343592
  • 博文数量: 208
  • 博客积分: 7288
  • 博客等级: 少将
  • 技术积分: 45837
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-19 14:58
文章分类

全部博文(208)

文章存档

2017年(1)

2016年(1)

2015年(1)

2014年(31)

2013年(7)

2012年(34)

2011年(36)

2010年(24)

2009年(52)

2008年(3)

2007年(1)

2006年(17)

分类: 虚拟化

2014-05-07 11:40:52

云服务是通过两个文件进行发布的,一个是cspkg,包含所有程序代码,一个是cscfg,包含配置信息。如果要在云服务的虚拟机上安装软件或者拷贝文件,简单的做法是把要装的软件和文件打包在cspkg里面,然后在csdef里面定义启动脚本,进行软件的自动化安装或者文件拷贝。下面看一个简单的例子

比如我们要把一个test.dll文件拷贝到目标虚拟机的系统目录下,而不是仅仅放在Webrole/worker role的缺省目录下,那么我们需要这样做:

首先,把这个dll放到Azure Role的代码目录内,比如web role/worker role的根目录

查看文件属性,确保生成操作为“内容”

如果当前是workerrole,还需要将待拷贝的文件复制属性改为“较新则复制”。这会让该文件复制到bin目录下,而Bin目录会成为worker role的approot。而Web role则不需要修改,因为Web role的app root就是项目根目录


此时如果我们打包该项目,然后将输出的cspkg解压缩,可以发现该文件出现在了目标role的approot目录下

接下来,我们需要让Azure进行文件的自动拷贝。打开项目的csdef文件,找到相应Role的定义,添加段落,定义拷贝命令

  1. <WebRole name="GuestBook_WebRole" vmsize="Small">  
  2. ....  
  3. ....  
  4. ....  
  5.     <Startup>  
  6.       <Task commandLine="copy test.dll %windir%" executionContext="elevated" taskType="simple" />  
  7.     Startup>  
  8. WebRole>  
其中,executionContext是执行权限。如果是elevated,表示以管理员权限执行,如果是limited,则以普通用户权限执行

至此,我们再发布该应用,就会实现test.dll的自动拷贝。如果要安装应用程序,可以把startup定义里面的commandline换位应用的静默安装命令。一般的应用都支持静默安装,命令一般为 xxxx.exe /silent。具体参数可以通过xxxx.exe /?查询

有时候commandline没有这么简单,不能写到一行里面。此时最好单独创建一个setup.cmd脚本文件,将需要执行的命令写好。然后在startup的commandline里面写setup.cmd. 该脚本文件的放置方法跟前面test.dll相同。


由于每次发布都需要上传cspkg,显然cspkg不能太大。如果要打包的安装程序或者文件太大,那么不建议把他们和cspkg打包在一起,而是事先上传到Azure的Blob存储上,然后在startup脚本里面进行文件的下载

把文件进行事先上传很简单。那么怎么在startup脚本里面进行下载呢?我们需要一个工具进行文件的下载

将这里的压缩包()解压到本地Azure项目的目标Role根目录下,确保文件属性的生成操作为“内容”。如果是worker role,需要修改复制属性为“较新则复制”

这里包括几个文件,分别是Blob的客户端dll,下载和解压缩脚本等

然后,在role根目录下创建一个download.bat的文件,里面填写下载、解压缩和安装代码:

  1. cmd /c util\wash.cmd blob download "ImageMagick-6.8.0-vc9.zip" "ImageMagick-6.8.0-vc9.zip" phpsetup filestore "xxxxxxxxxx"  
  2. cscript /NoLogo util\unzip.vbs "ImageMagick-6.8.0-vc9.zip" .  
  3. copy ImageMagick-6.8.0-vc9\* "%ProgramFiles(x86)%\PHP\v5.3\"  
其中,第一行是进行文件的下载。"ImageMagick-6.8.0-vc9.zip"是文件名,phpsetup是container名,filestore是存储账号名,最后是存储的密钥
第二行是zip解压缩

第三行是文件拷贝


之后,修改startup的commandline为download.bat即可。在正式发布服务前,可在本地先手动执行下download.bat,看看能否正确下载安装


关于startup的详细说明,可以参考
更多
阅读(1177) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~