# xiaozhios
**Repository Path**: feitianzhi/xiaozhios
## Basic Information
- **Project Name**: xiaozhios
- **Description**: “小雉系统”并非是开发操作系统,而是一套服务于软件供应商的产品升级方案;
- **Primary Language**: C
- **License**: LGPL-2.1
- **Default Branch**: master
- **Homepage**: http://www.feitianzhi.com/boke/index.php/31.html
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2022-12-12
- **Last Updated**: 2023-09-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 小雉系统
#### 项目地址
官网 http://www.feitianzhi.com/
github https://github.com/feitianzhi/xiaozhios
gitee https://gitee.com/feitianzhi/xiaozhios
QQ交流群:[869598376](http://www.feitianzhi.com/ "小雉系统")
微信号:xiaozhios
#### **小雉系统简介**
------
“小雉系统”并非是开发操作系统,而是一套服务于软件供应商的产品升级方案;
#### **需求分析**
------
软件一般都运行在操作系统中,软件的运行依赖系统库、驱动,在实际项目中往往遇到以下问题:
1. 新版本的软件需要兼容项目上所有运行的系统(如ubuntu 16.04、ubuntu 18.04、centos6、centos7、centos8等),否则无法同步给所有客户或是需要打分支为每一个版本的系统单独编译测试;
2. 早期项目选定一个系统(centos5)可满足所有需求,而centos5不包含新硬件(以前的硬件可能停产,且新硬件的性能更好价格更便宜)的驱动,而为centos5添加硬件驱动的难度(如新驱动必须要4.*以上的内核)成本都非常高昂,最终只能采用centos8系统,这时需要所有的centos5的机器全部重新部署centos8或是软件增加分支同时维护centos5和centos8的版本;
3. 实验室测试效果与项目运行结果不一致,比如指定ubuntu18.04为开发及运行环境,而系统安装好后需要增加额外的软件,apt 可能从某云拉取软件包进行安装,但因时间问题拉取到的数据可能不一致(某云的软件仓库在更新,其次不掌握在自己手中的数据怎么谈一样,即使知道不一样打印一句日志问题也没有消失),导致实验室和项目上的系统有差异,最终导致软件运行结果不一致;
4. 从源码自己编译与维护一套系统可以保证实验室与项目系统完全一致,但必须解决驱动适配,硬件测试的问题,其难度大,成本甚至比您要开发的应用程序成本还高;
#### **思考与假设**
------
我是一名应用开发者,我希望使用新系统--学习新技术,希望可以选择合适的系统(比如某合作单位提供的库是ubuntu18.04编译的,而选centos6系统作为生产环境)要求方案具备如下特性:
1. 现场与实验室的系统完全一样,包括内核、驱动、虚根、库、文件系统、日志数据(每次系统启动时,所有机器的日志及临时文件也相同,保证启动时绝对可以正常运行);
2. 应用开发完成后只需要在开发环境中测试,不需要在各个生产环境中测试(过多的生产环境增加测试成本,测试人员增多,增加沟通成本);
3. 开发环境的系统可以随意修改(比如可以更换内核、增加驱动、修个核心库版本、甚至直接跟换系统发行版本把ubuntu18.04更换成cnetos8.1),生产环境可以自动安全无差别的同步为和开发环境一致的系统;
4. 系统可以退回历史的任意版本,N年前的项目现升级最新系统后有功能异常了,需要立即退回原来版本已恢复生产环境,实验室也可恢复到项目的历史版本进行测试;
#### **抽象与总结**
------
1. 系统可以来自任意发行版本,要让系统遵循某一规则是不可能的,方案必须兼容所有系统的规则;
2. 系统可以升级与降级,且升级与降级可以跨越版本,则要求方案与版本无关,版本无连续性要求;
3. 系统启动后日志及临时文件相同,则要求系统启动时可以自还原为初始状态;
4. 系统升级需要安全及完全的一致性,则要求方案具备断电保护机制与数据校验机制;
#### **小雉系统设计**
------
- “小雉系统”采用事务性更新
在系统中含有两个root filesystem分区:A区及B区(各含有一个系统image)。当A区启动后,它可以用来更新B区。只有B区更新完整后才可以切换过来到B区,否则永远处于A区。反之亦然,我们可以用同样的办法来更新A区。这对很多需要稳定工作的环境的系统来说非常重要,比如更新一个远在路口的webcam。
- 更强的应用安全
系统image只是可读的,任何应用不可以更改它。这样的好处是不至于由于某个应用的bug导致整个系统重启后不能恢复,保证系统重启后绝对正常运行。系统的只读特性让系统每次启动都会恢复到初始状态,保证重启大法的绝对有效。
- 更随意的软件测试
系统内的所有软件都具有完整的控制权限,可以任意更改和删除文件系统中的数据,在重启后都会恢复为系统image,适合做对操作系统有破坏的测试。
- 带权限的软件包设计
系统软件包设计权限位,实现一个升级包可用于多客户。
#### **小雉系统使用**
------
1. 下载开源系统镜像(xiaozhios-vmware.zip):http://www.mym9.com:16080/files/xiaozhios-vmware.zip
开源镜像是使用其中一个版本的升级包制作的vmware镜像(用户名:root,密码:12345),在此版本上应用升级包即可把系统升级或降级为升级包中的系统;
开源镜像启动后需要配置ip,ip配置方法(工具最新版本:http://www.mym9.com:16080/files/tools.zip ):http://www.feitianzhi.com/boke/index.php/archives/15/
从镜像中制作系统安装包的方法:http://www.feitianzhi.com/boke/index.php/archives/50/
使用镜像安装到云服务器(也适用于物理机)的方法:http://www.feitianzhi.com/boke/index.php/archives/11/
2. 下载升级包源码
> 升级包源码为cpio.gz压缩包,解压方法:gzid -cd xiaozhios-20221212.gz |cpio -idvm
> 升级包源码源码,最新版本(http://www.mym9.com:16080/files/xiaozhios-openSource.gz ):
> 历史版本:2022-12-12 https://download.csdn.net/download/zhangrui_fslib_org/87269355
> 初始化版本;
>
> 制作升级包的方法(制作好后使用升级工具升级即可,升级包中的定制见下节):
>
mkdir -p /opt/os
cd /opt/os
//mv xiaozhios-20221212.gz /opt/os/xiaozhios-openSource.gz
wget -O xiaozhios-openSource.gz http://www.mym9.com:16080/files/xiaozhios-openSource.gz
gzip -cd xiaozhios-openSource.gz |cpio -idvm
cd xiaozhios
./clean;./run
生成升级包(如xiaozhi-4.94.1122.upt.jpg)后,把升级包拷贝到windows下,使用下级的工具升级

3. 下载升级工具(工具最新版本:http://www.mym9.com:16080/files/tools.zip ):http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html
升级工具是“小雉系统工具”包中的一个小工具,使用方法可以参考:http://www.feitianzhi.com/boke/index.php/archives/14/

#### **小雉系统升级包源码定制**
------
1. xiaozhios/clean:清理制作升级包时产生的临时文件及升级包;
2. xiaozhios/run:制作升级包的脚本(此脚本要求输入授权码,开源用户输入free);
3. xiaozhios/updateFilePackage:打包工具,在run脚本中调用,此工具可以设置密码(默认为12345),生成的升级包会显示系统的sysKey,升级包在升级时会校验sysKey,不匹配则不能升级,即各用户可以使用不同的密码使自己做出的系统只能应用到自己的系统中;

4. xiaozhios/platform/x86_64:储存x86_64系统的目录(platform下可以储存多个系统,即可以把多个系统做在一个升级包中);
5. xiaozhios/platform/x86_64/mask.txt:系统包掩码的定义,升级包按如下规则应用掩码
> 假设系统掩码为m,包掩码为b:
最高位-表示掩码校验方式(0-表示(m&(b&0x5FFFFF))==(b&0x5FFFFF)时包被需要,1-表示(m&(b&0x5FFFFF))!=0时包被需要);
次高位-表示包除按标准方式校验外,如(m&b&0x400000)|((m|b)&0x200000)==0x400000时,包需要进行额外的头判断(即包的前缀与系统的前缀相同);
次次高位-强制包的额外头判断恒为真,如(m|b)&0x200000!=0,则包的额外头判断结果为真;
6. xiaozhios/platform/x86_64/boot:存放kernel、initrd及引导;
7. xiaozhios/platform/x86_64/base:存放基础软件包,该目录中的软件包是一次性解压后再启动;
8. xiaozhios/platform/x86_64/extra:存放扩展软件包,在基础软件包解压并启动系统后,再逐个解压进行启动;
9. 软件包的命名规则,例如zfs-1.0.8.1-7.2-000000
> 000000:表示权限信息(系统掩码为m,包掩码为b)
最高位-表示掩码校验方式(0-表示(m&(b&0x5FFFFF))==(b&0x5FFFFF)时包被需要,1-表示(m&(b&0x5FFFFF))!=0时包被需要)
次高位-表示包除按标准方式校验外,如(m&b&0x400000)|((m|b)&0x200000)==0x400000时,包需要进行额外的头判断(即包的前缀与系统的前缀相同)
次次高位-强制包的额外头判断恒为真,如(m|b)&0x200000!=0,则包的额外头判断结果为真
2:表示第二个版本,升级包的版本号是所有包此值的和
7:包的序号,序号小的先解压先启动,序号相同时按名称逆序排序
8.1:表示基于8.1系统制作
1.0:表示程序的主版本号为1.0
10. 软件包内部结构,该方案要求软件包内的文件名及目录名不能以"__"打头,内部建议按原版本系统组织(即直接拷贝原系统中文件按原系统目录结构储存)
> 
sysKey软件包在/tmp/sysinfo/sysKey文件存放的数据为制作升级包时生成的sysKey数据:"c345b45a4ec0a241134c5cefa0dd4aef"
ftp软件包是拷贝原版系统的ftp文件做的一个软件包
#### **小雉系统版权**
------
"小雉系统"是基于开源linux发行版本定制,未修改linux发行版本源码,能否自由使用遵循对应发行版本的规则;
"小雉系统"添加的执行程序(升级工具,打包工具,引导程序)版权归作者所有,个人可以免费使用;
"小雉系统"提供的收费版本为支持服务,其区别如下;
|
开源版本 |
收费版本 |
| 升级包大小 |
无限制 |
无限制 |
| 支持的发行版本 |
所有linux发行版本 |
所有linux发行版 |
| 是否支持私有升级包制作 |
支持(./updateFilePackage -p 私有密码) |
支持(./updateFilePackage -p 私有密码) |
| 是否支持差分升级 |
支持 |
支持 |
| 是否支持版本回滚 |
支持(24小时内回滚) |
支持(0-100年回滚) |
| 技术服务 |
论坛 |
技术培训与电话远程支持 |
| 技术支持 |
qq群:869598376 |
微信号:xiaozhios |
#### **小雉系统集成应用概览**
------
本集成应用是基于”小雉系统“集成多种应用做成的一套服务于视频应用的视频系统,总大小约230M,相关网址:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html
| 应用类别 |
应用名 |
应用描述 |
大小 |
| 引导 |
grub2 |
引导 |
3.1M |
| 内核 |
kernel |
内核 |
7.8M |
| 虚根 |
initrd |
虚根 |
14M |
| 基础包(本类全部解压完成后启动系统) |
system |
基础系统 |
15.4M |
| libmnl |
NAT相关 |
0.12M |
| driver-wireless |
无线驱动 |
0.32M |
| driver |
基础驱动 |
3.2M |
| udev |
设备自动发现 |
1.1M |
| nvidia |
nvidia驱动 |
43M |
| fsServer |
升级程序的服务端,含日志管理,watchdog |
5.4M |
| telnet |
telnet服务端和客户端 |
0.08M |
| ssh |
ssh服务端 |
0.08M |
| network |
网路小工具,比如网桥工具 |
0.02M |
| iscsiclient |
iscsi硬盘挂载工具 |
0.57M |
| zabbix |
zabbix采集程序 |
1.1M |
| 扩展包(解压一个启动一个) |
vsftpd |
ftp服务器 |
0.08M |
| zfs |
zfs文件系统 |
1.5M |
| smb |
smb服务器 |
8.1M |
| nginx |
nginx服务器 |
0.58M |
| phpext |
php扩展 |
0.63M |
| php |
php服务器 |
4.4M |
| mariadb |
mariadb服务器 |
6.9M |
| git |
git服务器 |
3.4M |
| virtual |
虚拟服务器(kvm虚拟化),可在系统内跑其他linux或windows虚拟机 |
3.4M |
| ossfs |
使用阿里云的对象储存 |
2.2M |
| lvs |
lvs文集系统管理工具 |
0.1M |
| iptables |
防火墙 |
0.29M |
| pppd |
pptp、l2tp 服务器需要的组件 |
0.21M |
| pptpd |
pptp服务器 |
0.05M |
| ipsec |
l2tp 服务器需要的组件 |
4.6M |
| xl2tpd |
l2tp服务器 |
0.09M |
| jpegipp |
intel的jpg编解码库 |
13M |
| ffmpeg |
ffmpeg库,拥有h264,h265解码 |
13M |
| zos |
视频软件,用于rtsp、rtmp、hls、gb28181协议的直播、储存、回放,并带ai分析 |
8.6M |
| mail |
邮件服务器,用于收发邮件,并提供web邮箱,web域名管理 |
18M |
| x265 |
h265编码库 |
0.79M |
| x264 |
h264编码库 |
0.81M |
| wireshark |
网路抓包与分析工具 |
20M |
| valgrind |
内存调试,程序bug分析工具 |
1.2M |
| tools-oem |
客户定制的特殊工具 |
0.44M |
| tools |
常用工具,如ping、xdd、arp等 |
0.49M |
| tc |
流控程序 |
0.22M |
| rpcapd |
流量镜像程序,允许在windows下使用wireshark对linux系统远程抓包 |
0.10M |
| qemu-nbd |
虚拟磁盘,如vmdk,qcow的挂载程序 |
0.64M |
| nvidia-tool |
nvidia工具,用于管理与查看gpu |
0.83M |
| ntp |
ntp服务器 |
1.8M |
| ntfs-3g |
ntfs文件系统管理程序 |
0.29M |
| nmap |
网络扫描程序 |
0.91M |
| nft |
取代iptable的网络框架 |
0.25M |
| ncat |
tcp端口代理程序 |
0.2M |
| mysql-upgrade |
mariadb数据库升级工具,如centos7建立的数据库,在centos8可能需要升级 |
1.8M |
| mariadbtool |
mmariadb的工具,比如命令行连接数据库工具 |
1.1M |
| journalctl |
systemd的日志查看工具 |
0.03M |
| ipcs |
共享内存管理工具 |
0.03M |
| iopp |
磁盘io监测工具 |
0.01M |
| opencv |
opencv库 |
5.0M |
| iftop |
网路流量监控 |
0.08M |
| ifstat |
网路接口流量监控 |
0.03M |
| htop |
进程监控程序 |
0.08M |
| gitweb |
web呈现本机git服务器的项目 |
0.94M |
| ftp |
ftp客户端 |
0.04M |
| dhsdk |
大华的sdk开发包 |
9.2M |