initramfs creation fails: Default boot partition size too small for some devices.
When running "apk upgrade" on a fresh sxmo 1.3.0 image, the following error is seen when trying to rebuild the initramfs:
-snip-
(129/131) Upgrading sxmo-xdm-config-openrc (0.2.1-r1 -> 0.2.2-r0)
(130/131) Upgrading postmarketos-ui-sxmo (1.3.0-r1 -> 1.3.2-r0)
Executing postmarketos-ui-sxmo-1.3.2-r0.post-upgrade
* rc-update: sxmo-pinephone already installed in runlevel `default'; skipping
* rc-update: modemmanager already installed in runlevel `default'; skipping
* rc-update: xdm already installed in runlevel `default'; skipping
(131/131) Purging llvm10-libs (10.0.1-r1)
Executing busybox-1.33.0-r4.trigger
Executing glib-2.66.7-r1.trigger
Executing eudev-3.2.10-r0.trigger
Executing dbus-1.12.20-r2.trigger
Executing ca-certificates-20191127-r5.trigger
Executing kmod-28-r0.trigger
depmod: WARNING: could not open modules.order at /lib/modules/5.10.12: No such file or directory
depmod: WARNING: could not open modules.builtin at /lib/modules/5.10.12: No such file or directory
Executing fontconfig-2.13.1-r3.trigger
Executing mkfontscale-1.2.1-r1.trigger
Executing postmarketos-mkinitfs-0.22-r0.trigger
==> initramfs: creating /boot/initramfs-postmarketos-allwinner
Scanning kernel module dependencies...
NOTE: ** modprobe warnings below can be ignored ** if your device does not run the
mainline kernel yet (most devices!) or if the related kernel options are enabled
with 'y' instead of 'm' (module).
- deviceinfo: sun6i_mipi_dsi sun4i_drm pwm_sun4i sun8i_mixer anx7688 gpio_vibra
- 00-default.modules: dm_crypt ext4 usb_f_rndis
==> kernel: device-tree blob operations
==> kernel: copying dtb allwinner/sun50i-a64-pinephone-1.1 allwinner/sun50i-a64-pinephone-1.2 to boot partition
==> initramfs: creating uInitrd
Image Name: uInitrd
Created: Wed Mar 17 23:04:31 2021
Image Type: AArch64 Linux RAMDisk Image (uncompressed)
Data Size: 1442774 Bytes = 1408.96 KiB = 1.38 MiB
Load Address: 00000000
Entry Point: 00000000
==> kernel: creating uImage
Image Name: postmarketos
Created: Wed Mar 17 23:04:32 2021
Image Type: AArch64 Linux Kernel Image (uncompressed)
Data Size: 19752968 Bytes = 19290.01 KiB = 18.84 MiB
Load Address: 80008000
Entry Point: 80008000
==> initramfs: creating /boot/initramfs-postmarketos-allwinner-extra
gzip: write error: No space left on device
cpio: write error: Broken pipe
Executing postmarketos-base-10-r0.trigger
Configuring a getty on port ttyS0 with baud rate 115200
Executing gtk-update-icon-cache-2.24.33-r0.trigger
OK: 792 MiB in 426 packages
This is because:
- the initramfs-postmarketos-allwinner-extra file is being created on the /boot partition
- the new initramfs file is 46M in size, and there's only 33M free on /boot
- the new initramfs is 37% larger than the old initramfs(34M).
- libLLVM-10.so (62M) was replaced with libLLVM-11.so (89M).
Possible solutions:
- Default boot_size be increased to at least 160M, with 200M preferable.
- Create new initramfs files outside boot partition, then overwrite.
- Trust users of pmbootstrap to predict and use safe value for boot_size option.
- Have script remove existing initramfs from /boot before building new one
Additional information:
Comparison of libLLVM-##.so files sizes (output from du
, in bytes):
62292864 old/usr/lib/libLLVM-10.so
88811280 new/usr/lib/libLLVM-11.so
df -h /boot
output prior to upgrade:
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 114M 75M 33M 81% /boot
df -h /boot
output after (manual) upgrade:
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 114M 87M 21M 81% /boot