qemu-guest-agent---介绍及安装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qemu-guest-agent---介绍及安装相关的知识,希望对你有一定的参考价值。

参考技术A qemu guest agent简称qga, 是在虚拟机中运行的守护进程,他可以管理应用程序,执行宿主机发出的命令。例如冻结或解冻文件系统,使系统进入挂起状态等。但是 guest agent(GA)并没有良好的安全保护,恶意的虚拟机可能发送虚假的回复

目前QEMU通过串口发布GA。可以尝试的允许应用程序通过qume监视器与 GA进行通讯,但是需要virtio串口提供支持.

使用GA需要创建特别的串口,名为 org.qemu.guest_agent.0. 换句话说,需要在domain xml中的<devices>下添加如下内容:

如果使用libvirt1.0.6或者更新的的版本,可以省略<source>元素的path=" "属性。libvirt会进行自动配置。

Libvirt 不提供直接使用guest agent的任何支持,如果您不介意使用libvirt-qemu,则可以使用virDomainQemuAgentCommand API(由virsh qemu-agent-command公开);但需要注意,这是不受支持的,对agent所做的任何改变都会影响libvi,并可能会导致libvirt行为的不确定性。
同时,guest agent可以由几个支持的libvirt API内部使用,通常通过传递标志来发送请求。 例如,virDomainShutdownFlags:

同样使用于重启API

在virsh中,用户可以选择关机或重启的方式通过 -mode acpi|agent:

如果用户正在创建快照,并希望在之前冻结并解冻文件系统,此时可通过为virDomainSnapshotCreate API指定VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE标志来完成,或者在virsh中设置:

警告:与任何监视器命令一样,GA命令可以无限期阻塞。Libvirt实现了一些基础性检测,以确定是否有qemu-ga实例在运行。 实际上,在每个有用的命令之前发出guest-sync命令。 如果它返回,则libvirt会认为guest agent已启动并正在运行,这时就会发送实际命令。 但是,guest agent可能会死亡或被终止。 guest-sync命令发出超时,如果命中guest agent则被认为不存在。

在某些情况下,用户可能希望通过domain的XML配置guest agent,而不希望libvirt连接guest agent 的socket。 因为仅当其virtio channel 名为org.qemu.guest_agent.0时libvirt才可以连接到guest agent,

然而,可通过xml改变目标的名字

如果更改名字,则需要告知qemu GA

仅需要一件事,之前提到过得,需要在domain 中配置串口,同时,虚拟机必须安装GA,幸运的是其已经封装在rpm中。通过如下指令可以进行安装

PHP介绍及安装

PHP介绍机安装

PHP 介绍

PHP(Hypertext Preprocessor,“超文本预处理器”)是一种通用开源脚本语言。主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)对于PHP 5.3.3之前的php来说,是一个补丁包 ,旨在将FastCGI进程管理整合进PHP包中。

相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab定时进行监控,而PHP-FPM则没有这种烦恼。

PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。

CGI协议与实现(原理讲解)

页面分类:

  • 静态页面 一般普通访问到的页面

  • 动态页面 用户可以和服务器进行交互页面

  • 执行动态页面,需要和服务器进行交互,使用后端语言进行开发

PHP 与Apache、Nginx的交互

LAMP 架构

LAMP 架构中,PHP 是以子模块嵌套在Apache中的。

  • 当请求的是静态资源的时候,httpd 服务直接从文件系统中读取文件返还客户端

  • 当请求的是动态资源的时候,httpd 服务会启用php解析器(CGI)去解析php请求,如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,最后将数据返回给PHP解析器(通常是HTML网页)

LNMP 架构

在LNMP架构中PHP是作为一个独立的服务存在的,这个服务叫做php-fpm。

  • Nginx 直接处理静态请求

  • Nginx 将动态请求转发给php-fpm处理。

LAMP和LNMP在使用和配置PHP的区别

  • Nginx 支持的并发更高,速度比Apache快

  • apache一般是把php当作自己的一个模块来启动;而nginx则是把http请求变量转发给php进程,即php独立进程,与Nginx通信,这种方式叫做fast-cgi运行方式,所以apache编译的php不能用于nginx

PHP 源码安装

配置参数说明:

  • --with :代表需要手动开启 可能需要加载第三方模块 第三方模块没有,就会error
  • --enable: 代表开启php的默认功能
  • --without: 关闭默认加载的模块
#l --prefix=/usr/local/php 							=>	指定安装目录
#l --with-config-file-path=/usr/local/php/etc 		=>	指定php.ini [PREFIX/lib] 的路径


#l --enable-fpm 					=>	启用 fpm SAPI 可执行文件的构建,即开启PHP-FPM
#l --with-fpm-user=www 				=>	设置 php-fpm 运行的用户,Nginx的运行用户
#l --with-fpm-group=www 			=>	设置 php-fpm 运行的组


#l --with-mysqli=mysqlnd 			=>	即是由PHP源码提供的mysql驱动连接代码,它的目的是代替旧的libmysql驱动									
#l --with-pdo-mysql=mysqlnd 
	说明:
		PHP 5.3开始已经不建议使用旧的libmysql驱动了, 而建议使用mysqlnd
	
#l --with-iconv-dir 
#l --with-freetype-dir 		=>	 包括对freetype字体库的支持 
#l --with-jpeg-dir 			=>	包括对jpeg图片的支持 
#l --with-png-dir  			=>	包括对png图片的支持 

#l --with-zlib  			=>	包括 zlib库的支持
#l --with-libxml-dir  			=>	包括libxml2库的支持 
#l --enable-xml  			=>	开启 xml 支持
#l --disable-rpath  			=>	关闭额外的运行库文件 
#l --enable-bcmath  			=>	包括图片大小调整,用到zabbix监控的时候用到了这个模块,提供高精度计算的支持,编译安装PHP时一般不会使用此配置项
#l --enable-shmop  			=>	启用 shmop 支持
#l --enable-sysvsem  			=>	启用 System V 信号量支持
#l --enable-inline-optimization  			=>	优化线程,是一种通过将函数调用替换为在编译时调用的函数的实际主体来优化程序的方法
#l --with-curl 					=>	包括 cURL 支持
#l --enable-mbregex  			=>	开启 多字节字符支持的正则表达式函数
#l --enable-mbstring  			=>	多字节,字符串的支持 
#l --enable-ftp  			=>	包括ftp的支持 
#l --with-gd  				=>	包括gd库的支持 
#l --with-openssl  			=>	openssl的支持,加密传输时用到的
#l --with-mhash  			=>	包括 mhash 算法支持
#l --enable-pcntl  			=>	启用 pcntl 支持(仅限 CLI/CGI)
#l --enable-sockets  			=>	包括 sockets 支持
#l --with-xmlrpc  			=>	包括xml-rpc的c语言 
#l --with-libzip  			=>	包括 libzip 库的支持
#l --enable-soap  			=>	启用 SOAP 支持
#l --without-pear  			=>	关闭pear扩展库
#l --with-gettext  			=>	   包括gnu 的gettext 支持,编码库用到 
#l --disable-fileinfo  			=>	禁用文件信息支持
#l --enable-maintainer-zts 			=>	启用线程安全 - 仅适用于代码维护者!!


--with 代表需要手动开启  可能需要加载第三方模块  第三方模块没有,就会error

--enable 代表开启php的默认功能

--without  关闭默认加载的模块

PHP 安装目录说明:

目录名称作用
binphp相关命令目录 php phpize、php-config在源码编译扩展时用
etc配置文件目录
includephp默认类库
libphp第三方扩展类库
phpman文档文件
sbinphp-fpm执行文件
varlog日志目录 run运行目录 保存pid文件

第一步:上传源码包解压,并安装依赖

# yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
# tar zxf php-7.2.12.tar.gz
# cd php-7.2.12

第二步:编译参数配置 + 编译安装

./configure --prefix=/usr/local/php \\
--with-config-file-path=/usr/local/php/etc \\
--enable-fpm \\
--with-fpm-user=www \\
--with-fpm-group=www \\
--with-mysqli=mysqlnd \\
--with-pdo-mysql=mysqlnd \\
--with-iconv-dir \\
--with-freetype-dir \\
--with-jpeg-dir \\
--with-png-dir \\
--with-zlib \\
--with-libxml-dir \\
--enable-xml \\
--disable-rpath \\
--enable-bcmath \\
--enable-shmop \\
--enable-sysvsem \\
--enable-inline-optimization \\
--with-curl \\
--enable-mbregex \\
--enable-mbstring \\
--enable-ftp \\
--with-gd \\
--with-openssl \\
--with-mhash \\
--enable-pcntl \\
--enable-sockets \\
--with-xmlrpc \\
--with-libzip \\
--enable-soap \\
--without-pear \\
--with-gettext \\
--disable-fileinfo \\
--enable-maintainer-zts


# make && makeinstall

第三步:让PHP配置文件生效

使用php-fpm进行管理php服务,有两个配置文件:

  • php.ini :默认php配置文件

  • php-fpm.conf :php-fpm相关的配置 (在.deafult 所在的配置文件下复制一份去掉default使它生效)

php 的默认文件也要复制过去
复制配置文件:

生效配置文件:

开启php-fpm相关的配置文件:
	# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
	# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

将php默认配置文件复制到安装目录/etc 下,并更名为php.ini:
	# cp /root/soft/php-7.2.12/php.ini-development /usr/local/php/etc/php.ini
		说明:
			将解压目录中的文件复制到...php/etc/

第四步:配置php-fpm 的服务脚本并启动

配置脚本在解压目录下

  • php-fpm 默认开启9000端口

CentOS 6下:

  • 将解压目录的init.d.php-fpm复制到/etc/init.d/并更名为php-fpm
# cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
		说明:
			php的服务脚本在解压目录下
	
# chmod +x /etc/init.d/php-fpm	
# chkconfig  php-fpm on		=>	添加php-fpm开机自启

CentOS 7下:

  • 将解压目录的php-fpm.service复制到/usr/lib/systemd/system/
# cp /root/soft/php-7.2.12/sapi/fpm/php-fpm.service /usr/lib/systemd/system/

# systemctl daemon-reload
# systemctl start php-fpm

第五步:添加环境变量**(方便php、phpize、phpconfig查找使用)

# echo 'export PATH=$PATH:/usr/local/php/bin' >> /etc/profile
# source /etc/profile

扩展:php命令

PHP 常用命令行外链

#l [root@lnmp sbin]# ./php-fpm 			=>	也开启php-rpm 服务

# php file.php		=>	直接运行php文件

# php 参数
	参数说明:
		php -m:显示编译到内核下的模块
		php -v:显示 php版本号
		php --ini:显示配置文件名
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于qemu-guest-agent---介绍及安装的主要内容,如果未能解决你的问题,请参考以下文章

Python之Pycharm安装及介绍

基于QMP实现对qemu虚拟机进行交互

OpenStack qemu-guest-agent 使用

利用qemu-guest-agent实现重置密码的功能(测试中)

前端构建工具gulpjs的使用介绍及技巧

fstab文件详细介绍及修复fstab实战安例