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信创开源广场!