在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像



FreeBSD 基础镜像现已登陆中国的 VM Depot! 对于青睐 BSD 而非 Linux 的开源爱好者来说,这无疑是个好消息。同时,随着该基础镜像的可用,我们期待很快看到更多来自社区的基于 FreeBSD 的开源镜像,从而更加充实现有的可用 Linux 镜像。

本教程将帮助您使用 VM Depot 镜像快速上手 Azure 平台上的 FreeBSD,具体操作包括:

  1. 使用基础镜像创建 FreeBSD 虚拟机
  2. 通过添加软件包来自定义虚拟机
  3. 将自定义镜像重新发布到 VM Depot

设置要求

  • Node.js
  • Microsoft Azure 订阅

更多详细信息,请阅读以下说明。若您已满足以上要求,请直接跳转至“在 Windows Azure 上创建 FreeBSD 虚拟机”部分。

Node.js 跨平台命令行工具

尽管大部分工作可以在 Azure 管理门户上进行,本例中我们还是使用跨平台的 node.js 命令行工具。本教程只涉及很少一部分命令行工具。更多信息,请查看跨平台 Azure 命令行工具使用文档。

如果您使用的是 Mac 或 Windows 系统,您可以使用下面提到的 Node 包管理器(NPM),或者选择您使用平台(Windows或Mac)自身的安装程序,然后直接跳转至下一节内容。若您倾向于使用 NPM,请继续阅读本节内容。

登录站点 node.js,点击“安装”按钮,依照安装向导的指示进行安装。

当 node.js 安装完成后,您需要打开命令提示符(Windows 系统下,需要以管理员身份打开),输入“npm install azure-cli –global”命令来安装命令行工具。

Azure 订阅

您需要具备有效的 Azure 订阅。若没有,请点击此处获取试用账号。

获取 Azure 订阅之后,您需要使用命令行工具(“azure login”)来登录此订阅。本教程直接导入了订阅证书,所以您在操作中无需登录。

在命令提示符下运行“azure account download –e AzureChinaCloud”命令。这时您的浏览器中会弹出一个网页,验证您的账号之后,就开始下载您的账号证书。保存这个证书文件,然后运行“azure account import [path]”命令,将账号详细信息导入命令行工具。

如果您的 ID 关联两个或两个以上的订阅,请确保正在使用正确的订阅。若想查看哪个订阅是当前有效的,请运行“azure account show”命令。

若想变更已选订阅,使用“azure account list”命令列出所有有效订阅,然后使用“azure account set [ACCOUNT]”命令设置一个有效订阅。

在 Windows Azure 上创建 FreeBSD 虚拟机

完成初始设置之后,您就可以在 Azure 上创建 FreeBSD 虚拟机。本教程中,我们使用的是 FreeBSD 镜像。实际上,VM Depot 上的任何镜像都可以使用同样的流程。

若想找到 VM Depot 上的 FreeBSD 镜像,在 VM Depot 网站搜索“FreeBSD”即可。

点击镜像说明右方的“部署脚本”链接,同意相关条款并选择部署区域之后,文本框中就会出现部署该镜像所需使用的命令。

复制这个命令到您的外壳程序,并将“DNS-PREFIX”替换为能您机器的 ID 前缀,如“mydnsprefix.cloudapp.net”。记得要使用您自己的用户名和密码。您也可以在命令中包含“--ssh”选项,以确保启动了 SSH 且端口 22 已打开。

有不少配置项可通过命令行进行设置。本教程中,我们将使用它们的默认设置。更多信息,请参考命令行工具文档。

示例中使用的命令是“azure vm create rgfreebsd3 -o vmdepot-36254-2-1 -l "West US" rgardler Pa$$Word123 –ssh”。您可以运行您自己的命令版本。

命令完成之后,虚拟机镜像就创建完成了。但是还需要稍等几分钟,它才能完成启动。您可以使用“azure vm list”命令来监控状态。当您的虚拟机状态变为“ReadyRole”时,就可以进行下一步操作了。

自定义您的 FreeBSD 虚拟机

现在,您有一台空白的纯 FreeBSD 虚拟机运行在 Microsoft Azure 上。您可以通过 SSH 连接到这台机器,执行您想做的操作。本教程中,我们将添加Jetty作为 Web 服务器和 javax.servlet 容器。

首先,您需要使用 SSH 登录到服务器,这时会使用到您在创建虚拟机时定义的用户名和密码。本例中,我们使用“ssh rgfreebsd3.cloudapp.net -l rgardler”命令登录。

若想使用 FreeBSD 包管理器安装 Jetty,只需运行“sudo pkg install jetty”命令。为了确保 Jetty 伴随虚拟机的开机而启动,要在 /etc/rc.conf 文件中添加‘jetty_enable="YES"’,并使用“sudo cp /usr/local/jetty/etc/jetty.xml /usr/local/etc/jetty.xml”命令复制默认的配置文件。

理想情况下,您应该重启虚拟机,测试是否设置成功。如果想节约时间,您也可以使用“sudo /usr/local/etc/rc.d/jetty start”命令手动启动 Jetty,然后使用“exit”命令退出虚拟机。

您需要确保外部设备可以接入您的新服务器。HTTP 流量一般通过端口 80 进行传输。默认情况下,它在您的虚拟机上处于关闭状态,您需要将它打开。打开端口的命令为“azure vm endpoint create rgfreebsd3 80 8080”(请确保您的机器名称正确)。这样就把公用端口 80 映射到了专用(虚拟机)端口 8080,后者是 Jetty 的默认端口。

现在,您可以访问创建虚拟机时定义的 URL(如 http://DNS_PREFIX.chinacloudapp.cn),以验证浏览器工作正常。如果一切正常,将会弹出 Jetty 的标准主页,如下图所示:

与 VM Depot 社区分享 FreeBSD 镜像

自定义 FreeBSD 镜像之后,让我们通过 VM Depot 与社区重新分享这个镜像。您希望每个人都能从您的工作中受益,不是吗?这时要注意,您在 VM Depot 上通过 Web 表单发布镜像之前,还需要完成一些准备步骤。

首先您需要取消虚拟机配置。这样做会停止 Azure Agent,清除 SSH 密钥和启动密码,并删除网络配置。为此,请再次通过 SSH 连接到虚拟机,运行“sudo waagent –deprovision”命令,然后使用“exit”命令退出虚拟机。

现在,使用命令行关闭虚拟机,并捕捉其镜像。关闭虚拟机的命令为“azure vm shutdown rgfreebsd3”。

捕捉已关闭虚拟机的镜像,我们可以使用“azure vm capture rgfreebsd3 freebsd_jetty --delete”命令。要注意,“freebsd_jetty”是您分配给镜像的名称,您可以随意命名。这里的“--delete”是必选项,它会删除当前已停止的虚拟机。这是因为,目前尚不支持重新配置已捕捉镜像的虚拟机。不过请放心,您可以根据捕捉的镜像重新创建并配置虚拟机。

现在,您已获得了一个可以创建新虚拟机的镜像。我建议您在此阶段不妨测试一下,以保证一切工作正常。当然,您也可以直接跳转到下面的发布阶段。

下面我们根据捕捉的镜像来创建一个新的虚拟机,使用的命令与我们之前根据社区镜像创建虚拟机的命令类似。唯一的区别是,我们不需要使用“-o”开关来识别社区镜像,而是使用附着在订阅上的镜像。这里使用的命令是“azure vm create rgfreebsd4 freebsd_jetty -l "West US" rgardler Pa$$Word345 --ssh”。一定要使用前面运行“capture”命令时定义的镜像名称,选择您自己的 DNS 前缀来替换“rgfreebsd4”,提供您自己的用户名和密码。

和之前一样,您需要打开一个合适的端点,以便在您的虚拟机上接入 Jetty。命令与之前在虚拟机上使用的命令一致(但要使用新的 DNS 前缀),如“azure vm endpoint create rgfreebsd4 80 8080”。完成这一步之后,您可以在浏览器中访问新的虚拟机(http://dns_prefix.chinacloudapp.cn)。同样,这时会弹出 Jetty 的默认主页,如下图所示:

发布到 VM Depot

要将镜像发布到 VM Depot,首先您要确保 VM Depot 应用程序可以读取该镜像。为此,必须将存储虚拟机镜像的 blob 设置为可公开访问。与求之前操作一致, 我们将使用命令行来完成。当然,您也可以通过 Azure 管理门户来实现这一要求。

操作之前,您必须知悉它存储在哪里。使用“azure vm image show freebsd_jetty”命令来查看该镜像的元数据。

 

为了实现 blob 的公开访问,您需要 blob 这个存储容器的密钥,可以使用“azure storage account keys list <storage-account-name>”命令获取。存储账号的名称可以从刚刚查看的元数据中获得,它是“MediaLink”URL 的第一部分。在上面的示例中,存储账号为“ajamepiblobs”。这里会显示主次两个密钥,使用其中任何一个都可以。

获取密钥之后,您可以运行“azure storage container set <container-name> -p Blob -a <storage-account-name> -k <key>”命令,设置对“公共 blob”的接入控制。Blob 这个容器的名称也包含在“MediaLink”的 URL 中,它是路径的第一部分。本例中,容器名称为“vm-images”。存储账号的名称与上一步中使用的相同,密钥也是您刚刚获取的那个。

现在 VM Depot 就能读取虚拟机镜像了,您可以轻松地将镜像发布到 VM Depot。

登录到 VM Depot,点击“发布”按钮。这时会弹出一个表单,如下图所示:

这个表单应当简单明了。有一项稍微复杂的是要求填写 VHD 的 URL。它应该是运行“azure vm image show freebsd_jetty”命令获取的“MediaLink”URL。

镜像在您选择的所有区域内进行复制,会花费几分钟的时间。相关的状态更新,您可在提交以上表单后弹出的网页上查看。有关提交流程的更多详细信息,请查看 VM Depot 帮助文档。复制完成之后,镜像就会出现在 VM Depot 上。这时,您就可以向大家宣布新的虚拟机镜像已正式发布了。

陈阳

技术推广师

微软开放技术(中国)

本文转载自: http://blog.csdn.net/leonchenzhy/article/details/41892245 

转载于:https://www.cnblogs.com/sesexxoo/p/6190927.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解套接字的形容词前缀:“面向连接”与“无连接”

以下内容源于C语言中文网资料的学习与整理&#xff0c;非本人原创&#xff0c;如有侵权请告知删除。 前言 在《网络套接字socket的简介》一文中提到&#xff0c;流格式套接字&#xff08;Stream Sockets&#xff09;就是“面向连接的套接字”&#xff0c;它基于 TCP 协议&…

文件IO——Linux系统如何管理文件

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 硬盘中的静态文件 文件平时以一种固定的形式存放在硬盘中&#xff0c;我们叫它静态文件。 一块硬盘中可以分为两大区域&#xff1a;一个是硬盘内容管理表&#xff0c;另一个是真正存储内容的区域。 …

java String类 常用函数

为什么80%的码农都做不了架构师&#xff1f;>>> 1. 获取 int indexOf(int c) int indexOf(int c, int start) char charAt(int index) 2.判断 判断是否包含一个字符串 boolean contains(CharSequence cs) indexOf() //也可以用来判断是否包含 判断是否有内容 boole…

设备驱动程序的简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、驱动的概念 设备驱动程序&#xff08;Device Driver&#xff09;&#xff0c;简称驱动程序、驱动&#xff08;Driver&#xff09;&#xff0c;指操作系统中用来操控硬件的代码。 驱动是硬件与操…

Android开发实践:掌握Camera的预览方向和拍照方向

Android的Camera相关应用开发中&#xff0c;有一个必须搞清楚的知识点&#xff0c;就是Camera的预览方向和拍照方向&#xff0c;本文就重点讨论一下这个问题。图像的Sensor方向&#xff1a;手机Camera的图像数据都是来自于摄像头硬件的图像传感器&#xff08;Image Sensor&…

SecureCRT显示乱码的解决办法

发现问题 在Ubuntu中编写代码&#xff0c;输出语句里带有中文&#xff0c;比如"printf("读出来的内容是&#xff1a;%s.\n", buf);"。使用交叉编译工具链编译后&#xff0c;将可执行程序转移至开发板系统运行&#xff0c;并使用SCRT来观测测试结果。此时发…

WCF数据契约

当使用DataMember时&#xff0c;和访问符无关&#xff0c;及时使用了private&#xff0c;成员都是可见的。相反如果使用static&#xff0c;为不可见。 上述的两个数据成员是等效的&#xff0c;如果是等效的话 数据成员的顺序也必须是相同的。 4.数据契约已知类型——使用KownTy…

spring mvc 配置解析之xml

2019独角兽企业重金招聘Python工程师标准>>> ##mvc.xml中可配置的元素## 既然是xml,当然是要遵循schema的规定. 那么schema文件在哪呢? 定位方法就是解开这个jar文件,找到META-INF/spring.schema文件,这是个文本文件,里面包含了namespace以及其对应的xsd文件的位置…

JDBC学习笔记——事务、存储过程以及批量处理

2019独角兽企业重金招聘Python工程师标准>>> 1、事务 1.1、事务的基本概念和使用示例 数据库事务&#xff0c;是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完整…

验证码识别笔记(二)

这是验证码识别的第二篇&#xff0c;先看一下样图吧&#xff0c;就是下面那张。 看到这张图片&#xff0c;直观上就知道比第一篇中的要简单&#xff0c;这个“简单”用语言来描述&#xff0c;可以得到下面的几条结论&#xff1a; 1. 图片中的字符边界比较清晰&#xff0c;并且单…

centos6.5下搭建oracle 11g

为什么80%的码农都做不了架构师&#xff1f;>>> 安装依赖 yum install binutils compat-libstdc-33 compat-libstdc-33.i686 \ elfutils-libelf elfutils-libelf-devel gcc gcc-c glibc glibc.i686 \ glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh…

JS 学习笔记--11---内置对象(Global/Math)

练习中使用的浏览器是IE10&#xff0c;如果各位朋友有不同意见或者遇到浏览器不兼容问题&#xff0c;希望指正 1、内置对象的定义&#xff1a;有ECMAScript实现提供的、不依赖与宿主环境的对象&#xff0c;在ECMAScript运行之前就已经创建好的对象就叫做内置对象。就是说&…

SQL Server 视图设计器

SQL Server 中经常需要写一些查询&#xff0c;关联好多张表&#xff0c;显示无数个列。如果使用视图设计器&#xff0c;可以大大提高效率&#xff0c;同是减少差错。1. 启动视图设计器为数据库“新建视图”&#xff0c;将启用视图设计器。2. 添加表在起始界面&#xff0c;将出现…

misc类设备驱动1——板载蜂鸣器驱动测试

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、驱动部分 1、前言 九鼎移植的内核已经提供了蜂鸣器驱动源码&#xff08;在SI中搜索关键字buzzer&#xff0c;发现出现有x210-buzzer.c文件&#xff1b;或者在make menuconfig界面搜索buzzer&am…

github和git@osc提交问题

为什么80%的码农都做不了架构师&#xff1f;>>> 今天想用gitosc push下测试下自己能否正常使用gitosc的git仓库的&#xff0c;公钥SSH 已经加好。 ssh -T gitgit.oschina.net 测试正常。 结果报错could not read Username for https://git.oschina.net: No such fi…

怎样跟踪来访用户?

某些监视方法是比较容易想到的&#xff0c;比如&#xff0c;当你登录网站的时候&#xff0c;它就可以知道你是谁了。但是这些网络监视系统是如何通过你的上网行为记录你的个人信息呢&#xff1f; 广告系统经常通过追踪用户行为的方法来建立用户信息库&#xff0c;以定位谁是目标…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

开发板——在X210开发板上进行裸机开发的流程

流程总结 本文以“LED流水灯”为例&#xff0c;说明在X210开发板上进行裸机开发的流程。 步骤一&#xff1a;搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统&#xff0c;并安装交叉编译工具链&#xff1b; 在win主机上安装dnw软件、九鼎烧写SD卡软件等内容。 步骤二&a…

zmail邮件系统安装手册 V2.0版本

2019独角兽企业重金招聘Python工程师标准>>> Tmail邮件系统安装手册 V2.0版本 1、系统环境 centos6.0以上&#xff0c;最小化安装(64位系统) 2、部署 1、删除自带的postfix、mysql、httpd # rpm -qa|grep postfix|xargs rpm -e --nodeps # rpm -qa|grep mysql|xargs…

Cassandra1.2文档学习(5)—— Snitch

参考资料&#xff1a;http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureSnitchesAbout_c.html#concept_ds_c34_fqf_fk 一个snitch&#xff08;告密者&#xff09;决定应当从哪个数据数据中心和机架写入和读取数据。…