利用colinux制作tinycolinx,在ecs上打造server farm和vps iaas环境代替docker

简介: 本文关键字:将tinycorelinux装在硬盘上,custom tinycore linux kernel,tcl3安装使用方法,tcl安装到硬盘,自定义linux rootfs,利用colinux代替docker组建容器。单机端口反代重用技术,内网转发复用端口

本文关键字:将tinycorelinux装在硬盘上,custom tinycore linux kernel,tcl3安装使用方法,tcl安装到硬盘,自定义linux rootfs,利用colinux代替docker组建容器。单机端口反代重用技术,内网转发复用端口

在《阿里云上利用virtiope+colinux实现linux系统盘动态无损多分区》中我们用colinux实现了一个uniform pe装机环境的东西,在《利用colinux,免租用云主机将mineportal2做成nas》一文中,我们利用colinux结合mineportal打造了一个多用实用的nas,在《一个设想:基于colinux,是metaos for realhw and langsys,也是一体化user mode xaas环境》中我们提到colinux还可用于类vagrant开发虚拟机,软件兼容层等等之类的东西,xaas环境,而其实,只要上升到host/guest层面,作为guest的colinux还可以完成更多的东西,比如这里接下来要讲到的:利用colinux切分服务器资源,打造你的专属serverfarm --- 其实,它也属于《一个设想:基于colinux .xaas..》提到的xaas的一个应用:它可以模拟docker容器,将ECS分为多个子colinux系统,比如,对于一个1C核1G内存的ECS,我们可以根据128M为粒度大小,利用colinux能在conf中设置mem的大小的能力,将ECS资源划分为512/128=4个colinux容器。除了给内存配额在tinycorelinux wiki中还有定义governers限制CPU的能力和讲解。这一切都不需要利用到docker这种过度虚拟化的方案带来的虚拟地狱缺点:比如docker利用分层联合文件系统,用户难于维护。

为了实现可用性,我们还必须作一系列改进,比如,由于128m内存限制太小,我们必须利用专门的colinux os发行版而不是巨大的ubuntu etc..,比如采用tinycore linux os,它可以做到以至少10M的服务器核心而存在,这跟windows上的boot2docker使用定制版的core linux os是一样的道理。选用tcl的另一个考虑是它有独特的发行包机制,它的发行包比较精简,专用的软件包发行限制可以避免VM用户装乱七八糟的大软件,第三,tcl的处处即挂载的cloud run+可持久机制(整个根可挂载到内存livecd下或其它介质,home目录可挂载,tcz loop mounts必挂载)使得即使给了用户root也不会轻易破坏系统适合VM使用。

对于一个真实可用的vm container环境,还会有其它高级课题,比如,一台ECS只有一个80端口,多个内网colinux VM环境需要重用80端口出网。无论如何,下面先来搞定将tinycore与colinux结合的问题:为colinux制作一个精简的tinycorelinux发行。

制造一个精简server发行版

这一切需要在另外一台linux上完成,比如直接利用我发布的colinux14.04版本:

一开始我参照网上《将ubuntu8.04 iso安装到colinux的方法》先试验下载了最新的各种iso,通过conf文件中直接挂载/dev/cobd1=xx.iso,root=/dev/cobd1,initrd=tinycore.gz的方式企图进入,发现最后都不能进入,有colinux initrd的问题,有tinycore.gz文件系统的问题,有colinux内核的问题。光盘方式看来是不行了。

不会要重编内核,或者重封装rootfs吧?

但其实硬盘方式加+低版本microcore3.8.4.iso是可行的,我重新做了一个1G的硬盘,在colinux中mkfs.ext3格式它,拷贝提取iso中的microcore.cpio直接释放到硬盘,tinycorelinux就开始运行了直到出现登录用户提示符,即cpio -idmv < microcore.cpio到根目录,然后用colinux引导新的硬盘系统(原colinux vmlinux可以无修改,initrd.gz也可以利用上),这样天然地就是tinycorelinux的硬盘模式了。(initrd.gz注入后,再重启,提示scatter harddisk installation mode后进入login提示,用tc用户无密码登录),我把它称为tinycolinux。

tinycolinux的conf中还可以支持tinycorelinux中提到的各种bootcodes,比如root=/dev/cobd0,home=/dev/cobd0,opt=/dev/cobd0,tce=/dev/cobd0这些,由于tinycorelinux会搜索分区上的/tce目录为应用下载目录,所以我也在新建了一个,否则默认tce-load -wi xxx出来的options会出现在/tmp/tce中,(硬盘模式下home,opt,root都出现在当前所在的硬盘根下,在/下建一个/tce目录,有跟conf中设置tce=/dev/cobd0同样的效果)。

由于一切都是在硬盘完成的,整个文件系统都是可持久的,除了应用安装不用处理其它持久化问题了:

TinyCoreLinux持久化问题-用户数据和应用扩展保留

tinycorelinux一开始定位live iso和cloud模式,体现在它能在liveiso完全无持久,和有持久介质的多种场景下运行,其root文件系统核心集和应用扩展settings在每一次重启后都是fresh的重启就丢了一切会话和应用扩展和其设置数据,因为一切都是挂载到外部持久的条目或加载到ram的tcz扩展镜像,对于前者,它实际上就是挂载到持久介质的入口而已 --- 正由于这些都是挂载hook点,所以可以集中卸载,,更改依然在外,对于后者,ram下天然不能持久,二者可以维护一个干净的重启后环境,

而对于必须带入下一次重启,或整个文件系统的持久化,除非你指定保存逻辑和定义保存条目 --- 注意这句话,稍后就会谈到。

有三个可配置挂载的目录,/home,/opt和/tce,你可以挂载全部三个到可持久外部介质或选一二,设想tcl在完全无持久介质的liveiso情况下启动,它根本就没有持久能力,但若指定了至少一个可持久目录到外部介质后启动,它就可以在外部介质上得到更改保存,但这些改变不会被带入到除了这三部分之外的任何根文件系统的其它部分。

有一种情况比较特殊,当tincorelinux整个文件系统被置于入硬盘并从硬盘启动时,实际上硬盘整个就是可读写的(norestore bootcode天然启用,/home,/opt,/tce都是现成被默认定义了的可持久目录)。

而至于对于要带入下一次重启和根目录文件系统的那部分持久和更改,你可以指定restore:比如bootcodes定义了restore,和/home到硬盘和新增了.filetool.lst中的新条目,它就会产生mydata.tgz备份/home和/opt,到这个持久上---你可以定制包括/home,/opt的可持久路径和bootcode中指定restore所在的路径,进行一次filetool -b,并在下一次由系统恢复。

对于应用,同样的方式(如上bootcode指定),可以有定义了一个保存在可持久介质上的/tce目录,比如它在硬盘上,/tce下的options和onboot.lst的更改就能持久化。就能将*.tcz动态挂载进来(tcz是一些只读文件系统包,挂载进来的时候是挂到内存中)。要注意在这里,应用加载逻辑是持久过的,但应用依然留在内存运行。且应用的设置部分还没有经过显式持久化。

所以进一步地,如果tcz要带入系统作更改,你依然可以结合.filetool工具和机制,将具体tcz安装后需要持久的部分持久化到可持久中或者ln -s部分目录到硬盘,还可以在在/opt/bootlocal.sh中定义开机利用这些目录持久的逻辑。

将tinycolinux打造成完全的硬盘系统

到此为止,应用依然是靠一次性加载到内存来运行的。针对已经安装好的tinycolinux,我们需要纯粹在硬盘上安装运行的应用扩展:

(虽然对于live系统和3个目录组成的定点集中维护来看它是最佳的,但实际上,除非对应用本身进行定制,否则应用安装过程实际上可能会对整个系统文件系统产生更改,而这也是其它linux distro软件包的默认行为),,况且,我发现tiny core linux有几种包不一样,像nginx和mysql,前者会loop mounts,后者不会产生loop mounts,mysql安装tce-load -wi安装后会留在/usr/local目标中持久,而nginx在-wi后重启系统仅留下一些软链接,不能统一处理,这反而给安装造成了困扰,为了追求更自然的类现在包管理机制的方案和统一省事的安装方法,我想出的办法最初是直接下载tcz包释放到目标,因为tcz包是简单的文件系统打包大都释放到usr/local目录也比较容易手动安装:

1)下载应用时只tce-load -w下载到options

绕过tce-load -wi会创造loop mounts的过程。改用tce-load -w而不安装。

2)从这个地址下载http://mirrors.163.com/tinycorelinux/8.x/x86/tcz/squashfs-tools.tcz,提取二个可执行文件放到把它放在根目录/bin中

利用它来进行手动解压。

3)然后视tcz内容在windows上用7z打开查看看它是要释放到哪的,

其下载地址往往是/opt/tcemirror中条目后加/3.x/tcz/包名.tcz得到的,手动解压,unsquashfs -f -d / /tce/optional/nginx.tcz (这里以nginx为例,它释放到/下)

处理好各个deps的tcz,对于nginx是openssl和pcre。如果所有的deps都安装了还是发现不了so文件,重启一次必发现。sudo nginx会发现不了libprce.so.0

然后在opt/bootlocal.sh中加入随系统自动启动条目,对于openssh是/usr/local/etc/init.d/openssh start,对于nginx是nginx -s start吧。

完工!nginx在重启后自动运行!要卸载时只须处理/usr/local目录。


其实tcl这种live机制也可用于装机代替virtiope,这是后话了。 除了这些,当这些colinux vm用于建站时,还需要nginx反代多个VM重用一个80的技术,其实说到内网转发复用端口,《基于colinux打造nas》一文中也可以用它来出网。制造发行版的二大基本组件,os本身已经解决了,还有toolchain的问题。根据我的《host2guest guest2host nativelangsys及cross compile system》一文,虽然tinycore linux有gcc应用包,不过我倾向于把它放在windows hosts,来编译制造tinycore linux可用的目标。好了。这些都不讲了。


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
4天前
|
NoSQL Redis Docker
Docker——阿里云服务器利用docker搭建redis集群
本文详细记录了使用Docker搭建Redis集群的过程,包括检查Docker和Docker Compose的安装、创建Redis配置文件、编写`docker-compose.yml`文件、启动Redis节点、创建Redis集群的具体步骤,以及最终的验证方法。文章还提供了在多服务器环境下搭建Redis集群的注意事项,帮助读者全面了解 Redis 集群的部署流程。
52 12
|
5天前
|
数据挖掘 虚拟化
虚拟化数据恢复—VMware虚拟化环境下重装系统导致服务器崩溃的数据恢复
VMware虚拟化平台 vmfs文件系统 工作人员误操作重装操作系统,服务器崩溃。 重装系统会导致文件系统元文件被覆盖。要恢复数据,必须找到&提取重装系统前的文件系统残留信息,通过提取出来的元文件信息恢复虚拟磁盘。通过拼接虚拟磁盘来恢复服务器数据。
33 12
|
21天前
|
关系型数据库 应用服务中间件 Linux
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
44 1
Linux云服务器如何搭建LNMP环境
|
4天前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
1月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
13天前
|
弹性计算 运维 Ubuntu
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
188 4
|
13天前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
66 1
|
5天前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
|
9天前
|
弹性计算 运维 监控
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
本文介绍了如何通过阿里云获取ECS云服务器并进行操作系统配置与组件安装,以实现高效的资源管理和系统监控。阿里云凭借强大的基础设施和丰富的服务成为用户首选。文中详细描述了获取ECS、RAM授权、开通操作系统控制台及组件安装的步骤,并展示了如何利用控制台实时监控性能指标、诊断系统问题及优化性能。特别针对idle进程进行了深入分析,提出了优化建议。最后,建议定期进行系统健康检查,并希望阿里云能推出更友好的低成本套餐,满足学生等群体的需求。
68 17
【阿里云】控制台使用指南:从创建ECS到系统诊断测评