diff --git a/cmd/control/install.go b/cmd/control/install.go index 36044a96..c705a944 100755 --- a/cmd/control/install.go +++ b/cmd/control/install.go @@ -841,9 +841,21 @@ func upgradeBootloader(device, baseName, bootDir, diskType string) error { return err } backupSyslinuxDir := filepath.Join(baseName, bootDir+"syslinux_backup") - if err := os.RemoveAll(backupSyslinuxDir); err != nil { - log.Errorf("RemoveAll (%s): %s", backupSyslinuxDir, err) - return err + if _, err := os.Stat(backupSyslinuxDir); !os.IsNotExist(err) { + backupSyslinuxLdlinuxSys := filepath.Join(backupSyslinuxDir, "ldlinux.sys") + if _, err := os.Stat(backupSyslinuxLdlinuxSys); !os.IsNotExist(err) { + //need a privileged container that can chattr -i ldlinux.sys + cmd := exec.Command("chattr", "-i", backupSyslinuxLdlinuxSys) + if err := cmd.Run(); err != nil { + log.Errorf("%s", err) + return err + } + } + + if err := os.RemoveAll(backupSyslinuxDir); err != nil { + log.Errorf("RemoveAll (%s): %s", backupSyslinuxDir, err) + return err + } } if err := os.Rename(grubDir, grubBackup); err != nil { diff --git a/scripts/installer/BaseDockerfile.amd64 b/scripts/installer/BaseDockerfile.amd64 index 8b8ca204..0f07b544 100644 --- a/scripts/installer/BaseDockerfile.amd64 +++ b/scripts/installer/BaseDockerfile.amd64 @@ -8,7 +8,8 @@ ENV KERNEL_VERSION=${KERNEL_VERSION} # not installed atm udev, grub2, kexe-tools # parted: partprobe, e2fsprogs: mkfs.ext4, syslinux: extlinux&syslinux -RUN apk --no-cache add syslinux parted e2fsprogs util-linux +# e2fsprogs-extra: chattr +RUN apk --no-cache add syslinux parted e2fsprogs e2fsprogs-extra util-linux COPY conf /scripts/ COPY ./build/ros /bin/