为tinycolinux制作应用包

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 本文关键字:tinycolinux自定义应用包,tinycolinx内存运行,mysql重建/tmp/mysql.sock

本文关键字:tinycolinux自定义应用包,tinycolinx内存运行,mysql重建/tmp/mysql.sock

在前面《发布tinycolinux》中,我们重点描述了将tinycolinux安装到硬盘的情况,及处理安装应用到硬盘的情况,这也是大部分情形下的场景,其实,完全可以采取其rootfs放在livecd ram中运行而应用依然安装到硬盘的方式,这样更有利于vm container iaas环境建server farm,这样rootfs是加载到ram中去的。只要重启,一切对系统的更改将撤消。用户就不会轻易破坏系统。

ram中运行rootfs

首先在conf/colinux.conf中root=/dev/ram0,initrd=microcore.gz,cobd0=/imgs/tinycolinux1g,这样启动起来的colinux其rootfs在/dev/ram0中,硬盘介质中仅用于保存用户数据,即conf/colinux.conf中定义的四个挂载地址/opt=cobd0,/home=cobd0,local=cobd0,tce=cobd0,这四个可持化挂载点是colinux那些当且仅当需要修改的地方,所以需要被挂载持久,,我们还可以再定义几个变量加强这个live rootfs的强度,如norestore,

启动,运行。成功进入到tc用户的cmdline.

当然,虽然这个live rootfs系统启动起来了,这个rootfs还是有点raw form和不便的。比如:

通过df命令我们发现定义的四个挂载点,仅挂载了三个到/缺了/tce,但是硬盘中依然生成了四个文件夹/opt,/home,/tclocal对应/usr/local,和/tce,通过tce-load -w发现下载的包在/mnt/cobd0/tce中,这是正确的行为,能用但不好看,这四个挂载点的加载逻辑全在/etc/init.d/tc-config中,所以我们甚至可以重新打包microcore.gz修改tc-config加入缺失的/tce条目。

modprobe也会出错,因为readonly live rootfs是不能加载原initrd.gz注入的lib/modules的,不过同样地,我们可以重新打包microcore.gz手动加入这些文件。

还有一些必要的系统级持久无法完成,比如用户密码更改,它保存在readonly rootfs /etc/shadow中,我们必须这样来完成:

sudo passwd root

输入密码二次

cp /etc/shadow /opt/shadow (做一次备份到硬盘中/opt)

然后修改下/opt/.bootsync.sh,加入以下:

cp /etc/shadow /etc/shadow_old 
cp /opt/shadow /etc/shadow

其实我们完全可以替换busybox中的passwd,改变/etc/shadow路径到其它外部可持久位置,还比如,vm container子机环境不需要关机,可以去掉busybox中的halt,还比如我们可以编译加入dropbear支持,毕竟sshd是最基本的发行包支持了。

我们就不定制microcore.cpio包了。太累。

组建复合应用

官方提供了很多镜像,这些包都很正交。且还有构建源码,可往往我们还需要lnmp这样的组合包,我们可以按《发布tinycolinux》part2中的硬盘安装应用方法来组合一次性安装包(当然,这样它就不正交了但对一台vm container通常情况下仅需承载安装一次lnmp的情形下来说,非常合理和实用),以下是组合应用逻辑,举例我们用了lnmp,组合到一个lnmp.tar.gz中。

首先,tce-load -w nginx,php5,sqlite3,发现会下载大量tcz到/mnt/cobd0/tce/options中:bsddb.tcz,bzip2-lib.tcz,curl.tcz,gmp.tcz,libgdbm.tcz,libiconv.tcz,libltdl.tcz,libmcrypt.tcz,libpng.tcz,libxml2.tcz,libxslt.tcz,mysql.tcz,ncurses.tcz,ncurses-common.tcz,nginx.tcz,openssl-0.9.8.tcz,pcre.tcz,perl5.tcz,php5.tcz,readline.tcz,sqlite3.tcz,这些都是我们要组合进一个大应用包的基础。一个一个解压它到my文件夹,sudo unsquashfs -f -d /mnt/cobd0/my/ /mnt/cobd0/tce/optional/xxx.tcz

作一些更改(这是因为原tcz全是绿色dropin包):

nginx conf/nginx.conf,root index加个index.php,把关于php的三条注释去除注释化使其有效,其中SCRIPT_FILENAME改成 $document_root$fastcgi_script_name;且把最大脚本内存由128m改为64mb

usr/local/etc加个my.cnf,内容如下:

[mysqld]
socket     = /tmp/mysql.sock
port       = 3306
pid-file   = /tmp/hostname.pid
datadir    = /usr/local/var/mysql
language   = /usr/local/share/mysql/english
user       = tc

好了,现在重建数据库,sudo /usr/local/bin/mysql_install_db,,尝试启动mysql: sudo /usr/local/bin/mysqld_safe & ,成功

然后我们cd /mnt/cobd0/my,打包它们sudo tar zcf lnmp.tar.gz *,,,安装这个大应用测试下:cd到/,然后tar zxvf /mnt/cobd0/my/lnmp.tar.gz,然后在/opt/bootlocal.sh中启动它们:

sudo nginx;sudo php-cgi -b 127.0.0.1:9000;sudo mysql_safe

成功。


这个我本来还要集成memcached (bootlocal中启动用memcached -d 64m限制最大使用内存)和postfix的。postfix适合另外起一台vm container建一个emailserver的组合包。而不是放到lnmp中。

当然,如果自己要从源码构建php等的新版本,而不是直接利用官方包组合,这需要处理好多东西。恩恩


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

qrcode.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
Linux 开发者 iOS开发
QT:基于QMediaPlayer制作的视频播放器(最下方有整合包,可直接运行)
QMediaPlayer是Qt多媒体模块中的一个核心类,它提供了播放音频和视频内容的功能。这个类的设计旨在简化跨平台的媒体播放,使得开发者能够在多种操作系统(如Linux、Windows、macOS及移动平台)上轻松集成多媒体播放能力到他们的应用中,而无需关心底层实现细节。以下是关于QMediaPlayer的一些关键点:
610 1
|
4月前
|
Python
关于下载aircv包遇到的问题
这篇文章是关于作者在尝试下载aircv包时遇到的问题以及通过离线下载解决这些问题的经历。
关于下载aircv包遇到的问题
|
4月前
|
Python
Python模块制作及安装
Python模块制作及安装
|
7月前
|
Java Linux Shell
Linux安装包制作
Linux安装包制作
112 0
Nuitka打包 制作安装包
扩展部分,将exe文件制作为安装包
211 0
|
数据可视化
使用 ggpubr 包制图
使用 ggpubr 包制图
149 0
|
数据安全/隐私保护 开发者 Python
10分钟制作开源pip包
10分钟制作开源pip包
10分钟制作开源pip包
|
Kubernetes Cloud Native 前端开发
如何从代码到制作并发布一个 Helm 包?
Helm 是什么?云原生领域应用打包和分发的事实标准,Helm Chart 通常包含 Docker 镜像及其基础设施配置,能够把一个 K8s 生态的应用完整封装,并且在另一个 K8s 环境正常的运行。为什么 Helm 会流行?核心功能有两点:对复杂的 Kubernetes YAML 做了打包和抽象,简化为少量参数。给出应用的概念,并给出了完整生命周期解决方案:制作、上传(托管)、版本化、分发、部署
如何从代码到制作并发布一个 Helm 包?
|
安全 开发者 Docker
镜像制作的方式介绍|学习笔记
快速学习镜像制作的方式介绍