【www.myl5520.com--物理教案】
配置spice服务
篇一:linux,vmc
红帽的虚拟桌面:手把手教你安装配置SPICE服务 SPICE(独立计算环境简单协议)是红帽企业虚拟化桌面版的三大主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验。Linux下有三种方式配置SPICE服务器:命令行、virt-manager、直接修改配置文件。本文将分别介绍。
【51CTO独家特稿】SPICE(独立计算环境简单协议)是红帽企业虚拟化桌面版的三大主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验。它包含有3个组件:
SPICE Driver :SPICE驱动器 存在于每个虚拟桌面内的组件;
SPICE Device:SPICE设备 存在于红帽企业虚拟化Hypervisor内的组件;
SPICE Client:SPICE客户端 存在于终端设备上的组件,可以是瘦客户机或专用的PC,用于接入每个虚拟桌面。
这三个组件协作运行,确定处理图形的最高效位置,以能够最大程度改善用户体验并降低系统负荷。如果客户机足够强大,SPICE向客户机发送图形命令,并在客户机中对图形进行处理,显著减轻服务器的负荷。另一方面,如果客户机不够强大,SPICE在主机处理图形,从CPU的角度讲,图形处理并不需要太多费用。图-1是 SPICE三个组件示意图 。
图-1 SPICE三个组件
SPICE体系结构如图2 。
图2 SPICE体系结构
SPICE的工作原理是创建几个通用接口或“通道”,它们都高度抽象,所以能在各种平台上使用。通道主要包括六个: ?
?
?
?
?
? 主通道 显示通道 输入通道 鼠标控制通道 播放通道 记录通道
每个通道可以是一个单独的数据流。SPICE协议原为Qumranet公司的主要产品SolidICE所使用,提供了和真实PC相同的用户体验,通过spice我们可以直接在虚拟机里播放高清
Spice的未来的功能:
? 直接借助对DirectX和API来实现一个虚拟视频卡。加快CAD应用和多媒体应用。更快的切换与游戏画面直接绘制过程减少闪烁。
? 视频加速(DXVA)视频播放应用程序支持DXVA,如Windows媒体播放器,可以减少对客户端的CPU利用率。
?
? 3D加速 会更快地运行在一个虚拟的桌面,如OpenGL和3D应用程序, Windows Aero的支持,使用虚拟桌面时可以使用Windows Vista和7现在不可以。 可以动态地改变虚拟桌面分辨率。
?
? 兼容iPhone 和 ipad 通过智能手机,如iPhone 和 iPad等设备控制。 剪贴板共享你可以共享与虚拟桌面环境的剪贴板,数据将允许相互合作可用于无缝连接。
? 网络打印机共享:打印机被允许从网络访问,提高可用性。
Linux下有三种方式配置SPICE服务器:命令行、virt-manager、直接修改配置文件。下面分别介绍。
CentOS 6、RHEL 6安装配置SPICE服务器的方法
这里是直接修改配置文件方式,首先安装软件包:
#yum -y install spice-server
首先建立一个普通名称是web的虚拟机,可以使用virt-manager虚拟机管理工具和命令行两种方法。
下面编辑虚拟机文件添加spice参数: ~# virsh edit web
<domain type='kvm'>
<name>
<uuid>93702ee2-f5fc-8e29-18f5-7098b7f1afa0</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='rhel6.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/var/kvm/images/
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:bc:8f:f3'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
IVM配置操作手册
篇二:linux,vmc
IVM配置操作手册
V1.0
2013/7/5
文档密级:[ ]机密[√]内部公开 [ ]对外公开linux,vmc。
文档状态:[√]草案 [ ]正式发布 [ ]正在修订
修订记录
目录
第1章 IVM架构介绍 ..............................................................................................................................................1
1.1 IVM架构介绍 ..............................................................................................................................................1
1.2 IVM系统要求 ..............................................................................................................................................2
1.2.1 服务器硬件要求 .............................................................................................................................2
1.2.2 固件和操作系统要求......................................................................................................................2
1.3 IVM与HMC区别 ........................................................................................................................................3
第2章 IVM创建新分区 ..........................................................................................................................................6
第3章 分区操作系统安装前ISO镜像准备 ........................................................................................................ 12
第4章 常见维护操作 ............................................................................................................................................17
第1章 IVM架构介绍
1.1 IVM架构介绍
集成虚拟化管理器 (IVM) 是 PowerVM? 版硬件功能部件的一个组件,可用于管理虚拟 I/O 服务器和客户机逻辑分区。
集成虚拟化管理器 (IVM) 提供基于 Web 的系统管理界面和命令行界面,可使用它们来管理某些使用 IBM? 虚拟 I/O 服务器的 IBM Power Systems? 服务器和 IBM BladeCenter? 刀片服务器。在受管系统上,您可以创建逻辑分区、管理虚拟存储器和虚拟以太网以及查看服务器的相关服务信息。IVM 与虚拟 I/O 服务器包括在一起,但它仅在没有硬件管理控制台 (HMC) 的特定平台上可用。
如果将虚拟 I/O 服务器安装在受支持的服务器上,并且在安装虚拟 I/O 服务器时没有 HMC 连接至该服务器,那么会在该服务器上启用 IVM。然后可使用 IVM来通过虚拟 I/O 服务器配置受管系统。
IVM在VIOS中的架构图如下:
IVM会产生一个新的虚拟设备VMC(Virtual Management Channel
),用于与power hypervisor交互。
通过在VIOS上执行命令可以看到ibmvmc0设备。
$ lsdev -virtual | grep ibmvmc0
ibmvmc0 Available Virtual Management Channel
vmc正常运行需满足以下要求:
? 硬件虚拟化特征开启。
可以在ASMI或安装IVM完成后输入虚拟化激活码。
? 系统没有被HMC管理
如果被HMC管理过,需在ASMI中将系统重置到Manufacturing Default Configuration状态。
? 系统处于Manufacturing Default Configuration状态。
1.2 IVM系统要求
1.2.1 服务器硬件要求
1.2.2 固件和操作系统要求
? 固件要求:
Power5平台要求SF235以上的固件
Power6和Power7平台的所有固件均满足要求。
? 操作系统要求:
IBM AIX 5L? V5.3 or later
cloudFoundry源码学习
篇三:linux,vmc
cloud foundry之vmc代码解读
vmc其实是使用ruby来实现的一整套的cli命令转化为http restful请求的对应工具。 其代码位于:https://github.com/cloudfoundry/vmc
git clone回来代码之后,下面对代码进行半瓶水解析法解析。
入口
bin/vmc
引用了 $github/vmc/lib/cli
直接运行VMC::Cli::Runner.run
位于:lib/cli/runner.rb
看上去run会被执行。
进入到parse_command!方法中
以push为例:
when 'push'
usage('vmc push [appname] [--path PATH] [--url URL] [--instances N] [--mem] [--runtime RUNTIME] [--no-start]')
if @args.size == 1
set_cmd(:apps, :push, 1)
else
set_cmd(:apps, :push, 0)
end
进入到set_cmd中设置变量
module Cli
:Runner
module Command
:Apps
然后
cmd = VMC::Cli::Command.const_get(@namespace.to_s.capitalize)
cmd.new(@options).send(@action, *@args.collect(&:dup))
最终
VMC::Cli::Command::Apps.new().send(push)
(在ruby语法中,此处send方法是一个关键词,表示callMethod)
于是来到了lib/cli/commands/apps.rb
def push(appname=nil)
def do_push(appname=nil)
upload_app_bits(appname, @application)
def upload_app_bits(appname, path)
client.upload_app(appname, file, appcloud_resources)linux,vmc。
lib/vmc/clinet.rb
def upload_app
http_post(path(VMC::APPS_PATH, name, "application"), upload_data)
def http_post(path, body, content_type=nil)
def request(method, path, content_type = nil, payload = nil, headers = {})
perform_http_request
RestClient::Request.execute(req)
于是就没有了(RestClient是ruby中一个rest库)。
cloud foundry之cloud_controller代码解读
cloud_controller是其管理界面的http rest api入口。
补课 rails
Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,Rails 为你提供一个纯Ruby的开发环境。 习惯约定大于配置:
model类位置app/models/xxx.rb
controller位置app/controllers/xxx_controller.rc
help位置app/helpers/xxx_helpers.rb
view位置app/views/xxx
对应布局app/views/layouts/xxx.rhtml xxx.rxml
开始cloud_controller
https://github.com/cloudfoundry/cloud_controller
里面有两个项目,一个是cloud controller另一个是health_manager,今天要研究的是前者,下节说后者。
入口
bin/cloud_controller -> config/boot.rb
cloud_controller必需要求ruby1.9以上,因为其中有一个fiber需要ruby支持(传说中的Coroutine)。
如果没有配置 cloud_controller使用nginx,则会启用Thin去启动Rack。(Thin是ruby内置的network server,Rack: a Ruby Webserver Interface)
app
以vmc push举例:
vmc push的关键一请求:post apps
对应app/controllers/apps_controller.rb
def create
update_app_from_params(app)
检查各种参数并赋值
app.save! (app使用了ActiveRecord::Base,ActiveRecord是ruby用来做orm的东东,具体可以认为save!就是入库了)
stage_app(app)
去nats注册:result = client.stage(request, AppConfig[:staging][:max_staging_runtime]) 关键点
cloud_controller接收到请求记录到db:postgresql/sqlite(cloud_controller.yml中定义)。 请求同时发送到nats等进一步处理。
vmc push所做的事情
1.发一个POST到”apps”,创建一个app; (本文只做了这一步的分析)
2.发一个PUT到”apps/:name/application”,上传app;
3.发一个GET到”apps/:name/”,取得app状态,看看是否已经启动; cloud foundry之warden代码解读-part1
warden是其核心部分的资源管理容器,完成了各种资源分配的事情。
代码位置在: https://github.com/cloudfoundry/warden
这一部分也是我最想了解细节的地方,因为在一个paas平台中,资源的隔离才是最有价值的部分。
基础知识
rv = unshare(CLONE_NEWNS);
unshare这个调用,可以把挂载的文件系统设置成只在新的挂载命名空间(mount namespace)中可见。
execvp(argv[0], argv);
execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
shopt -s nullglob
设置shell环境变量nullglob的值为on,nullglob为on时对于通配符匹配时,若匹配不到时为空(相对应的为通配符本身)。
int stat(const char *restrict pathname, struct stat *restrict buf);
提供文件名字,获取文件对应属性。
build-essential软件包
作用是提供编译程序必须软件包的列表信息,也就是说编译程序有了这个软件包,它才知道 头文件在哪,才知道库函数在哪,还会下载依赖的软件包,最后才组成一个开发环境。 工具debootstraplinux,vmc。
可以用于在系统的某个目录中安装一套基本系统,这个基本系统除了一些配置项外,与ubuntu安装程序在安装的第一阶段安装的内容基本相同。这项功能有许多有趣的功能,例如,你可以从某个定制版本的ubuntu Live光盘上通过这个命令快速的在硬盘上安装ubuntu而不需要ubuntu的安装程序,也可以把创建在硬盘上的基本系统目录作为某些涉及系统安全性服务的chroot运行环境,通过chroot进入该目录并调试和运行一些可能修改系统配置的应用程序,作为定制小型系统模板等等。
aufs
一种文件格式,可以mount到目录,同时控制只读和读写。
overlayfs 另一种文件格式,在ubuntu 11.04后开始替代aufs作为官方livecd的文件格式。
cloud foundry之warden代码解读-part2
代码结构
|-- em-warden-client 基于eventmachine的client 依赖 warden-client与warden-protocol 通过 unix socket来通讯
|-- warden 巨复杂的warden实现,大部分是shell脚本+ruby,还有两个c实现。
|-- warden-client 客户端驱动,提供与warden的阻塞式通讯client。依赖warden-protocol。其
中的V1.rb对各自command进行解析之后的处理。这里有一个v1mode的概念, v1mode使用字符串,转为pb后与其他的一起使用protobuf。
`-- warden-protocol 依赖beefcake(protobuf library for Ruby)。protocol下有所有支持的pb生成格式。
小坑:ruby中的send方法
send其实就是动态地根据名字调用函数,传递后面的内容作为调用参数,api函数原型为: obj.send(symbol [, args...]) => obj
在V1.rb中,所能的convert_xxxx_request方法都是这样被调用到的。
专注warden实现
src下四个C程序:
|-- clone 用来快速复制一个环境 夹杂一堆的shell在其中运行
|-- iomux 分成两个部分:iomux-spawn把子进程的pid写到stdout来标示它已经做好准备接收连接。在尝试连接之后一直等待。iomux-link是用来根据pid重新link到其上去。 |-- oom 通过eventfd得到内存不够的通知
`-- repquota 报告quota使用情况
四个c程序将在编译后复制到root/linux/skeleton/bin中
其他目录:
|-- bin 下面有两个脚本文件,用来启动和进入命令行的
|-- config 下面有一个配置文件,定义了linux下的配置
|-- lib 所有的ruby代码
|-- root 各种shell脚本,操作cgroup之类的
启动warden
环境:
chenzhen@ubuntu-chenzhen:~/warden/warden$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
$cd warden/warden
$sudo bundle exec rake setup[config/linux.yml]
$sudo bundle exec rake warden:start[config/linux.yml]
$ctrl+z
$bg
$sudo bundle exec bin/warden-repl
$ping
...pong
调用过程:
bin/warden-repl >> lib/warden/repl.rb >> Warden::Client >> warden.sock >> lib/warden/server.rb << Warden::Server.run! << Rakefile
处理调用:
server.rb > ClientConnection > receive_request > process(request) > process_container_request(request, container) > base.rb > dispatch(request, &blk) > send(do_method, request, response, &blk) -> linux.rb > do_xxx > shell script
clone.c分析:
src/clone/clone.c: main ->
console.c: openpty ->
clone.c: daemonize ->
barrier.c: barrier_open ->
clone.c: run("./hook-parent-before-clone.sh"); ->
clone.c: parent_clone_child ->
clone.c: pid = clone(start, stack, flags, h); ->
clone.c: start() ->
console_mount(&h->console, "dev/console"); ->
pivot_root ->
clone.c: run("./hook-parent-after-clone.sh"); ->
clone.c: barrier_signal(&h->barrier_parent); -> clone.c: barrier_wait(&h->barrier_child);
cloud foundry之warden代码解读-part3
根据part2里提到的过程,本节以create命令为例进行追踪。
调用过程:
bin/warden-repl >> lib/warden/repl.rb >> Warden::Client >> warden.sock >> lib/warden/server.rb << Warden::Server.run! << Rakefile
处理调用:
server.rb > ClientConnection > receive_request > process(request) > process_container_request(request, container) > base.rb > dispatch(request, &blk) > send(do_method, request, response, &blk) -> linux.rb > do_xxx > shell script
过程放大
一、进入repl命令行
1.1 名词bundle:主要用于管理Ruby应用程序的依赖关系,并按照此依赖关系安装所需的Gems。当运行bundle install命令来安装Gems时,bundler会使用当前目录下的名为Gemfile的文件来处理依赖关系。
gem:就是ruby的软件包,一个gem就是一个ruby软件。
Gemfile:定义了各种依赖情况,bundler命令必须在存在此文件的目录下执行。 Gemfile.lock:记录本机目前所有依赖的gem命令和版本。
rake:编译工具,类似java的ant。
Rakefile:rake命令所定义的配置任务文件,类似ant.xml。
1.2 进入#sudo bundle exec bin/warden-repl
使用bundle exec来保证项目依赖的gem版本。在bin目录下有warden-repl脚本(ruby),这将会执行lib/warden/repl.rb文件,先会使用Warden:Client发起对warden.sock的连接,然后在start方法中对命令行模式的交互进行反馈。
二、输入create
当输入create时,repl.rb执行到process_line中的respond_to的判断:
2.1 respond_to?if respond_to? words[0].to_sym。。。
这种写法的意思是,当前对象中是否有方法名为words[0].to_sym变量值的方法。
2.2 createrepl.rb果断有这个create方法,然后talk_to_warden。就进入了client写的过程了。