# xuanwan **Repository Path**: maxwill-ma/xuanwan ## Basic Information - **Project Name**: xuanwan - **Description**: 玄湾系统是一款基于OpenCloudOS的镜像构建系统,主要用于打造轻量化的操作系统。特点:在基于已有rpm包的同时,并可以对特定的软件进行定制化改动。 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2024-03-20 - **Last Updated**: 2024-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 玄湾构建系统 ================= # 功能介绍 玄湾OS是云原生OS的重要组件之一。玄湾OS项目聚焦于镜像的构建和升级。常规的OS镜像一般是通过Linux发行版衍生而来,在云原生场景下,具有体积臃肿、版本零散、攻击面广等不足。玄湾OS项目的引入,就是为了解决传统的镜像构建和升级带来的弊端。如下是玄湾功能分类: - 构建系统: 玄湾可以根据不同产品需求,可配置其包含的组件。组件可以来自指定软件仓库,也可以通过源代码编译产生。组件分为:基础组件(无需配置)和产品组件; - 升级系统: 玄湾提供快速升级机制以及异常版本回退机制,并且基于overlayfs实现的只读根文件系统A/B盘方式升级,同时提供受控可供用户安装的隔离空间。既防止了系统的碎片化,又保证了一定的灵活性; # 功能特点 玄湾OS是一款启动速度快和资源占用少,并且集成Kernel、Linux发行版和容器运行时为一体,意在为使用者提供一个专为容器安全运行的轻量级云原生操作系统。 然而,玄湾OS不仅仅解决了传统容器镜像的弊端,而且还引入了一些新的特性。玄湾OS将拥有如下几个特性, 1. 轻量化:玄湾OS内冗余应用和冗余库较少,只包含必要的基础库。同时在构建时是以rpm/yum作为包管理机制来管理所有组件以及解决依赖,但是构建成镜像后就完全去掉了包管理器,这样大大减少了资源的占用. 1. 安全性:玄湾OS根文件系统默认只读,并能控制客户登录,且登录的客户仅能操作部分目录(overlay目录)。另外,玄湾OS内的基础组件将逐渐切换到rust语言,并能充分利用rust的内存安全特性。 1. 统一配置:为了方便客户使用,玄湾OS将容器环境需要的内容全部整合到一起,配置统一无差异,不会出现配置满天飞的情况。 1. 内核更新:玄湾OS支持主备镜像升级/回退,可以有效解决因磁盘或电源异常导致的宕机问题。 1. 内核优化:玄湾OS优化了内核组件,提升了系统启动速度,系统内核启动完成仅需1s。 1. 构建环境安全:玄湾OS的构建是采用容器环境隔离的方式来进行,因此,不影响构建系统本身。 # OS构建 ## 构建环境准备 1. 安装 git和git lfs ``` dnf -y install git git-lfs ``` 2. 初始化git lfs ``` git lfs install ``` 3. 安装docker-buildx ``` dnf -y install https://mirrors.opencloudos.tech/epol/9/Everything/x86_64/os/Packages/docker-buildx-0.11.2-1.oc9.x86_64.rpm ``` 4. 下载玄湾系统 ``` git clone https://gitee.com/OpenCloudOS/xuanwan.git ``` ## 构建前准备 构建前,需执行./prepare.sh或手动安装如下工具: 1. 安装 docker-ce软件包 ``` dnf -y install docker-ce ``` 2. 安装 cargo软件包 ``` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` 3. 安装 cargo-make包 ``` cargo install cargo-make ``` 4. 安装 toml-cli包 ``` cargo install toml-cli ``` 5. 将 cargo添加到环境变量 ``` source $HOME/.cargo/env ``` ## 玄湾镜像 1.构建oc镜像 ``` cargo make ``` 2.清除oc镜像 ``` cargo make clean ``` ``` 注:cargo make -e TENCENT_TARGET=xxxx可以编译指定的产品镜像,默认是oc9。 ``` 3. 编译生成的镜像的命名规则为 ``` 产品名+kernel版本号+玄湾版本号.img ``` 例如: oc9-6.6.6-2401.0.1-0000.img # 注意事项 1.当编译过程中,如果出现空间不足,则需要用如下命令,清理一下docker磁盘: ``` docker system prune -a ``` 2. 在编译C文件的时候,如果有依赖第三方库,此时的第三方库是被安装到%{_cross_sysroot}目录,因此需要在编译的时候添加CFLAGS/LDFLAGS,如下: ``` CFLAGS="-I%{_cross_sysroot}/usr/include -L%{_cross_sysroot}/usr/lib64" ``` 3. 当在镜像内新增安装包或者文件时,需要修改targets//Cargo.toml调整镜像大小,否则会出现镜像空间不足的情况。 ``` 打开Cargo.toml,找到image-size, 并修改为对应的大小。 ``` 4. 修改packages/< package >/Cargo.toml文件后,需要执行 ``` cd packages; cargo update; cd packages 注: 不执行,会出现error: the lock file packages/Cargo.lock needs to be updated but --locked was passed to prevent this ``` # 待新增功能(TODO) 1、增加镜像主备升级功能(A/B盘);