ERROR: cannot create symlinks /boot/vmlinuz and /boot/initrd

# inxi -S
System:
  Host: gx745 Kernel: 6.18.9-1-default arch: x86_64 bits: 64
  Console: pty pts/1 Distro: openSUSE Tumbleweed 20260416
# df -h /boot
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda9       9.5G  5.7G  3.3G  64% /
# time rpm -ivh <localdir>/kernel-longterm-6.12.74-1.2.x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-longterm-6.12.74-1.2      ################################# [100%]
ERROR: cannot create symlinks /boot/vmlinuz and /boot/initrd

real    0m48.548s
user    0m52.067s
sys     0m7.030s
# ls -lh /boot/vmlinuz /boot/initrd /boot/vmlinuz-6.12.74-1-longterm /boot/ini*6.12.74-1-longterm.img
ls: cannot access '/boot/vmlinuz': No such file or directory
ls: cannot access '/boot/initrd': No such file or directory
-rw------- 1 root root 26M Apr 17 18:07 /boot/initramfs-6.12.74-1-longterm.img
lrwxrwxrwx 1 root root  45 Apr 17 18:07 /boot/vmlinuz-6.12.74-1-longterm -> ../usr/lib/modules/6.12.74-1-longterm/vmlinuz
#

I looked for a recent bug report, but didn’t find one. Is this happening to others?

No such problem here.

Is your /boot path mounted correctly? I’d start with investigating why /boot/vmlinuz and /boot/initrd are missing.

@mrmazda does the same happen when using the distribution tools like zypper?

zypper in <localdir>/kernel-longterm-6.12.74-1.2.x86_64.rpm

Bypassing distribution solutions may lead to such problems. As your systems are 100% non-standard, it will be hard for anybody to recreate your handcrafted system setups.

1 Like

/boot is on the / filesystem. I didn’t come up with any ideas how to discover “why”, hence asking here. Manual creation was no problem.

When did you last have a new kernel installed? A day or two ago I had no such problem with the very same old longterm kernel on a different installation. Is your most recent an initramfs.img rather than an initrd?

Haven’t tried yet. Hospital and rehab got me way behind. I’m still quite mentally and physically challenged.

zypper in <localdir>/kernel-longterm-6.12.74-1.2.x86_64.rpm

Next installation’s dup I’ll try, but I’ve been using rpm for kernels in part because it’s quieter and quicker, given I have them locked. Also, it’s a years’ old habit with local packages, a standout in grepping through bash history.

You got that right, e.g.: https://bugzilla.opensuse.org/show_bug.cgi?id=1246561 opened 2025-07-15
I suspect a bug any time zypper can do something rpm cannot. I’ve reported a number of bugs that got fixed over the years by being a maverick. Installations here except for the LAN server all exist for the purpose of attempting to recreate reported problems, and otherwise testing what works or not.

They don’t really deviate that much, unless you count absence of Gnome, snapshotting and/or btrfs. When Dimstar reports a new kernel, I fetch via script with wget to the LAN server’s release directory rather than it’s mirror cache, to preserve the mirror’s timestamp instead of zypper applying the download time. I can expect a number of installations to be getting any given kernel, and bandwidth thus is saved.

How much trouble would it be to try? Fetch a longterm kernel with zypper download-only on a system lacking any longterms, then install it with rpm.

The difference here IMO seems the change from initrd to initramfs in /boot/ means some script(s) must have needed a change that didn’t get done right.

Yesterday. However, it was not the longterm kernel.

Installed kernels before test (VM with no prior longterm kernel installed):

test@twtestbox:~> LANG=C zypper se -si kernel
Loading repository data...
Reading installed packages...

S  | Name                                    | Type    | Version        | Arch   | Repository
---+-----------------------------------------+---------+----------------+--------+-----------------------
i+ | kernel-default                          | package | 6.19.2-1.1     | x86_64 | (System Packages)
i+ | kernel-default                          | package | 6.19.12-1.1    | x86_64 | Haupt-Repository (OSS)
i  | kernel-firmware-all                     | package | 20250206-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-amdgpu                  | package | 20260410-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-ath10k                  | package | 20260206-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-ath11k                  | package | 20260327-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-ath12k                  | package | 20260317-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-atheros                 | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-bluetooth               | package | 20260408-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-bnx2                    | package | 20250627-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-brcm                    | package | 20250623-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-chelsio                 | package | 20250627-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-dpaa2                   | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-i915                    | package | 20260402-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-intel                   | package | 20260408-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-iwlwifi                 | package | 20260331-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-liquidio                | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-marvell                 | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-media                   | package | 20260331-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-mediatek                | package | 20260317-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-mellanox                | package | 20260110-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-mwifiex                 | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-network                 | package | 20260327-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-nfp                     | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-nvidia                  | package | 20260408-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-platform                | package | 20260305-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-prestera                | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-qcom                    | package | 20260408-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-qlogic                  | package | 20250926-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-radeon                  | package | 20250627-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-realtek                 | package | 20260214-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-serial                  | package | 20260327-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-sound                   | package | 20260408-1.1   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-ti                      | package | 20250206-2.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-ueagle                  | package | 20251004-1.2   | noarch | Haupt-Repository (OSS)
i  | kernel-firmware-usb-network             | package | 20250717-1.2   | noarch | Haupt-Repository (OSS)
i  | libabsl_kernel_timeout_internal2601_0_0 | package | 20260107.1-1.1 | x86_64 | Haupt-Repository (OSS)
i  | purge-kernels-service                   | package | 0-9.10         | noarch | Haupt-Repository (OSS)
test@twtestbox:~> 

Downloading longterm kernel:

test@twtestbox:~> LANG=C sudo zypper in --download-only kernel-longterm
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is suggested, but will not be installed:
  systemd-boot

The following 2 NEW packages are going to be installed:
  kernel-longterm virtualbox-kmp-longterm

The following package requires a system reboot:
  kernel-longterm

2 new packages to install.

Package download size:   197.2 MiB

Download only.

    Note: --download-only is set, otherwise a system reboot would be required.

Backend:  classic_rpmtrans --download-only
Continue? [y/n/v/...? shows all options] (y): 
Preloading: virtualbox-kmp-longterm-7.2.6_k6.18.22_1-9.1.x86_64.rpm [done]
Preloading: kernel-longterm-6.18.22-1.1.x86_64.rpm [done]
Preload finished. [success (5.3 MiB/s) ] ........................................................................................................................................................................................................................[done]
Retrieving: kernel-longterm-6.18.22-1.1.x86_64 (Haupt-Repository (OSS))                                                                                                                                                                            (1/2), 196.7 MiB    
Retrieving: virtualbox-kmp-longterm-7.2.6_k6.18.22_1-9.1.x86_64 (Haupt-Repository (OSS))                                                                                                                                                           (2/2), 543.3 KiB    
test@twtestbox:~> 

Installing via rpm:

test@twtestbox:~> LANG=C sudo rpm -ivh /var/cache/zypp/packages/download.opensuse.org-oss/x86_64/kernel-longterm-6.18.22-1.1.x86_64.rpm
[sudo] password for root: 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-longterm-6.18.22-1.1      ################################# [100%]
test@twtestbox:~> 

So the issue is not easily reproducible on a standard TW install.

I suppose with >160 build errors we may not be able to expect a 20260417 snapshot, so I tried as follows:

# zypper in /nfs/00srv/pub/Linux/Suse/Factory/kernel-longterm-6.18.22-1.1.x86_64.rpm
'/nfs/00srv/pub/Linux/Suse/Factory/kernel-longterm-6.18.22-1.1.x86_64.rpm' looks like an RPM file. Will try to use it.
Loading repository data...
Reading installed packages...
Resolving package dependencies...

Problem: 1: conflicting requests
 Solution 1: do not ask to install a solvable providing kernel-longterm.x86_64 = 6.18.22-1.1
 Solution 2: remove lock to allow installation of kernel-longterm-6.18.22-1.1.x86_64[_tmpRPMcache_]
 Solution 3: remove lock to allow installation of kernel-longterm-6.18.22-1.1.x86_64[OSS]

Choose from above solutions by number or cancel [1/2/3/c/d/?] (c): 2

Resolving dependencies...
Resolving package dependencies...

The following NEW package is going to be installed:
  kernel-longterm-6.18.22-1.1

The following package requires a system reboot:
  kernel-longterm-6.18.22-1.1

1 new package to install.

Package download size:   196.7 MiB

Package install size change:
              |     276.0 MiB  required by packages that will be installed
   276.0 MiB  |  -      0 B    released by packages that will be removed

    Note: System reboot required.

Backend:  classic_rpmtrans
Continue? [y/n/v/...? shows all options] (y): y

Checking for file conflicts: (1 skipped) ..............................................................................................................................................[done]
Warning: 1 package had to be excluded from file conflicts check because it is not yet download.

    Note: Checking for file conflicts requires not installed packages to be downloaded in advance in
    order to access their file lists. See option '--download-in-advance / --dry-run --download-only'
    in the zypper manual page for details.

Retrieving: kernel-longterm-6.18.22-1.1.x86_64 (Plain RPM files cache)                                                                                                   (1/1), 196.7 MiB
(1/1) Installing: kernel-longterm-6.18.22-1.1.x86_64 ..................................................................................................................................[done]
%posttrans(kernel-longterm-6.18.22-1.1.x86_64) script output:
ERROR: cannot create symlinks /boot/vmlinuz and /boot/initrd
Running post-transaction scripts ......................................................................................................................................................[done]
# ls -l /boot/vml*
lrwxrwxrwx 1 root root 26 Apr 17 18:26 /boot/vmlinuz -> vmlinuz-6.12.74-1-longterm
lrwxrwxrwx 1 root root 25 Oct 16  2024 /boot/vmlinuz61011 -> vmlinuz-6.10.11-1-default
lrwxrwxrwx 1 root root 44 Oct 16  2024 /boot/vmlinuz-6.10.11-1-default -> ../usr/lib/modules/6.10.11-1-default/vmlinuz
lrwxrwxrwx 1 root root 24 Dec 21  2024 /boot/vmlinuz61108 -> vmlinuz-6.11.8-1-default
lrwxrwxrwx 1 root root 43 Dec 21  2024 /boot/vmlinuz-6.11.8-1-default -> ../usr/lib/modules/6.11.8-1-default/vmlinuz
lrwxrwxrwx 1 root root 26 Apr 17 18:26 /boot/vmlinuz61274 -> vmlinuz-6.12.74-1-longterm
lrwxrwxrwx 1 root root 45 Apr 17 18:07 /boot/vmlinuz-6.12.74-1-longterm -> ../usr/lib/modules/6.12.74-1-longterm/vmlinuz
lrwxrwxrwx 1 root root 24 Apr 23  2025 /boot/vmlinuz61308 -> vmlinuz-6.13.8-1-default
lrwxrwxrwx 1 root root 43 Apr 23  2025 /boot/vmlinuz-6.13.8-1-default -> ../usr/lib/modules/6.13.8-1-default/vmlinuz
lrwxrwxrwx 1 root root 24 Jun 11  2025 /boot/vmlinuz61406 -> vmlinuz-6.14.6-2-default
lrwxrwxrwx 1 root root 43 Jun 11  2025 /boot/vmlinuz-6.14.6-2-default -> ../usr/lib/modules/6.14.6-2-default/vmlinuz
lrwxrwxrwx 1 root root 24 Oct  3  2025 /boot/vmlinuz61508 -> vmlinuz-6.15.8-1-default
lrwxrwxrwx 1 root root 43 Oct  3  2025 /boot/vmlinuz-6.15.8-1-default -> ../usr/lib/modules/6.15.8-1-default/vmlinuz
lrwxrwxrwx 1 root root 24 Dec  7 13:35 /boot/vmlinuz61609 -> vmlinuz-6.16.9-1-default
lrwxrwxrwx 1 root root 43 Dec  7 13:35 /boot/vmlinuz-6.16.9-1-default -> ../usr/lib/modules/6.16.9-1-default/vmlinuz
lrwxrwxrwx 1 root root 24 Dec 31 17:12 /boot/vmlinuz61709 -> vmlinuz-6.17.9-1-default
lrwxrwxrwx 1 root root 43 Dec 31 17:11 /boot/vmlinuz-6.17.9-1-default -> ../usr/lib/modules/6.17.9-1-default/vmlinuz
lrwxrwxrwx 1 root root 24 Mar  8 17:23 /boot/vmlinuz61809 -> vmlinuz-6.18.9-1-default
lrwxrwxrwx 1 root root 45 Apr 18 12:14 /boot/vmlinuz-6.18.22-1-longterm -> ../usr/lib/modules/6.18.22-1-longterm/vmlinuz
lrwxrwxrwx 1 root root 43 Mar  8 17:16 /boot/vmlinuz-6.18.9-1-default -> ../usr/lib/modules/6.18.9-1-default/vmlinuz
lrwxrwxrwx 1 root root 26 Apr 17 18:26 /boot/vmlinuz-cur -> vmlinuz-6.12.74-1-longterm
lrwxrwxrwx 1 root root 26 Apr 17 18:26 /boot/vmlinuz-ltp -> vmlinuz-6.12.74-1-longterm
lrwxrwxrwx 1 root root 24 Mar  8 17:23 /boot/vmlinuz-prv -> vmlinuz-6.18.9-1-default
lrwxrwxrwx 1 root root 24 Dec 31 17:12 /boot/vmlinuz-prv2 -> vmlinuz-6.17.9-1-default
# ls -l /boot/ | grep 6.18.22 && ls -l /boot/vmlinuz /boot/initrd /boot/initra*
lrwxrwxrwx 1 root root       44 Apr 18 12:14 config-6.18.22-1-longterm -> ../usr/lib/modules/6.18.22-1-longterm/config
-rw------- 1 root root 28890928 Apr 18 12:14 initramfs-6.18.22-1-longterm.img
lrwxrwxrwx 1 root root       49 Apr 18 12:14 sysctl.conf-6.18.22-1-longterm -> ../usr/lib/modules/6.18.22-1-longterm/sysctl.conf
lrwxrwxrwx 1 root root       48 Apr 18 12:14 System.map-6.18.22-1-longterm -> ../usr/lib/modules/6.18.22-1-longterm/System.map
lrwxrwxrwx 1 root root       45 Apr 18 12:14 vmlinuz-6.18.22-1-longterm -> ../usr/lib/modules/6.18.22-1-longterm/vmlinuz
lrwxrwxrwx 1 root root       51 Apr 18 12:14 .vmlinuz-6.18.22-1-longterm.hmac -> ../usr/lib/modules/6.18.22-1-longterm/.vmlinuz.hmac
lrwxrwxrwx 1 root root       32 Apr 18 12:14 .vmlinuz.hmac -> .vmlinuz-6.18.22-1-longterm.hmac
-rw------- 1 root root 27124492 Apr 17 18:07 /boot/initramfs-6.12.74-1-longterm.img
-rw------- 1 root root 28890928 Apr 18 12:14 /boot/initramfs-6.18.22-1-longterm.img
lrwxrwxrwx 1 root root       32 Apr 17 18:26 /boot/initrd -> initramfs-6.12.74-1-longterm.img
lrwxrwxrwx 1 root root       26 Apr 17 18:26 /boot/vmlinuz -> vmlinuz-6.12.74-1-longterm
#

Time to try to reproduce on another host I guess…

BTW, this is on an ancient core2duo host (v1).

Possible clue:

# ls -l /boot/efi /boot/grub2
---------- 1 root root 0 Feb 10  2015 /boot/efi
---------- 1 root root 0 Feb 10  2015 /boot/grub2
#

This is MBR disk booting all installations from 13.1’s Grub Legacy, so has no use for efi or grub2 directories. We’ll see when I try another MBR installation after renaming those files…

# zypper --no-refresh se -s -i grub | egrep -v 'debug|devel|srcp|openSUSE-20' | egrep 'x86|noarch'| sort -f
il | grub | package | 0.97-203.7 | x86_64 | (System Packages)
# zypper ll | grep grub
16 | grub*                | package | (any)      |
#

Not counting OP host, I’ve dup’d 8 other TW hosts since OP. On 7 of them I also installed the LT 6.12.74 kernel, and on 3 I also or instead installed LT 6.18.2[2,3]. On none since did the kernel installation behavior match the OP host - IOW, no reproduction. OTOH, the OP differed from all others in creating /boot/initramfs-6.12.74-1-longterm.img instead of /boot/initrd-6.12.74-1-longterm. There are >20 more installations to catch up on, but I’m in no rush to get them all more current. All but one were last done in February or March, the other one my rarely used older iMac in December.

I’ve installed 6.12.74 on all TW installations it ever will be here, 31 in total, all via rpm directly, and none of the other 30 reproduced the aberration reported in OP here for host gx745. Various 6.18, 6.19 and 7.0 kernels were also installed on some, also without reproducing on any of them.

However, I just installed 6.19.12 on gx745, and again, initramfs instead of initrd was created for 6.19.12, just as occurred for 6.18.22 the day after OP.

# fdisk -l | grep abel
Disklabel type: dos
# lsblk -f | grep vfat
├─sda1  vfat   FAT32 P01ST10C    0097-17BB
├─sda2  vfat   FAT32 SS10P02DOS  5304-2A90
└─sda27 vfat   FAT32 ST10DOSARK  505B-7569
# zypper --no-refresh se -s -i grub | egrep -v 'debug|devel|srcp|openSUSE-20' | egrep 'x86|noarch'| sort -f
il | grub | package | 0.97-203.7 | x86_64 | (System Packages)
# grep LOADER /etc/sysconfig/bootloader
LOADER_TYPE="none"
# grep fat /etc/fstab
/dev/sda1  /disks/C vfat noatime,noauto,users,gid=1000,dmask=0000,fmask=0111,utf8=true 0 0
/dev/sda27 /disks/Y vfat noatime,noauto,users,gid=1000,dmask=0000,fmask=0111,utf8=true 0 0
# ls -gGrt /boot/initrd6*
lrwxrwxrwx 1 24 Oct 16  2024 /boot/initrd61011 -> initrd-6.10.11-1-default
lrwxrwxrwx 1 23 Dec 21  2024 /boot/initrd61108 -> initrd-6.11.8-1-default
lrwxrwxrwx 1 23 Apr 23  2025 /boot/initrd61308 -> initrd-6.13.8-1-default
lrwxrwxrwx 1 23 Jun 11  2025 /boot/initrd61406 -> initrd-6.14.6-2-default
lrwxrwxrwx 1 23 Oct  3  2025 /boot/initrd61508 -> initrd-6.15.8-1-default
lrwxrwxrwx 1 23 Dec  7 13:35 /boot/initrd61609 -> initrd-6.16.9-1-default
lrwxrwxrwx 1 23 Dec 31 17:12 /boot/initrd61709 -> initrd-6.17.9-1-default
lrwxrwxrwx 1 32 Apr 17 18:26 /boot/initrd61274 -> initramfs-6.12.74-1-longterm.img
lrwxrwxrwx 1 32 Apr 18 12:42 /boot/initrd61822 -> initramfs-6.18.22-1-longterm.img
lrwxrwxrwx 1 31 May  1 19:46 /boot/initrd61912 -> initramfs-6.19.12-1-default.img
# ls -gGrt /boot/ini*6.*
-rw------- 1 17406256 Oct 16  2024 /boot/initrd-6.10.11-1-default
-rw------- 1 17439008 Dec 21  2024 /boot/initrd-6.11.8-1-default
-rw------- 1 18032580 Apr 23  2025 /boot/initrd-6.13.8-1-default
-rw------- 1 18238800 Jun 11  2025 /boot/initrd-6.14.6-2-default
-rw------- 1 18895224 Oct  3  2025 /boot/initrd-6.15.8-1-default
-rw------- 1 20013080 Dec  7 13:35 /boot/initrd-6.16.9-1-default
-rw------- 1 19949352 Dec 31 17:12 /boot/initrd-6.17.9-1-default
-rw------- 1 27124492 Apr 17 18:07 /boot/initramfs-6.12.74-1-longterm.img
-rw------- 1 28890928 Apr 18 12:14 /boot/initramfs-6.18.22-1-longterm.img
-rw------- 1 28990424 May  1 19:25 /boot/initramfs-6.19.12-1-default.img

To have 6.19.12 vmlinuz and initrd symlinks (used by my default 13.1’s Grub Legacy Gfxboot bootloader’s TW stanzas on all MBR booting systems except one), I had to create them. I’m out of ideas what to look at trying to find what config could be different on this one old host from the 20+ other TW installations booting in same manner, and those booting EFI. :stuck_out_tongue: