Alpine Linux persistent storage on the Raspberry Pi

Alpine runs in memory on the Pi, which is great for performance, security, and for minimizing wear on the SD-card. The downside is that it has no persistent storage. Everything done on such a system is cleared out on reboot.

There are some measures that can be taken to have persistent storage on a Pi with Alpine Linux.

Create a /home directory on the SD-card

When a 32 GB SD card is used then the OS uses the first 16 GB, leaving about 15 GB for a /home partitition. Assuming the SD-card is accesible under /dev/mmcblk0, then the first partition used for Alpine boot is /dev/mmcblk01, and a new partition /dev/mmcblk02 can be added for /home.

Then install the file system utilities e2fsprogs for ext4 and format the new disk partition:

# apk add e2fsprogs
# mkfs.ext4 -L AlpineHome /dev/mmcblk0p2

Make the SD-card accessible by updating file /etc/fstab as follows:

# <fs> <mountpoint> <type> <opts> <dump> <pass>
/dev/cdrom /media/cdrom iso9660 noauto,ro 0 0
/dev/usbdisk /media/usb vfat noauto,ro 0 0
/dev/mmcblk0p1 /media/mmcblk0p1 vfat rw,relatime,errors=remount-ro 0 0
/dev/mmcblk0p2 /home ext4 rw,noatime,errors=remount-ro 0 0

Optionally the mount points for /dev/cdrom and /dev/usbdisk could be commented out if they are not needed..

Saving system settings

In order to save configuration settings and be able to use installed package after a reboot, Alpine makes use of the local backup utility lbu.

Lbu needs to know where to save its backup. Run lbu-setup to configure the backup location, in our case it is mmcblk0p1. The result is reflected in file /etc/lbu/lbu.conf.

Basically what lbu does is analyze the difference between the system setup on disk and the actual running setup in memory. The detected changes are written to a gzipped tar file, that is unpacked at boot.

Typically the changes made are in the /etc directory. If other directories or files needs to be monitored for change too, then they need to be added with lbu add <path>. Where path can be a file or a directory. The result can be found in /etc/apk/protected_paths.d/lbu.lst.

Saving installed packges

When Alpine boots, it should reinstall all the packages added earlier. For that to work, a local package cache should be set up. This is done though the command setup-apkcache. Basically what is does is setup a soft link from /etc/apk/cache towards a directory on persistent storage. Assuming the SD-card is mounted at /media/mmcblk0p1:

# mkdir /media/mmcblk0p1/cache
# setup-apkcache 
Enter apk cache directory (or '?' or 'none') [/media/mmcblk0p1/cache]
# lbu commit

When the Pi boots, it will reinstall the packages.

Pages