SmartOS依赖images。images是包含在创建新zone或虚拟机时使用的磁盘或文件系统映像和元数据的模板。

images使用imgadm工具进行管理。 使用此工具,您可以:

查看和下载在公共映像服务器上可用的映像
     安装本地images或者import远程images
     列出,显示或打印有关images的详细信息
     销毁images

这里我们将讨论如何查找可用的images并开始使用它们。 然后我们将看看images是什么,以及如何创建自己的images。 最后,我们来看一下如何创建自己的私有image server。

Basics

Viewing & Downloading Public Images(查看和下载公开的images)

**注意,这些信息最近已经改变了,为了清楚和正确,这一段可能被编辑**

默认images服务器是https://images.joyent.com。 您可以使用imgadm sources -a <URL>命令来编辑源列表,如imgadm(1m)中所述。 使用命令imgadm更新,将导致本地缓存(/var/db/imgadm/imgcache.json)使用sources.list中找到的服务器上的可用映像进行更新。 一旦您的本地缓存更新,您可以列出所有可用的images使用imgadm avail:

# imgadm sources
https://images.joyent.com # imgadm avail | head -n 1 ; imgadm avail | tail
UUID NAME VERSION OS PUBLISHED
380539c4-3198-11e5-82c8-bf9eeee6a395 debian-7 20150724 linux 2015-07-24T00:09:14Z
ab3db4c0-31ac-11e5-8856-43e56a8e4285 centos-6 20150724 linux 2015-07-24T02:35:38Z
7459f182-31af-11e5-b23a-eb0fd8799c77 freebsd-10 20150724 bsd 2015-07-24T02:55:34Z
ead4ff68-320a-11e5-bd54-3749d04712df ubuntu-14.04 20150724 linux 2015-07-24T13:50:17Z
0764d78e-3472-11e5-8949-4f31abea4e05 minimal-32 15.2.0 smartos 2015-07-27T15:13:25Z
8ec06130-3472-11e5-bf91-ebc747dbae7e minimal-64 15.2.0 smartos 2015-07-27T15:17:13Z
1e5d6e28-3473-11e5-9e94-1fd77993b49f minimal-multiarch 15.2.0 smartos 2015-07-27T15:21:14Z
2bd52afe-3474-11e5-b07d-c7fb14b2c9e8 base-32 15.2.0 smartos 2015-07-27T15:28:46Z
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
9caff6c6-3476-11e5-9951-bf98c6cb8636 base-multiarch 15.2.0 smartos 2015-07-27T15:46:14Z # imgadm avail | grep base-64 | tail
c02a2044-c1bd-11e4-bd8c-dfc1db8b0182 base-64-lts 14.4.0 smartos 2015-03-03T15:55:44Z
24648664-e50c-11e4-be23-0349d0a5f3cf base-64-lts 14.4.1 smartos 2015-04-17T14:15:04Z
4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64 15.1.0 smartos 2015-04-24T08:52:36Z
b67492c2-055c-11e5-85d8-8b039ac981ec base-64-lts 14.4.2 smartos 2015-05-28T17:12:26Z
0edf00aa-0562-11e5-b92f-879647d45790 base-64 15.1.1 smartos 2015-05-28T17:50:41Z
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z 要下载这些images之一,如“base-64”,我们将使用图像UUID导入它:
# imgadm import 5c7d0d24-3475-11e5-8e67-27953a8b237e
Importing 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) from "https://images.joyent.com"
Gather image 5c7d0d24-3475-11e5-8e67-27953a8b237e ancestry
Must download and install 1 image (127.2 MiB)
Imported image 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) # imgadm list
UUID NAME VERSION OS PUBLISHED
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z

Advanced Topics

What exactly is an Image?

图像是创建新VM所需的数据和元数据。 “数据”是一个或多个压缩的ZFS数据集,将被克隆以创建新的VM。 “元数据”以JSON的形式描述了数据,并概述了使用它的机器的规范。
以下是两个文件的示例:

benr@magnolia:~/datasets$ ls -lh
total 41M
-rw-rw-r-- 1 benr benr 996 Sep 10 14:54 smartos-1.3.12.dsmanifest
-rw-rw-r-- 1 benr benr 41M Jun 10 2011 smartos-1.3.12.zfs.bz2

Image Manifests(image 清晰度)

以下是从公共存储库https://datasets.joyent.com/datasets/(为了清楚起见而添加重新排列和换行符)的示例清单。
您会注意到,当创建/更新/发布图像时,我们有属性可以识别图像(UUID,名称,版本,描述等),作者(creator_name,creator_uuid等),然后是一个标识ZFS的数组 数据集文件或文件,最后列出一些要求的数组。

  {
"uuid": "febaa412-6417-11e0-bc56-535d219f2590",
"name": "smartos",
"version": "1.3.12",
"description": "Base template to build other templates on", "os": "smartos",
"type": "zone-dataset",
"platform_type": "smartos",
"cloud_name": "sdc",
"urn": "sdc:sdc:smartos:1.3.12", "creator_name": "sdc",
"creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52", "created_at": "2011-04-11T08:45Z",
"updated_at": "2011-04-11T08:45Z",
"published_at": "2011-04-11T08:45Z", "files": [
{
"path": "smartos-1.3.12.zfs.bz2",
"sha1": "246c9ae158dc8f204643afdd6bd4d3c4aa35e733",
"size": 42016482,
"url": "https://datasets.joyent.com/datasets/febaa412-6417-11e0-bc56-535d219f2590/smartos-1.3.12.zfs.bz2"
}
],
"requirements": {
"networks": [
{
"name": "net0",
"description": "public"
}
]
}
}
创建自己的清单时,需要以下属性:

    uuid:image的UUID(使用在线UUID生成器)
    名称:image的名称(例如:“centos-6”)
    版本:image的版本(例如:“1.0.0”)
    描述:image的简短描述
    published_at:在映像服务器上发布日期的时间戳(不需要准确);以正确格式输出当前时间,使用命令:date +“%Y-%m-%dT%T.000Z”
    creator_uuid:image作者的UUID(如果您没有使用在线UUID生成器)
    creator_name:image作者的名称
    urn:用于以“cloud_name:creator_name:name:version”的形式描述image的特殊字符串;对于“cloud_name”,如果您不确定,我建议“smartos”,创建者的名字通常是您的组织。字符串不应包含空格。 (例如:“smartos:cuddletech:plan9:1.0.0”)
    类型:image的类型,KVM的“zvol”或zone的“zone-dataset”
    os:这个image的操作系统,需要。在撰写本文时,必须是smartos,linux,windows,bsd,illumos等。
    文件:一个或多个文件对象的数组,每个文件对象包含以下属性:
        路径:image数据文件的本地文件路径(压缩zfs转储)
        sha1:image数据文件的SHA1;获取SHA1哈希使用:digest -a sha1 <file>
        size:image数据文件的文件大小;获取使用:ls -l <​​file> 要求部分是推荐但不是当前需要,也不是强制执行。

Creating a Custom Zone Image

创建zone image的过程如下所示:
     根据需要创建和自定义zone
     清除日志等,并运行sm准备image以使机器image-ready(请记住阅读警告消息!)。
     暂停zone:vmadm stop <UUID>
     快照zone数据集:zfs快照区域/ <UUID> @image
     转储和压缩数据集:zfs send zones / <UUID> @image | gzip> image_name.zfs.gz
     创建如上所述的清单

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

数据集压缩
数据集必须被压缩。 您可以使用Xz,GZip或BZip2。 BZip2将提供比GZip更小的文件,但GZip压缩更快。 特别是对于大于10GB的数据集,强烈推荐使用GZip。

如果您希望使用image的所有CN都是20150402或更高版本,则Xz是一个选项。 XZ将提供更好的压缩,BZip2和通常接近GZip的速度。 Xz在release-20150402之前不可用。

Creating a Custom KVM Image

创建KVM image的过程如下所示:

根据需要创建和自定义KVM实例
     清除并准备实例
     停止VM:vmadm stop <UUID>
     快照disk0 ZVol:zfs snapshot zones/<UUID>-disk0@image
     转储和压缩数据集:zfs send zones / <UUID> -disk0 @ image | gzip> image_name.zvol.gz

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

Importing Images Locally

通常,映像从映像服务器下载,但是也可以使用以下方式导入映像:imgadm -m <manifest> -f <file>

过程如下所示:

# imgadm install -m smartos-1.3.12.dsmanifest -f smartos-1.3.12.zfs.bz2
febaa412-6417-11e0-bc56-535d219f2590 doesnt exist. continuing with install
febaa412-6417-11e0-bc56-535d219f2590 successfully installed
image febaa412-6417-11e0-bc56-535d219f2590 successfully imported

Serving Images

默认社区映像(以前的数据集)服务器是datasets.joyent.com。 您可以使用各种各样的image来使用和构建新的image。 但是,如果您想分发自己的image供他人使用? 这就是我们在这里讨论的。

How Image Server Work

image的功能非常简单。 当image服务器被添加到客户端sources.list并且它们进行imgadm更新时,该工具将针对源URL执行HTTP GET操作。 此get将返回一个JSON对象数组,这是每个可用映像的dsmanifest文件。 这是一个例子:

$ curl -ks https://datasets.joyent.com/datasets/
[
{
"name": "mongodb",
"version": "1.3.2",
"type": "zone-dataset",
"description": "64-bit MongoDB 2.0 SmartMachine Database Appliance with Quickbackup and Replica Sets",
"published_at": "2012-08-31T16:04:51.970Z",
"os": "smartos",
"uuid": "6bf31ce2-f384-11e1-a338-e39c2fe4ab59",
"creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"creator_name": "sdc",
"platform_type": "smartos",
"cloud_name": "sdc",
"urn": "sdc:sdc:mongodb:1.3.2",
"created_at": "2012-08-31T16:04:51.970Z",
"updated_at": "2012-08-31T16:04:51.970Z",
"files": [
{
"path": "mongodb-1.3.2.zfs.bz2",
"sha1": "dff4787bcc8cd115a2307d1e833a49d23a1ad9b0",
"size": 115202324,
"url": "https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2"
}
],
"requirements": {
"networks": [
{
"name": "net0",
....
当客户端使用imgadm import UUID下载图像时,默认情况下,客户端将以以下形式下载清单中指定的映像文件(ZFS数据集):<source_server_url> / <image_uuid> / <file_path>。
所以在上面的例子中,下载的文件将是* https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2*。 您会注意到,清单中的文件包含一个URL,如果存在它将被使用,但不是必需的。 因此,image服务器的操作非常简单和直接。

Creating a Poor Man's Image Server

如上所述,“image”服务器所需的功能非常基本。 因此,我们可以通过以下方式模拟数据集服务器的基本功能:

在您的Web服务器上,为您的SmartOS映像服务器创建一个目录。 我们将在http://mysite.com上假设“images /”。
     将每个DS清单添加到index.html。 不要包含任何HTML! 我们只使用这个文件名,因为它是访问目录时发送的默认内容。 请记住,该文件包含一个清单对象数组,因此格式为:

[
{ manifest1... },
{ manifest2... }
]
对于每个image,使用图像UUID创建一个目录,即:“images / 6bf31ce2-f384-11e1-a338-e39c2fe4ab59”。
将image文件复制到UUID目录中
现在试试吧! “curl -ks http://mysite.com/images”应该返回你的对象。
将其添加到sources.list和imgadm更新以使用。
这里描述的解决方案不是优雅的,也不是最优的,但是从网络帐户提供图像的可行选项,它们不具有使用下面描述的更优雅的smartos-image-server的选项。

Using the smartos-image-server

由nshalman启动的社区image服务器项目可以在github:smartos-image-server上找到
服务器在Node.js中实现,并实现了服务image所需的基本功能。 这是推荐的服务image的方法。

												

Managing Images on smartos的更多相关文章

  1. Managing a node remotely by using the netapp SP

    Managing a node remotely by using the Service Processor The Service Processor (SP) is a remote manag ...

  2. Managing IIS Log File Storage

    Managing IIS Log File Storage   You can manage the amount of server disk space that Internet Informa ...

  3. Managing the Lifecycle of a Service

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  4. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  5. Managing Group Policy with PowerShell

    Overview In this article, I’ll talk about your options when it comes to managing Group Policy using ...

  6. ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档

    https://smartos.org/ http://dtrace.org/guide/chp-io.html http://blog.csdn.net/babyfacer/article/deta ...

  7. Managing Hierarchical Data in MySQL

    Managing Hierarchical Data in MySQL Introduction Most users at one time or another have dealt with h ...

  8. [Angular 2] Managing State in RxJS with StartWith and Scan

    The scan operator in RxJS is the main key to managing values and states in your stream. Scan behaves ...

  9. Managing linux Shell Jobs

    Managing Shell Jobs   When moving jobs between the foreground and background, it may be useful to ha ...

随机推荐

  1. PHP常用函数总结(二):

    //=================图像处理=================================== //=================会话机制================== ...

  2. 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明

    摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFac ...

  3. 关于启动tomcatINFO警告错误问题解决

    关于启动tomcatINFO警告错误问题解决: #apr 与 tomcat-native 提供更好的伸缩性.性能和集成到本地服务器技术.如果没有apr技术,启动tomcat 时出现如下提示:INFO: ...

  4. 关于wp数据备份

    差点忘记记录,之前一直用wp数据备份,但是一直发送邮件不成功,后来才发现,原来是因为发送的邮箱没有设置开通那个什么pop鬼的,不记得叫什么了,看下图. 开通这个服务,就可以正常接收wp的数据邮件备份了 ...

  5. 1011 World Cup Betting (20 分)

    1011 World Cup Betting (20 分) With the 2010 FIFA World Cup running, football fans the world over wer ...

  6. 利用python,简单的词语纠错

    利用python,编写一个简单的词语纠正修改器. 原文:http://norvig.com/spell-correct.html #!/usr/bin/env python # coding=utf- ...

  7. ubuntu solute two different terminals cmd

    sudo update-alternatives --config x-terminal-emulator select 1. gnome-xterminal

  8. dubbo 官方参考手册~备案(防止哪天阿里一生气把dubbo给删除了)

          首页  ||  下载  ||  用户指南  ||  开发者指南  ||  管理员指南  ||  培训文档  ||  常见问题解答  ||  发布记录  ||  发展路线  ||  社区 E ...

  9. IP地址与子网掩码

    IP地址 众所周知,为了确保通信时能相互识别,在internet上的每台主机都必须有一个唯一的标识,即主机的IP地址.IP协议就是根据IP地址来实现信息传递的. IP地址由32位(4字节)二进制数组成 ...

  10. Linux网络编程经典书籍推荐

    UNIX环境高级编程<高级unix环境编程><unix网络编程><深入理解计算机系统>比较好 =====================Linux网络编程经典书籍推 ...