This page is just for reference and to explain what happens when you
  upgrade grub without grub-install  being run afterwards.  The alpine
  official docs should  take precedence over what is  listed here.  An
  official note on this is now up from Alpine itself:

  https://wiki.alpinelinux.org/wiki/Release_Notes_for_Alpine_3.20.0#grub_2.12

  Don't use  these instructions verbatum.   Refer to them at  your own
  risk. Your system is likely configured differently than mine so your
  solution will  most likely need  modifications to be  successful and
  not cause any data loss.  The purpose of this writeup is to give you
  an idea of what is necessary, not necessarily the exact process.

  What happened:  grub updated and now system is un-bootable

  I recently upgraded my alpine edge  system and due to lack of coffee
  didn't  notice  that  grub  was  updated.   Grub  was  updated  from
  2.06->2.12  and  apk will  not  automatically  run the  grub-install
  command.  This results in unbootable  system which isn't a bug, it's
  just something you might have to do yourself.

  Prior to  the update,  my system's  high level  basic config  is the
  following.  EFI boot,  no encryption, using ZFS but not  for my root
  or boot  partition so  I'm not including  those details,  they don't
  matter in my case:

       Filesystem      Size  Used Avail Use% Mounted on
       /dev/nvme1n1p3  464G   65G  376G  15% /
       /dev/nvme1n1p1  511M  296K  511M   1% /boot/efi

  The fix  at a  high level  is to boot  a rescue  alpine disk  (I use
  alpine-extended iso from 3.19).

  step1 boot alpine-extended 3.19 iso image from USB to perform rescue

  We   need  to   mount  _both_   my  root   (/)  and   EFI  partition
  hierarchically under /mnt as such:

      localhost# mount -t ext4 -o rw /dev/nvme1n1p3 /mnt
      localhost# mount -t vfat -o rw /dev/nvme1n1p1 /mnt/boot/efi

  We will eventually chroot into this environment but first we need to
  mount some of the in-memory  file systems so that commands will work
  properly later:

      localhost# mount -t proc none /mnt/proc
      localhost# mount -t sysfs /sys /mnt/sys
      localhost# mount --bind /dev /mnt/dev
      localhost# mount --bind /dev/pts /mnt/dev/pts

  Now we are going  to chroot into /mnt so that we  can pretend we can
  use the new grub user tools that we accidentally updated to:

      localhost# chroot /mnt

  These  commands are  now from  the perspective  of your  un-bootable
  system and  we will now run  the grub-install command as  such.  You
  will need to make sure these paths and arguments match your personal
  config:

    chroot# grub-install --target=x86_64-efi --bootloader-id=GRUB \
  		         --efi-directory=/boot/efi --no-nvram --removable

  Before we are done, also  make sure that your /etc/default/grub file
  is in the correct state.  Specifically the line:

  GRUB_CMDLINX_LINUX_DEFAULT="some stuff in here - important"

  If the  grub update left this  file missing that line  and your line
  had custom settings,  they might have been lost, add  that line back
  if  missing/needed.  In  my  case, it  specifies  modules and  other
  settings:

    modules=sd-mod,usb-storage,ext4,nvme quiet cgroup_no_v1=all rootfstype=ext4

  See the docs  for grub-mkconfig for more information.   Also, if you
  are smart,  save the  contents of /proc/cmdline  for your  system in
  case you ever  want to know what  is being passed to  your kernel at
  boot time.

  After  this, I  just  type exit  from the  chroot,  umount the  file
  systems and rebooted.

     chroot# exit
     localhost# umount /mnt/boot/efi
     localhost# umount /mnt
     localhost# reboot

  Your mileage may vary, but this is the process I use for my system.

  Addendum: What does the EFI hierarchy look like when grub-install is
  run successfully?  On my system it looks like this:

  /boot/efi
  |- EFI/
   |----|  alpine/
   |    |----- grubx64.efi
   |----|  boot/
        |----- bootx64.efi

  Also, it's good to know how EFI  is setup on your computer, the tool
  efibootmgr is usefule for this.  Examine the configuration below:

  $ efibootmgr
  BootCurrent: 000D
  Timeout: 1 seconds
  BootOrder: 000D,000E,000F,0010
  Boot0002  Samsung SSD 960 PRO 512GB	BBS(HD,,0x0)0000424f
  Boot0005  INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  Boot0006  INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  Boot000B  iODD External HDD	BBS(HD,,0x0)0000424f
  Boot000D* UEFI OS	HD(1,GPT,84d302fc-7c77-7245-b630-2248ddc49b30,0x800,0x100000)/File(\EFI\BOOT\BOOTX64.EFI)0000424f
  Boot000E* Samsung SSD 960 PRO 512GB	BBS(HD,,0x0)0000424f
  Boot000F* INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  Boot0010* INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  Note the lines: BootCurrent:, BootOrder: and Boot000D* above.  We have:

  BootCurrent ->  000D and the Boot000D  line tells EFI to  use a file
  named efi\boot\bootx64.efi:

  Verbose output:

  $ efibootmgr -v
  BootCurrent: 000D
  Timeout: 1 seconds
  BootOrder: 000D,000E,000F,0010
  Boot0002  Samsung SSD 960 PRO 512GB	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot0005  INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot0006  INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot000B  iODD External HDD	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot000D* UEFI OS	HD(1,GPT,84d302fc-7c77-7245-b630-2248ddc49b30,0x800,0x100000)/File(\EFI\BOOT\BOOTX64.EFI)0000424f
  dp: 04 01 2a 00 01 00 00 00 00 08 00 00 00 00 00 00 00 00 10 00 00 00 00 00 fc 02 d3 84 77 7c 45 72 b6 30 22 48 dd c4 9b 30 02 02 / 04 04 30 00 5c 00 45 00 46 00 49 00 5c 00 42 00 4f 00 4f 00 54 00 5c 00 42 00 4f 00 4f 00 54 00 58 00 36 00 34 00 2e 00 45 00 46 00 49 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot000E* Samsung SSD 960 PRO 512GB	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot000F* INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f
  Boot0010* INTEL SSDPEDMW012T4	BBS(HD,,0x0)0000424f
  dp: 05 01 09 00 02 00 00 00 00 / 7f ff 04 00
  data: 00 00 42 4f