KubeOS:add the clearing of space before the upgrade and rectifying the rollback failure.
The pre-upgrade space clearance function is added to resolve the problem that the upgrade fails due to residual resources when the upgrade is performed again after a power failure. Fix the rollback failure when the upgrade fails due to the upgrade using different architectures. Signed-off-by: liyuanr <liyuanrong1@huawei.com>
This commit is contained in:
parent
f2f479e6d8
commit
5ab9a1e933
183
0004-KubeOS-add-the-clearing-of-space-before-the-upgrade-.patch
Normal file
183
0004-KubeOS-add-the-clearing-of-space-before-the-upgrade-.patch
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
From 54d0a0304a0f76a0e619a8adac370eb3866f52b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: liyuanr <liyuanrong1@huawei.com>
|
||||||
|
Date: Wed, 31 Aug 2022 18:06:28 +0800
|
||||||
|
Subject: [PATCH] KubeOS:add the clearing of space before the upgrade and
|
||||||
|
rectifying the rollback failure.
|
||||||
|
|
||||||
|
The pre-upgrade space clearance function is added to resolve the problem that the upgrade
|
||||||
|
fails due to residual resources when the upgrade is performed again after a power failure.
|
||||||
|
Fix the rollback failure when the upgrade fails due to the upgrade using different architectures.
|
||||||
|
|
||||||
|
Signed-off-by: liyuanr <liyuanrong1@huawei.com>
|
||||||
|
---
|
||||||
|
cmd/agent/server/docker_image.go | 91 ++++++++++++++++++++++++++++----
|
||||||
|
scripts/grub.cfg | 10 ----
|
||||||
|
2 files changed, 81 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/agent/server/docker_image.go b/cmd/agent/server/docker_image.go
|
||||||
|
index 11b21aa..4f9edc1 100644
|
||||||
|
--- a/cmd/agent/server/docker_image.go
|
||||||
|
+++ b/cmd/agent/server/docker_image.go
|
||||||
|
@@ -15,6 +15,7 @@ package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
+ "errors"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
@@ -47,9 +48,18 @@ func pullOSImage(req *pb.UpdateRequest) (string, error) {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
+ containerName := "kubeos-temp"
|
||||||
|
+ containers, err := cli.ContainerList(ctx, types.ContainerListOptions{All: true})
|
||||||
|
+ for _, container := range containers {
|
||||||
|
+ if container.Names[0] == "/"+containerName {
|
||||||
|
+ if err = cli.ContainerRemove(ctx, container.ID, types.ContainerRemoveOptions{}); err != nil {
|
||||||
|
+ return "", err
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
info, err := cli.ContainerCreate(ctx, &container.Config{
|
||||||
|
Image: imageName,
|
||||||
|
- }, nil, nil, "kubeos-temp")
|
||||||
|
+ }, nil, nil, containerName)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
@@ -71,22 +81,31 @@ func pullOSImage(req *pb.UpdateRequest) (string, error) {
|
||||||
|
return "", fmt.Errorf("space is not enough for downloaing")
|
||||||
|
}
|
||||||
|
|
||||||
|
+ tmpUpdatePath := filepath.Join(PersistDir, "/KubeOS-Update")
|
||||||
|
+ tmpMountPath := filepath.Join(tmpUpdatePath, "/kubeos-update")
|
||||||
|
+ tmpTarPath := filepath.Join(tmpUpdatePath, "/os.tar")
|
||||||
|
+ imagePath := filepath.Join(PersistDir, "/update.img")
|
||||||
|
+
|
||||||
|
+ if err = cleanSpace(tmpUpdatePath, tmpMountPath, imagePath); err != nil {
|
||||||
|
+ return "", err
|
||||||
|
+ }
|
||||||
|
+ if err = os.MkdirAll(tmpMountPath, imgPermission); err != nil {
|
||||||
|
+ return "", err
|
||||||
|
+ }
|
||||||
|
+ defer os.RemoveAll(tmpUpdatePath)
|
||||||
|
+
|
||||||
|
srcInfo := archive.CopyInfo{
|
||||||
|
Path: "/",
|
||||||
|
Exists: true,
|
||||||
|
IsDir: stat.Mode.IsDir(),
|
||||||
|
}
|
||||||
|
- if err = archive.CopyTo(tarStream, srcInfo, PersistDir); err != nil {
|
||||||
|
+ if err = archive.CopyTo(tarStream, srcInfo, tmpUpdatePath); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- tmpMountPath := filepath.Join(PersistDir, "/kubeos-update")
|
||||||
|
- if err = os.Mkdir(tmpMountPath, imgPermission); err != nil {
|
||||||
|
+ if err = runCommand("dd", "if=/dev/zero", "of="+imagePath, "bs=2M", "count=1024"); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
- defer os.Remove(tmpMountPath)
|
||||||
|
- imagePath := filepath.Join(PersistDir, "/update.img")
|
||||||
|
- if err = runCommand("dd", "if=/dev/zero", "of="+imagePath, "bs=2M", "count=1024"); err != nil {
|
||||||
|
+ if err = os.Chmod(imagePath, imgPermission); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
_, next, err := getNextPart(partA, partB)
|
||||||
|
@@ -102,10 +121,62 @@ func pullOSImage(req *pb.UpdateRequest) (string, error) {
|
||||||
|
}()
|
||||||
|
|
||||||
|
logrus.Infoln("downloading to file " + imagePath)
|
||||||
|
- tmpTarPath := filepath.Join(PersistDir, "/os.tar")
|
||||||
|
if err = runCommand("tar", "-xvf", tmpTarPath, "-C", tmpMountPath); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
- defer os.Remove(tmpTarPath)
|
||||||
|
return imagePath, nil
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+func cleanSpace(updatePath, mountPath, imagePath string) error {
|
||||||
|
+ isFileExist, err := checkFileExist(mountPath)
|
||||||
|
+ if err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ if isFileExist {
|
||||||
|
+ var st syscall.Stat_t
|
||||||
|
+ if err := syscall.Lstat(mountPath, &st); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ dev := st.Dev
|
||||||
|
+ parent := filepath.Dir(mountPath)
|
||||||
|
+ if err := syscall.Lstat(parent, &st); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ if dev != st.Dev {
|
||||||
|
+ if err := syscall.Unmount(mountPath, 0); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if err = deleteFile(updatePath); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if err = deleteFile(imagePath); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+func deleteFile(path string) error {
|
||||||
|
+ isFileExist, err := checkFileExist(path)
|
||||||
|
+ if err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ if isFileExist {
|
||||||
|
+ if err = os.RemoveAll(path); err != nil {
|
||||||
|
+ return err
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return nil
|
||||||
|
+}
|
||||||
|
+func checkFileExist(path string) (bool, error) {
|
||||||
|
+ if _, err := os.Stat(path); err == nil {
|
||||||
|
+ return true, nil
|
||||||
|
+ } else if errors.Is(err, os.ErrNotExist) {
|
||||||
|
+ return false, nil
|
||||||
|
+ } else {
|
||||||
|
+ return false, err
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/scripts/grub.cfg b/scripts/grub.cfg
|
||||||
|
index d10e4cf..c1a2641 100644
|
||||||
|
--- a/scripts/grub.cfg
|
||||||
|
+++ b/scripts/grub.cfg
|
||||||
|
@@ -91,11 +91,6 @@ menuentry 'A' --class KubeOS --class gnu-linux --class gnu --class os --unrestri
|
||||||
|
insmod part_msdos
|
||||||
|
insmod ext2
|
||||||
|
set root='hd0,msdos2'
|
||||||
|
- if [ x$feature_platform_search_hint = xy ]; then
|
||||||
|
- search --no-floppy --file --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 /boot/vmlinuz
|
||||||
|
- else
|
||||||
|
- search --no-floppy --file --set=root /boot/vmlinuz
|
||||||
|
- fi
|
||||||
|
linux /boot/vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3
|
||||||
|
initrd /boot/initramfs.img
|
||||||
|
}
|
||||||
|
@@ -107,11 +102,6 @@ menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestri
|
||||||
|
insmod part_msdos
|
||||||
|
insmod ext2
|
||||||
|
set root='hd0,msdos3'
|
||||||
|
- if [ x$feature_platform_search_hint = xy ]; then
|
||||||
|
- search --no-floppy --file --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 /boot/vmlinuz
|
||||||
|
- else
|
||||||
|
- search --no-floppy --file --set=root /boot/vmlinuz
|
||||||
|
- fi
|
||||||
|
linux /boot/vmlinuz root=/dev/sda3 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3
|
||||||
|
initrd /boot/initramfs.img
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.33.0.windows.2
|
||||||
|
|
||||||
@ -2,13 +2,14 @@
|
|||||||
|
|
||||||
Name: KubeOS
|
Name: KubeOS
|
||||||
Version: 1.0.2
|
Version: 1.0.2
|
||||||
Release: 4
|
Release: 5
|
||||||
Summary: O&M platform used to update the whole OS as an entirety
|
Summary: O&M platform used to update the whole OS as an entirety
|
||||||
License: Mulan PSL v2
|
License: Mulan PSL v2
|
||||||
Source0: https://gitee.com/openeuler/KubeOS/repository/archive/v%{version}.tar.gz
|
Source0: https://gitee.com/openeuler/KubeOS/repository/archive/v%{version}.tar.gz
|
||||||
Patch1: 0001-Write-a-tool-to-support-KubeOS-deployment-on-physica.patch
|
Patch1: 0001-Write-a-tool-to-support-KubeOS-deployment-on-physica.patch
|
||||||
Patch2: 0002-KubeOS-fix-the-kbimg.sh-exception-and-pxe-installati.patch
|
Patch2: 0002-KubeOS-fix-the-kbimg.sh-exception-and-pxe-installati.patch
|
||||||
Patch3: 0003-KubeOS-fixed-the-issue-of-VMs-images-and-add-check-o.patch
|
Patch3: 0003-KubeOS-fixed-the-issue-of-VMs-images-and-add-check-o.patch
|
||||||
|
Patch4: 0004-KubeOS-add-the-clearing-of-space-before-the-upgrade-.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
BuildRequires: golang >= 1.13
|
BuildRequires: golang >= 1.13
|
||||||
@ -109,6 +110,12 @@ install -p -m 0600 ./files/os-release %{buildroot}/opt/kubeOS/files
|
|||||||
rm -rfv %{buildroot}
|
rm -rfv %{buildroot}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 31 2022 liyuanrong<liyuanrong1@huawei.com> - 1.0.2-5
|
||||||
|
- Type:requirement
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:restart
|
||||||
|
- DESC:add the clearing of space before the upgrade and rectifying the rollback failure.
|
||||||
|
|
||||||
* Mon Aug 29 2022 liyuanrong<liyuanrong1@huawei.com> - 1.0.2-4
|
* Mon Aug 29 2022 liyuanrong<liyuanrong1@huawei.com> - 1.0.2-4
|
||||||
- Type:requirement
|
- Type:requirement
|
||||||
- CVE:NA
|
- CVE:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user