工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2010年12月的文章

GPL和LGPL的区别

什么是 GPL、LGPL 和 GFDL?它们和源代码以及商业销售之间的关系是什么?

GPL 是 GNU General Public License (GNU 通用公共许可证)的缩写形式;LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Public License (GNU 库通用公共许可证);GFDL 是 GNU Free Documentation License (GNU 自由文档许可证)的缩写形式。它们是自由软件(Free Software)的通用版权认证协议,由自由软件基金会(FSF)制定和发布。

基于 GPL 的软件允许商业化销售,但不允许封闭源代码。
如果您对遵循 GPL 的软件进行任何改动和/或再次开发并予以发布,则您的产品必须继承 GPL 协议,不允许封闭源代码。
基于 LGPL 的软件也允许商业化销售,但不允许封闭源代码。
如果您对遵循 LGPL 的软件进行任何改动和/或再次开发并予以发布,则您的产品必须继承 LGPL 协议,不允许封闭源代码。但是如果您的程序对遵循 LGPL 的软件进行任何连接、调用而不是包含,则允许封闭源代码。

-------

我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考。

BSD开源协议(original BSD license、FreeBSD license、Original BSD license)BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以"为所欲为",可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但"为所欲为"的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

 Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:需要给代码的用户一份Apache Licence如果你修改了代码,需要再被修改的文件中说明。在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL(GNU General Public License)我们很熟悉的Linux就是采用了GPL。GPL协议和BSD,ApacheLicence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。GPL协议的主要内容是只要在一个软件中使用("使用"指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的"传染性"。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL(GNU Lesser General Public License)LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品.

MIT(MIT)MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

history.back返回后表单数据丢失的解决办法

‍js使用history.back返回表单数据丢失的主要原因就是使用了session_start();的原因,该函数会强制当前页面不被缓存。

 

解决办法如下:

在你的 Session_start 函数后加入 header("Cache-control: private"); 注意在本行之前你的PHP程序不能有任何输出。

还有基于session的解决方法,在session_start前加上
session_cache_limiter('nocache');// 清空表单
session_cache_limiter('private'); //不清空表单,只在session生效期间
session_cache_limiter('public'); //不清空表单,如同没使用session一般


-----------

  1. session_cache_limiter('private,must-revalidate');  

 

Python代码加密中源码保护pyc文件'字节码'的描述

Python代码加密 源码保护--pyc文件'字节码'

关于Python代码加密这一Python的“特殊功能”在网上好像是没有更多的相关介绍,但是随着越来越多的商业人士对加入Python这一阵营,所以Python代码加密这一计算机语言就显得尤为重要。
内容概要:Python代码加密,源码保护,代码保护,pyc文件

关于python代码保护在网上好像一直没有很好的介绍,可能和PYTHON的设计初衷"开源"有关,但越来越多的兄弟写的加入PYTHON阵营,开发工具用途各异,在商业应用中:Python代码加密保护就变的重要了.
下面介绍一下发布PYC文件,做简单代码保护

PYC文件是什么?

pyc文件是python的二进制编译,pyc文件比py文件拥有更快的装载速度,执行速度没有区别。因为pyc文件是二进制文件,不是明文显示,利用这一特性,发布PYC文件隐藏源代码.

命令如下:

  1. python -c "import compileall; compileall.
    compile_dir('目录')" 

 

该命令可以为一个目录下的py文件生成pyc文件(包含子目录)在windows平台上的路径书写方式为

  1. ('C:/python26/pyc') 

 

下面符一完整命令: 将目录'C:/python26/pyc'下的所有PY文件 转为PYC文件

 

  1. ?[Copy to clipboard]Download test.py1  
  2. python -c "import compileall; compileall.
    compile_dir('C:/python26/pyc')"   
     

 

如果想实现真正的加密:Python代码加密,就要改PYTHON源码,做自己的加密模块了,这方面还没深入了解,不便多说.关于代码加密这块如哪位兄弟还有更好的方法,请多指教.

python freeze.py

wget http://svn.python.org/projects/python/trunk/Tools/freeze/freeze.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/hello.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/checkextensions.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/parsesetup.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/makeconfig.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/makefreeze.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/bkfile.py
wget http://svn.python.org/projects/python/trunk/Tools/freeze/makemakefile.py

 

python freeze.py hello.py

                 from config.c:18:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
make: *** [config.o] Error 1

 

yum -y install glibc-devel

install g++-multilib

 

-----------------

(.text+0x53c1): undefined reference to `PyEval_RestoreThread'
/usr/lib/python2.4/config/libpython2.4.a(posixmodule.o): In function `posix_getcwd':
(.text+0x53d3): undefined reference to `PyString_FromString'
/usr/lib/python2.4/config/libpython2.4.a(posixmodule.o): In function `posix_getcwd':
(.text+0x53f8): undefined reference to `__stack_chk_fail_local'
collect2: ld returned 1 exit status
make: *** [hello] Error 1

在32位机器上正常

-------------------------------

1. 把http://svn.python.org/projects/python/trunk/Tools/freeze/下面的文件下载到一个目录去,后面以其中的hello.py为例

下载:

wget http://svn.python.org/projects/python/trunk/Tools/freeze/
wget `cat index.html | grep li | awk -F\" '{print "http://svn.python.org/projects/python/trunk/Tools/freeze/"$2}'`


2. 安装python的dev包,如python2.5-dev

3. python /path/to/freeze.py /path/to/hello.py
4. make

就好了:P

或者

python /path/to/freeze.py -o dist /path/to/hello.py
然后进入dist目录,再
make

------------------------

http://wiki.python.org/moin/Freeze

openVz 安装及应用,入门

OpenVZ 是采用修改过的 Linux 内核在操作系统层进行虚拟化的技术,它让一台实体服务器能够执行多个被隔离、名为容器、虚拟私人服务器(VPS)或虚拟环境(VE)的实例。现时「容器」是最流行的名称。容器有时会被比拟为 chroot 或 jail 类的环境,但容器其实在隔离、安全性、功能、及资源管理方面都更优胜。

OpenVZ 包括一个特制的 Linux 内核(由 OpenVZ 计划提供)及一些用户级的工具。OpenVZ 的可?性非常高,它并不依赖 CPU 内的 VT 支持,因此它可供 x86、x86-64、IA-64、PowerPC 及 SPARC 等中央处理器系列所应用。

操作系统层的虚拟化与 VMware Server、Parallels Workstation、VirtualBox, QEMU、KVM、及 Xen 等以机器/硬件进行虚拟化的产品有颇大分别,这就是在 OpenVZ 下你只能在 Linux 上将 Linux 虚拟化。

OpenVZ 修改 Linux 内核将高级的容器化功能加入其中,藉此容许隔离了的进程组别在一个 init 的旗下执行,附带的还有二十多个控制容器资源应用方法的动态资源管理参数。OpenVZ 计划维护着三个稳定的内核分支:
本于 RHEL4/CentOS4 的 2.6.9
本于 RHEL5/CentOS 5 的 2.6.18
本于原装的 2.6.18

此外还有数个不稳定的分支本于较新版的 Linux 内核,它们也许会渐渐达至稳定的状态。

为何采用 OpenVZ?

由于它较为轻省,相比起机器/硬件级虚拟化,操作系统级虚拟化提供了不少优点:
它的效率较高
它的扩展性较高
它提供较高的机器密度
它提供较多的资源管理参数
采用动态资源管理,因此无须重新引导容器

OpenVZ 能够取得较优越的效率(与原生效率接近至很难量度)、扩展性及密度是由于只有单一个 Linux 内核在实体主机上执行,至于每个容器只占用当中的进程/服务所需的资源,而不必耗用整个操作系统的额外资源。一个基本的容器在主机上也许会是 8 至 14 个额外的进程。只要配合适切的资源管理设置,OpenVZ 亦能处理更高级的程序,例如拥有数百个进程/线程的巨型 Java 应用程序。

OpenVZ 的另一个优点就是它提供了广泛的动态资源管理参数,包括内存使用量、进程的数目、处理器使用量、磁盘空间使用量等等……它们全都可以在容器运行时被修改。OpenVZ 在容器内亦支持容器的磁盘配额,及(选择性地)支持用户和群组的磁盘配额。

OpenVZ 提供数项高级的功能,包括「检查点」及将容器由一台主机「迁移」到另一台。迁移共有两种方式:

即时迁移减少停机的时间(只须数秒),并且保持机器的运行时间及网络连接。
脱机迁移就是将机器停止,迁移它,然后重新打开它。
OpenVZ 的迁移功能「并不」须要一个共享的存储方案,而是利用 rsync 将容器的目录整全地由一台实体主机复制到另一台。

何时不要用操作系统级虚拟化

虽然在很多应用案例下你都可以考虑使用操作系统级虚拟化,在某些情形下操作系统级虚拟化并不合适,而机器/硬件级虚拟化会是较好的选择:

当你想执行非 Linux 的操作系统
当你想执行多个内核版本
当你需要一个多方面自定的内核

OpenVZ 的历史

SWsoft(现称为 Parallels)在 2001 年针对 Linux 发行了一个名叫 Virtuozzo 的产品。他们的现有产品名叫 Parallels Virtuozzo Containers。微软 Windows 版的 Virtuozzo 在 2005 年被发行。同样在 2005 年,SWsoft 成立了 OpenVZ 计划,以 GPL 2 授权方式公开 Virtuozzo 背底后的技术。

纵使操作系统级虚拟化在媒体里所获的关注不及某些新兴的机器/硬件级虚拟化产品般多,自 2001 年(Virtuozzo)及 2005 年(OpenVZ)的发行,它们在环球数万台服务器上已证明了自已效率高、稳定、安全及耐用。时至今日,Linux 的操作系统级虚拟化(包括了 Linux-VServer)可算是历史最悠久和最广泛部署的 Linux 虚拟化平台。

操作系统级虚拟化与 OpenVZ 的未来

在数个于 2007 及 2008 年发表、关于 Linux 内核的未来的简报里,Andrew Morton 认定容器是他唯一能肯定会在 Linux 内核出现的东西,因为有数位利益关系人如 IBM、Google 及 OpenVZ 计划等都正在研究它。

容器的功能自 2.6.24 版内核开始出现于主线的内核中,更多功能将会在其后的版本相继被加入。这些功能普遍被称为 control groups(简称为 cgroups),而数个内核子系统(如调度器、内存管理器等)已获修改来支持 cgroup。现时亦未知主线 Linux 内核中的 cgroup 支持仍需多久才会功能全备、稳定、及被广泛采用……因此 OpenVZ 似乎仍会逗留一段日子。

还有一个针对 Linux 的操作系统级虚拟化产品名叫 Linux-Vserver。Linux-VServer 同样是一个高质素的产品/计划,但它与 OpenVZ 之间有数个分别。Parallels/OpenVZ 正在与主线 Linux 内核的开发者合作,为要将容器的功能加进主线 Linux 内核里。Linux-VServer 的开发者以独立型式运作,并决定在可见的未来保持 Linux-VServer 为树干以外的修正。这并不是说 OpenVZ 将会直接被放进主线的内核里,因为事情并非如此。cgroup 方面的努力来自所有利益关系人的共识。不过明显地 OpenVZ 计划在主直插式核里已经贡献了很多源代码。

安装 OpenVZ

OpenVZ 计划的网页(www.openvz.org)内备很多高质素的文档,包括一份用户指南 PDF、一份快速安装指南、及 wiki 内丰富的教学及排除疑难文章。这篇文章会简短地涵盖安装的过程。在下面所有步骤中你都须要是 root 用户。

添加 OpenVZ 的 yum 软件库

在一台 CentOS 4 或 CentOS 5 的主机上安装 OpenVZ 很简单,因为 OpenVZ 计划提供了 openvz.repo 供 yum 使用。你只须下载 openvz.repo 这个文件并将它放置在 /etc/yum.repos.d/ 这个目录内。请查看 openvz.repo 这个文件,因为它收录了数个软件库的定义,其中两个缺省是被启用的:(一)以 RHEL5 为基础的内核及(二)OpenVZ 的工具。请编辑它来乎合你的需要。

输入 OpenVZ 的金钥

rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ 安装 OpenVZ 内核

视乎你需要哪一种内核结构,你可简单地执行:
yum install ovzkernel.i386 或
yum install ovzkernel.x86_64

OpenVZ 内核安装完成后便是时候重新开机,但在开机前仍有些额外的细节须要处理:
查看 /etc/grub.conf 来确定已缺省所需的内核,
编辑 /etc/sysctl.conf 来启用 OpenVZ 所需的某些内核功能和确定 SELINUX 已被停用。
 
我不会涵盖如何编辑 /etc/grub.conf,因为这是项很普遍、非 OpenVZ 专用的工作。

编辑 /etc/sysctl.conf

你喜欢的话,请将原装的 sysctl.conf 文件备份(cp /etc/sysctl.conf /etc/sysctl.conf.original)。请利用你喜欢的文字编辑器修改 /etc/sysctl.conf 这个文件并加入以下内容:
# 在硬件节点上我们普遍需要
# 启用封包转发及停用代理 arp
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
# 启用来源路由检验
net.ipv4.conf.all.rp_filter = 1
# 启用 magic-sysrq
kernel.sysrq = 1
# TCP Explict Congestion Notification
# net.ipv4.tcp_ecn = 0
# 我们不想所有网络界面送出转递
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0 停用 SELINUX

很不幸 SELINUX 不能与 OpenVZ 内核兼容,亦不包含在其中。要停用 SELINUX,请利用你喜欢的文字编辑器修改 /etc/sysconfig/selinux 这个配置文件并将它设置为停用:

SELINUX=disabled 现在是时候重新引导你的计算机进入 OpenVZ 内核。

安装工具

要安装 OpenVZ 的工具程序,请简单地执行:

yum install vzctl vzquota 当你安装了 vzctl 后,你便要这样做来引导 OpenVZ 这个服务:

service vz start vz 这个服务应该已经被设置为自动引导,但你可随意用以下方法来检查:

chkconfig --list vz

现在 OpenVZ 的安装已经完成,而你亦准备好创建你的首个容器,但你首先要取得所需 Linux 发行版本的安装媒体。

利用 OpenVZ

操作系统范本 —— Linux 发行版本的安装媒体

vzctl 这个指命是用来创建及设置 OpenVZ 容器。在你创建一个容器之前,你须要拥有你想安装的 Linux 发行版本的安装媒体。OpenVZ 不能应用 CD/DVD 安装媒体(又或者 .iso 光盘映像档)。OpenVZ 需要它称为操作系统范本旳东西来为某个 Linux 发行版本创建一个容器。你可以从 OpenVZ 的网页下载一些预制的操作系统范本。这是推荐给新 OpenVZ 用户的途径。当你对 OpenVZ 更为熟识,你或许会想按照 OpenVZ wiki 上的众多方法从头创建你个人的操作系统范本。你可以这些地方找由 OpenVZ 划计提供的预制操作系统范本:
http://download.openvz.org/template/precreated/  

你亦可以在这里找到由社区所贡献的操作系统范本:
http://download.openvz.org/contrib/template/precreated/  

请下载所需的操作系统范本并将它放在你的 CentOS 5 主机内的 /vz/template/cache 目录。

创建你的首个容器

要创建一个容器,请采用 vzctl 这个指令,连同 create 选项及数个参数。你须要选择一个独特的容器标识码(CTID)。你也须要一些额外的数据:你想从哪个操作系统范本进行安装?它会拥有哪个 IP 位置?你想给它什么主机名称?你初步想将什么资源赋予它(取自配置文件)?这一切都可以通过以下参数来设置:
--ostemplate {范本名称}
--conf {配置文件名称}
--ipadd {nn.nn.nn.nn}
--hostname {完整域名} 这里有一个完整的样例:


vzctl create 101 \
--ostemplate centos-5-i386-default \
--conf vps.basic \
--ipadd 199.199.199.199 \
--hostname mynew.container.com

** 上面这个会提示找不到 ve-vps.basic.conf-sample

** 下面这个例子比较好,新版本openvz已带的一个模板是 ve-basic.conf-sample , 对应 conf basic

vzctl create 101 \
--ostemplate centos-5-i386-default \
--conf  basic \                                               
--ipadd 199.199.199.199 \
--hostname mynew.container.com

 

这样便会创建一个名叫 /vz/private/{容器标识码} 的目录并将操作系统范本解压到其中。它也会复制指定的文件到 /etc/vz/conf/{容器标识码}.conf 作为该容器的配置文件。请留意 --ostemplate 及 --conf 的值与操作系统范本名称或文件名称并不吻合……它们较为简短。

vps.basic 这个配置文件正如其名,是十分基本……它配置给容器的资源亦比较保守。你若果想查阅与资源相关参数及它们的值,请看看位于 /etc/vz/conf 这个目录内的配置文件。你可以利用 vzsplit 这个指令(man vzsplit)来创建自定的样例配置文件(不限数量),或者复制现有的配置文件到新的文件来进行编辑。

当你创建了一台机器后,你需利用 vzctl set 这个指令来设置数个额外的参数。下面是一个例子:
vzctl set 101 \
--name mynew \
--nameserver "205.171.2.65 205.171.3.65" \
--diskspace 10G:10G \
--save

这样做会更新你的容器的配置文件(在这个样例中是 /etc/vz/conf/101.conf)。当你执行 vzctl set 这个指令时不包含 --save 这个参数时,它便不会将改动存储到你的配置文件内……不过假若该容器正在运作中,它会为该工作阶段动态地更改这些参数。你基本上会经常为 vzctl set 这个指令加入 --save 作为最后一个参数。

引导你的新容器

你只需执行以下的指令来引导你的新容器:
vzctl start {容器标识码} 或者在我们的样例里:
vzctl start 101

你应该会看见一则信息关于容器正在引导中。若果你没有打错任何参数,它应该立即运行。

一如你所期望,stop 及 restart 这些关键字都会如你预料般运作。假若一个容器没有运行,你可以 destroy 它来删除它的配置文件及从主机的文件系统删除它的目录结构(/vz/private/{容器标识码})。

进入你的新容器

当你的容器已在运作时,它应该如同一部实体的服务器般可以在网络上被访问。但由于你位于主机上,你可以利用 vzctl 这个捷径直接进入容器而不须 root 的凭证。

vzctl enter {容器标识码} 在我们的样例中这是

vzctl enter 101 你应该在新的容器内取得一个新的指命符号。你多数会想利用 passwd 这个指令来设置 root 的密码,或者在主机上执行以下指令:

vzctl set {容器标识码} --userpasswd {user}:{password} --save 这里假设你是一个不错的 Linux 系统管理员而且不害怕命令行。请到处看看你的新系统。它在外观及行动上都应该与一台实体的机器无异。你可以安装软件(见下文关于 yum 的部份)、创建户口、新增系统服务及修改它们的设置。

你可以查阅一个容器的 /proc/user_beancounters 文件来查看有多少资源被配置给它。你可以查阅主机上的 /proc/user_beancounters 来查看每个容器的所有参数。资源管理已经超越了这篇文章的范畴,因此详情请参阅 vzctl 的使用手册或 PDF 版的用户指南 。

假若 yum 不在我的容器里,怎样办?

在 2009 年 1 月前,OpenVZ 计划所提供的预制操作系统范本并未安装 yum,而这导致很多用户生气。原因是某些 OpenVZ 系统管理员较喜欢在主机上应用一个名叫 vzyum 的工具,它能在容器里进行类似 yum 的操作。为什么它们喜欢这样做?因为假若每个容器都各自利用 yum,yum 的数据库及高速缓冲文件有时可以占用大量的磁盘空间(及带宽)。在主机上应用 vzyum,只有一个 yum 数据库/高速缓冲会存在,而每个组件只须下载一次。

在 2009 年 1 月 OpenVZ 计划为发行了更新版的预制 CentOS 操作系统范本,当中包含了 yum,因此这个问题已经不再存在。官方的操作系统范本大约每个月更新一次,故此你没有理由采用未安装 yum 的旧版操作系统范本。如果你的 CentOS 操作系统范本并不包含 yum,它要不是旧过 2009 年 1 月,就是来自 OpenVZ 计划以外的源头。

如果你仍然在应用一个未安装 yum 的 CentOS 容器,OpenVZ 的 wiki 有一页解释如何在容器内安装 yum。基本上你要下载 yum 所须的一切 rpm 组件然后利用 rpm 安装它们。盼望这个问题已经成为过去。

结语

这篇文章只处理了 OpenVZ 的最基本部份。未涵盖的主题包括监测容器、资源管理、编辑/创建配置文件(参阅 vzsplit 使用手册)、容器文件系统、与及要成为一位有效率的 OpenVZ 系统管理员的所有额外工序。另外也请留意 OpenVZ 拥有两款网络适配器,而这里只处理了基本/缺省的 venet 类型。veth 这款网络适配器拥有更多元化的功能。

OpenVZ 计划所提供的文档质素很高,数量亦多。请切记阅读 PDF 版的用户指南作为最全面的文档。不过这份指南有一点过时,因为它是在 veth 网络设备、检查点及迁移功能被加入前写成的。还有就是不同指令的使用手册。当你需要迁移容器时,务请阅读 vzmigrate 的使用手册。

我们鼓励你参予及投身在 OpenVZ 计划,方法包括浏览 OpenVZ 网站、应用论坛和 IRC 频道(Freenode IRC 网络上的 #openvz)、与及在 http://bugzilla.openvz.org 汇报你碰到的错误。请让自己熟悉 OpenVZ 的网站,因为它收藏了很多材料。

XEN installation failing with hg command not found

select-repository: Searching `.:..' for linux-2.6.18-xen.hg
select-repository: Ignoring `.'
buildconfigs/select-repository: line 35: hg: command not found
select-repository: Unable to determine Xen repository parent.
make[3]: *** [linux-2.6.18-xen.hg/.valid-src] Error 1
make[3]: Leaving directory `/xen-3.2.0'
make[2]: *** [linux-2.6-xen-install] Error 2
make[2]: Leaving directory `/xen-3.2.0'
make[1]: *** [install-kernels] Error 1
make[1]: Leaving directory `/xen-3.2.0'
make: *** [world] Error 2

yum install mercurial

rpmforge

xen半虚拟化与全虚拟化

本文只涉及到如何实现xen的全虚拟化与半虚拟化,也就是linux下安装linux,与linux下安装windows。

原理性的东西,以及优化,本人还在研究中。
环境centos 5.2 64bit
安装时候已经包含虚拟化,所以启动系统后已经是带xen的内核,已经安装好xen相关软件。
xen虚拟机的存储有多种方式,根据官方手册上说的有files,lvm,nfs等。我选择了files作为xen虚拟机的存储,因为这样比较简单,当然会有弱点,后面会说到。
先说如何实现半虚拟化:
检查cpu的指令集是否包含pae,这个应该不成问题,我小黑的cpu是T2370都支持。
1.先dd出一个img文件作为虚拟机的安装空间
  dd if=/dev/zero of=/xen/image/xen1.img bs=1M count=30720 数值大小可以根据自己需要调整。
2.接着就是安装虚拟机了,安装方式跟宿主机安装一样,可以采取光驱,网络,由于我已经建好了ks的源,方便
  期间我就采用ks来安装虚拟机的系统。
  执行如下命令:
virt-install -n xen1 -r 256 -p --nographic -f /xen/images/xen1.img  -l http://192.168.32.132/centos32bit -x "ip=192.168.32.31 netmask=255.255.255.0 gateway=192.168.32.1 ks=http://192.168.32.132/centos32bit/ksxen.cfg"
成功的话就会自动安装完系统,直到重启进入系统。ks文件就不贴了,和宿主机的配置文件基本一样需要做调整的是分区的名字,宿主机是类似sda的形式,而虚拟机是类似xvda的形式。
那些控制xen的基本命令也不说了,网上一大堆,建议看下官方的xen+man.pdf这本书,很详细。

接着说全虚拟化:
linux安装windows前,我有个误区,想windows是图形的,linux不装图形界面怎么装啊,后来才明白过来,是通过vnc连接,即可以看到图形界面。安装vnc配置vnc也不再叙述,配置下很简单,客户端通过vnc连接到linux的时候一定要输入ip:number(number=1,2...)只输入ip就只能看到一片白的屏幕,什么都没有。
然后先传个iso到宿主机上去,这里要说明下了,网上关于全虚拟化有各种说法,说什么要修改配置文件,修改启动项目,我照着做试了好几遍都不行,后来突然之间找到了个方法解决。
照样dd出img文件,
执行 virt-install -n win2003 -r 512 --vcpus=2 --file=/xen/image/win2003.img --vnc -v -c /root/windows2003_sp2.iso  --vnc --vncport=5902  --os-type='windows'
然后会自动生成win2003的配置文件。
接着通过vnc可以安装系统,(说明下,当时看到蓝底白字的图像时候,很兴奋啊)
当windows复制完需要的文件时候,重启,这时候会出问题了。屏幕是会提示一个错误,安装程序不会继续下去了,这时候删除那个在/etc/xen目录下关于win2003的配置文件,再执行上述命令,再自动生成win2003的配置文件,通过vnc查看,安装程序顺利进行。直到重新启动系统,顺利进去win2003系统,这时候安全起见注意开启win2003的远程桌面,关闭宿主机的vnc服务。
以后通过远程桌面管理win2003.
上述简单的说明了下如何实现半虚拟化与全虚拟化的步骤,行文不是很好,希望大家可以看懂。

 
补充下,采用files作为xen虚拟机的存储,io速度会很慢,基本是宿主机的一半,所以用在生产机器上会有严重问题。听说采取lvm的虚拟分区效果不错,正打算有时间去测试下。
Records:65123456789