mirror of
https://github.com/linka-cloud/d2vm.git
synced 2026-05-12 18:38:15 +00:00
feat: Add grub and grub-efi boot support for Rocky and AlmaLinux 9+
Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
+1
-1
@@ -135,7 +135,7 @@ imgs:
|
|||||||
require.NoError(os.Remove(out))
|
require.NoError(os.Remove(out))
|
||||||
}
|
}
|
||||||
|
|
||||||
require.NoError(docker.RunD2VM(ctx, d2vm.Image, d2vm.Version, dir, dir, "convert", append([]string{"-p", "root", "-o", "/out/" + filepath.Base(out), "-v", "--keep-cache", img.name}, tt.args...)...))
|
require.NoError(docker.RunD2VM(ctx, d2vm.Image, d2vm.Version, dir, dir, "convert", append([]string{"-p", "root", "-o", "/out/" + filepath.Base(out), "-v", "--keep-cache", "--boot-size=250", img.name}, tt.args...)...))
|
||||||
|
|
||||||
inr, inw := io.Pipe()
|
inr, inw := io.Pipe()
|
||||||
defer inr.Close()
|
defer inr.Close()
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func (g grub) Setup(ctx context.Context, dev, root string, cmdline string) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer clean()
|
defer clean()
|
||||||
if err := g.install(ctx, "--target=x86_64-efi", "--efi-directory=/boot", "--no-nvram", "--removable", "--no-floppy"); err != nil {
|
if err := g.install(ctx, "--target=x86_64-efi", "--efi-directory=/boot", "--no-nvram", "--removable", "--no-floppy", "--force"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.install(ctx, "--target=i386-pc", "--boot-directory=/boot", dev); err != nil {
|
if err := g.install(ctx, "--target=i386-pc", "--boot-directory=/boot", dev); err != nil {
|
||||||
@@ -61,8 +61,8 @@ func (g grubProvider) New(c Config, r OSRelease, arch string) (Bootloader, error
|
|||||||
if arch != "x86_64" {
|
if arch != "x86_64" {
|
||||||
return nil, fmt.Errorf("grub is only supported for amd64")
|
return nil, fmt.Errorf("grub is only supported for amd64")
|
||||||
}
|
}
|
||||||
if r.ID == ReleaseCentOS || r.ID == ReleaseRocky || r.ID == ReleaseAlmaLinux {
|
if err := checkGrubEFISupport(r); err != nil {
|
||||||
return nil, fmt.Errorf("grub (efi) is not supported for CentOS / Rocky / AlmaLinux, use grub-bios instead")
|
return nil, err
|
||||||
}
|
}
|
||||||
return grub{grubCommon: newGrubCommon(c, r)}, nil
|
return grub{grubCommon: newGrubCommon(c, r)}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-3
@@ -17,6 +17,8 @@ package d2vm
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@@ -42,7 +44,7 @@ func (g grubEFI) Setup(ctx context.Context, dev, root string, cmdline string) er
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer clean()
|
defer clean()
|
||||||
if err := g.install(ctx, "--target="+g.arch+"-efi", "--efi-directory=/boot", "--no-nvram", "--removable", "--no-floppy"); err != nil {
|
if err := g.install(ctx, "--target="+g.arch+"-efi", "--efi-directory=/boot", "--no-nvram", "--removable", "--no-floppy", "--force"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.mkconfig(ctx); err != nil {
|
if err := g.mkconfig(ctx); err != nil {
|
||||||
@@ -56,8 +58,8 @@ type grubEFIProvider struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g grubEFIProvider) New(c Config, r OSRelease, arch string) (Bootloader, error) {
|
func (g grubEFIProvider) New(c Config, r OSRelease, arch string) (Bootloader, error) {
|
||||||
if r.ID == ReleaseCentOS || r.ID == ReleaseRocky || r.ID == ReleaseAlmaLinux {
|
if err := checkGrubEFISupport(r); err != nil {
|
||||||
return nil, fmt.Errorf("grub-efi is not supported for CentOS, use grub-bios instead")
|
return nil, err
|
||||||
}
|
}
|
||||||
return grubEFI{grubCommon: newGrubCommon(c, r), arch: arch}, nil
|
return grubEFI{grubCommon: newGrubCommon(c, r), arch: arch}, nil
|
||||||
}
|
}
|
||||||
@@ -66,6 +68,17 @@ func (g grubEFIProvider) Name() string {
|
|||||||
return "grub-efi"
|
return "grub-efi"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkGrubEFISupport(r OSRelease) error {
|
||||||
|
if r.ID == ReleaseCentOS {
|
||||||
|
return fmt.Errorf("grub (efi) is not supported for CentOS, use grub-bios instead")
|
||||||
|
}
|
||||||
|
v, _ := strconv.Atoi(strings.Split(r.VersionID, ".")[0])
|
||||||
|
if (r.ID == ReleaseAlmaLinux || r.ID == ReleaseRocky) && v < 9 {
|
||||||
|
return fmt.Errorf("grub (efi) is not supported for %s (%s), use 9+ releases or grub-bios instead", r.ID, r.VersionID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
RegisterBootloaderProvider(grubEFIProvider{})
|
RegisterBootloaderProvider(grubEFIProvider{})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ RUN set -e; \
|
|||||||
kver="$(basename "$dir")"; \
|
kver="$(basename "$dir")"; \
|
||||||
initrd="${dir}/initrd"; \
|
initrd="${dir}/initrd"; \
|
||||||
[ -e "$initrd" ] || continue; \
|
[ -e "$initrd" ] || continue; \
|
||||||
ln -sf "${linux#/boot/}" "/boot/vmlinuz-${kver}"; \
|
mv "${linux}" "/boot/vmlinuz-${kver}"; \
|
||||||
ln -sf "${initrd#/boot/}" "/boot/initramfs-${kver}.img"; \
|
mv "${initrd}" "/boot/initramfs-${kver}.img"; \
|
||||||
done
|
done
|
||||||
{{- else }}
|
{{- else }}
|
||||||
RUN cd /boot && \
|
RUN cd /boot && \
|
||||||
|
|||||||
Reference in New Issue
Block a user