在tinycorelinux上安装lxc,lxd (1)
本文关键字,在tinycorelinux上安装lxc,lxd,gcc4.4 self-reference struct typedef
在前面的文章中我们讲到过内置虚拟化的os设计,它可以使包括裸金属,云主机在内的等所有虚实主机实现统一装机,且统一各层次的虚拟化(os容器/app容器一体化),这就是diskbios->cloudbios的设想,在一些文章中我们还讲到利用这样的一套架构打造vps server farm(最初我们尝试的是在windows上利用colinux打造vps farm),甚至打造一个portable cloud environment image file的思想。
那时我们考虑的主要是单纯的xaas:类coreos,但是更偏向接近native的去虚拟化,我们为此建立了一个极小的linux distro,在《发布一统tinycolinux,带openvz,带pelinux,带分离目录定制》系列中我们实现了这样一个linux distro的基础部分:dbcolinux。
在更稍晚的文章中,我们发现了devops,如,《利用packer把dbcolinux导出为虚拟机格式和docker格式》谈到的Provision a dbcolinux img。。我们在《hyperkit:一个full codeable,full dev support的devops,及cloud appmodel》还谈到一种利用轻量hypervisor来做虚拟层的工具和devops OS设计:bhyve。我们甚至还谈了支持编程扩展DSL和devops的语言。
最后,考虑到虚拟化和devops结合,结合四大件,我们承诺实现一个带xaas,langsys,domainstack的全功能到busybox的设想,这里的思想是这样的:—— 基本上,只要把这些xaas,devops尽早尽量上升到上流,而且保持尽量小。就可以在下流domainstacks,apps中再度被抽象。而busybox设想的最终目的,是要实现一个native/cloud可以本地远程无差运维开发的appstack,这是后话。
但是现在,为了得到一个这样可用的东西,我们会采用一些更为实际的方法。—— 比起使用真正的hypervisor,我们可能会继续使用ovz这样的东西,这是因为深思之后考虑到:一些云主机没有intelV硬件功能不可再虚拟化,而且,hypervisor它也比较重。虽然bhyve比较轻量不过比起os级的虚拟(openvz,etc)来说还是比较重,而且它只工作在freebsd,
分清二种平台虚拟化containerisation vs virtualisation:
拿bhyve的衍生品smartos来说。
SmartOS is a specialized Type 1 Hypervisor platform based on illumos. It supports two types of virtualization: OS Virtual Machines (Zones): A light-weight virtualization solution offering a complete and secure userland environment on a single global kernel, offering true bare metal performance and all the features illumos has, namely dynamic introspection via DTrace KVM Virtual Machines: A full virtualization solution for running a variety of guest OS's including Linux, Windows, *BSD, Plan9 and more
Ovz做的主要是第一种,而kvm,bhyve是第二种,我们偏向采用os level的虚拟化,因为它也能devops,而OVZ的devops功能不足。所以我们考虑用lxc/lxd来代替ovz,它的优点有:
1,lxc兼容linux 2.6之上,利用linux本身机制,与docker技术统一。2,lxc作为操作系统级的containerisation技术,它的使命却在于模拟普通虚拟机和hypervisor。3,它也有LXD这样的上层,LXD is a container "hypervisor"。可以Provision生成,甚至休眠。缺点:资料少,有一些与虚拟机的功能不能一一对应,缺失
我们先来讲在dbcolinux安装它,好了,开始吧。
基础工作,安装toolchain增强工具
按《在tinycolinux上编译seafile》的方法,安装3.x的autotools,包括autogen,automake,autoconf,libtool,libtool-dev,etc..
还要安装tclsh.tcz
如果允许,你也可以把下面的给做了
File systems --->
Pseudo filesystems --->
[*] /proc file system support
That enables the /proc virtual filesystem; read the help file for more on that. Then enable the following:
General setup --->
[*] Kernel .config support
[*] Enable access to .config through /proc/config.gz
When editing the file by hand, say Y to CONFIG_PROC_FS, CONFIG_IKCONFIG, and CONFIG_IKCONFIG_PROC.
重编内核不是必要工作,这是测试lxc需要的。本篇只讲编译。
编译lxc
然后下载lxc-lxc-2.0.11.tar.gz的src,2.0.x是lxc2,选择2是因为它从linux kernel 2.6.32开始,与系统所用kernel接近
1,错误:expected specifier-qualifier-list before sa_family_t
在macro.h中,把所有 include linux/*.h 放include directory的最后
2,错误:ms_shared undeclared here
在conf.c中引用这二个头文件,linux/fs.h and limits.h,也放后面
这里的问题大部分都是因为我们所用的gcc443是c99以内的标准,而lxc源码用了部分c11,所以需要如上的workarounds,实际上编译lxd的时候也会看到好几种相似的情形。需要一一针对处理。
Sudo ./autogen.sh,sudo ./configure,sudo make install
—————
lxd放在接下来一篇讲,因为lxd编译要复杂得多,而且它们二者应该分开,因为lxd作为管理可以不跟lxc一样集成在host中而是一个guest中。有没有。。
至于运用lxc和lxd provision的方式,这些都在网上可以找到。
(此处不设回复,扫码到微信参与留言,或直接点击到原文)
- 初识javascript
- [原创]x.509证书在WCF中的应用(Web/IIS篇)
- Javascript之Dom学习
- 考试备战系列--软考--01基础架构概念
- HTML技术简介
- 记一次非常愉悦的 Python 使用经历
- Jquery 触发器之treigger()方法简介
- 如何节省 1TB 图片带宽?解密极致图像压缩
- Redis快速入门
- 王者荣耀未来新版本的环境优化计划,人工智能技术将引入
- Jquery遍历数组之$.inArray()方法介绍
- [原创图解]Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置
- JavaScript之firstChild属性、lastChild属性、nodeValue属性学习
- JavaScript之获取和设置元素属性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel 数据迁移与 Eloquent ORM的实现方法
- PDO::query讲解
- Laravel5框架自定义错误页面配置操作示例
- PHP-FPM和Nginx的通信机制详解
- PHP PDOStatement::columnCount讲解
- PHP中上传文件打印错误错误类型分析
- Laravel如何创建服务器提供者实例代码
- PDO::quote讲解
- php intval函数用法总结
- Python Selenium模块安装使用教程详解
- Python selenium模块实现定位过程解析
- Django ORM判断查询结果是否为空,判断django中的orm为空实例
- ThinkPHP框架整合微信支付之JSAPI模式图文详解
- 一文掌握PHP Xdebug 本地与远程调试(小结)
- PHP生成随机码的思路与方法实例探索