麒麟操作系统 (kylinos) 从入门到精通 -高级教程 - 第86篇 关于V11 2603新引入ostree不可变系统的管理

0 阅读4分钟

0.基础环境

类别:笔记本
型号:中国长城 NF14C
硬件平台:飞腾处理器D2000(ArmV8 指令集)
系统:银河麒麟操作系统 V11 2603

关键词:Linux,ostree

1.关于ostree

OSTree是一个用于管理多个可启动对象的工具,它在Linux系统上提供了一种全新的版本控制方式。本文将介绍OSTree的基本概念、使用方法和实际应用,帮助读者更好地理解和使用这个强大的工具。在Linux系统中,版本控制是一个非常重要的概念。随着系统的不断升级和更新,管理不同版本的软件和配置文件变得越来越重要。传统的包管理器如apt和dpkg虽然方便,但在处理多版本和历史记录方面存在一些限制。这时,OSTree就派上了用场。OSTree是一个非常有用的工具,它为Linux系统提供了一种全新的版本控制方式。通过使用OSTree,管理员可以轻松地管理多个可启动对象,并确保系统的稳定性和安全性。虽然它可能比传统的包管理器更复杂一些,但一旦熟悉了其工作原理和常用命令,您将发现它是一个强大而灵活的工具。对于那些需要精细控制版本和配置的管理员来说,OSTree无疑是一个值得考虑的选择。

2.简单使用

默认情况下下是锁了的,所有对/usr等系统的修改是拒绝的。
所以想要改动生效,需要执行流程:解锁(unlock时带--hotfix),操作,commit 到 local/*,deploy,重启电脑
1️⃣ 解锁(hotfix)

sudo ostree admin unlock --hotfix

2️⃣ 做你的修改
特别注意:  需要确保安装的服务正常启动,工作,再commit,否则会导致commit后的版本启动不了。
以二进制安装docker服务为例
这样以后与这个相关的服务,用docker来执行,减少系统修改的影响.将Docker的二进制上传至虚拟机
注意:下面的方式除了centos外,同样适用于银河麒麟桌面系统V10 SP1系列,Ubuntu系列
进入download.docker.com/linux/stati… 下载二进制
进入github.com/docker/comp… 下载docker-compose
下载对应的文件(可以使用最新版本),也可以用本文的版本。

使用ls确认

解压Docker离线安装包并将文件复制到/usr/bin目录

使用tar解压

tar xvf docker-26.1.4.tgz

查看解压后的效果

ls

将离线安装包复制到/usr/bin

cp -R  docker/* /usr/bin #-R代表支持递归,即里面有目录也是可以的。

将docker-compose放入/usr/bin

一、改名为docker-compose

mv docker-compose-linux-x86_64 docker-compose

二、增加可执行权限

chmod +x docker-compose

三、复制进/usr/bin

cp docker-compose /usr/bin/

验证docker与docker-compose

验证docker

docker --version

验证docker-compose

docker-compose --version

创建Docker服务

创建Docker服务配置文件/etc/systemd/system/docker.service

vim /etc/systemd/system/docker.service

编辑输入下面的内容后,执行:wq保存并退出vim

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

确认是否保存成功

cat /etc/systemd/system/docker.service

设置服务并开机启动

chmod +x /etc/systemd/system/docker.service #添加执行权限
systemctl daemon-reload #重新加载系统服务
systemctl start docker #启动docker引擎
systemctl enable docker #开机启动

查看Docker详细信息

docker info 
#docker inspect 镜像id 用于查看镜像信息
#docker stats 实时查看正在运行的容器的资源使用情况

配置Docker加速器
因为可变系统的原因,将数据改个地方(重要):

sudo mkdir -p /home/long/docker-data
sudo chown root:root /home/long/docker-data
sudo chmod 701 /home/long/docker-data

编辑/etc/docker/daemon.json

mkdir /etc/docker #确保docker目录存在
vim /etc/docker/daemon.json
{
  "data-root": "/home/long/docker-data",
    "registry-mirrors": [
            "https://docker.m.daocloud.io",
            "https://hub-mirror.c.163.com",
            "https://docker.1ms.run",
            "https://mirrors.tencent.com",         
           "https://docker.mirrors.ustc.edu.cn"
    ],
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

保存并按下面的操作使镜像配置生效,如果因为ostree可变系统原因,导致保存失败,则用 Vim 内置命令强制 sudo 保存(适合已打开文件的情况);如果你已经在 Vim 中打开了 /etc/docker/daemon.json 并编辑好了内容,直接执行以下命令(在 Vim 命令模式下输入):
:w !sudo tee % > /dev/null
解释:

:w !:将编辑的内容通过管道传递给外部命令;
sudo tee %:% 代表当前编辑的文件路径,tee 以 root 权限写入文件;
> /dev/null:屏蔽 tee 命令的输出,避免干扰。

执行后会提示输入你的用户密码,输入后即可成功保存。

# 这里有个坑,需要先分别停掉 docker.service 和 docker.socket,然后再重启,否则可能配置不会生效(还是从官方镜像源拉取)
sudo systemctl stop docker.service
sudo systemctl stop docker.socket
sudo systemctl start docker.service
sudo systemctl start docker.socket

sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl enable docker #使docker后台开机启动

也可以直接通过指定镜像源拉取:

docker pull m.daocloud.io/docker.io/library/ubuntu:latest

注:这种配置仅允许 Docker 信任该私库(不使用 HTTPS 校验证书),不会改变镜像拉取逻辑

snap服务

sudo apt install snapd
sudo systemctl start snapd
sudo systemctl enable snapd
sudo systemctl status snapd
sudo snap install firefox #安装最新的firefox,firefox官方发行渠道

3️⃣ 取当前正在使用的版本 checksum(作为 parent)

sudo ostree admin status

字段 / 标识 含义
*表示当前正在使用的系统部署版本(优先级最高)
kylin 系统的部署分支 / 名称(这里是麒麟系统)
a73c12b...bd131.2 OSTree 提交的校验和(哈希值)+ 部署序号(.2/.1/.0),唯一标识一个系统版本
Bootcsum 启动镜像的校验和,确保启动文件完整性
Unlocked 系统解锁状态(开发 / 热修复模式),决定是否可修改系统文件
origin refspec 系统镜像的源地址(麒麟官方仓库的特定分支)
(rollback) 标记为回滚版本,当当前版本出问题时可切换到这个版本
Pinned: yes 该版本被 “固定”,不f被 OSTree 自动清理(防止误删)

第一步:分析输出格式,修正提取命令ostree admin status 输出可以看到,带*的行格式是:plaintext

  • kylin a73c12b5654f1274b2cc47940a519b502c6599156aebac75515762d07d5bd131.2

这里的列分布是:

第 1 列:*
第 2 列:kylin
第 3 列:a73c12b...bd131.2(哈希 + 部署序号)
# 修正列数,提取第3列(哈希+序号),再去掉序号
CURRENT=$(sudo ostree admin status | grep '^*' | awk '{print $3}' | cut -d '.' -f 1)
echo $CURRENT

应该输出:a73c12b5654f1274b2cc47940a519b502c6599156aebac75515762d07d5bd131
4️⃣ 提交新版本(关键:带 parent,版本链就有了)

sudo ostree commit \
  --repo=/sysroot/ostree/repo \
  --branch=local/v1-dockerready-202602071220 \
  --parent=$CURRENT \
  --subject="v1 202602071220 docker ready" \
  --tree=ref=$CURRENT

5️⃣ 部署新版本

sudo ostree admin deploy local/v1-dockerready-202602071220

6️⃣ 重启生效

reboot

3.常用验证命令

看版本链

ostree log local/v1-dockerready-202602071220

看当前系统跑的是谁

ostree admin status

回滚

sudo ostree admin rollback
reboot

写在最后

新的银河麒麟系统 V11 2603版本开始引入ostree不可变系统,在使用apt等修改/usr目录相关的数据时,改不了或者重启就失效。本文基于此更新相关教程,使OStree下,可以版本化管理,回退等。至少跟以前的系统一样,所有的操作可以有效,重启后不丢失。

信创、开源、人工智能资源,尽在XPlaza信创开源广场