Raspberry Pi

This page explains how to install and use Alpine Linux on Raspberry Pi. 
For scenarios where there is not expected to be significant changes to disk after setup (like running a static HTTP server), diskless mode is preferable, as running the entire system from memory will improve performance (by avoiding the slow SD card) and improve the SD card life (by reducing the writes to the card, as all logging will happen in RAM). Use Alpine Local Backup (lbu) utility to install packages, save local files, and tune the system.
sys-mode installation is more appropriate for the following use cases:
* There will be constant changes to the disk after initial setup (for example, if you expect people to login and save files to their home directories)
* Logs should persists across reboots
* Plan to install packages which consume more space than can be loaded into RAM
* Plan to install kernel modules (such as ZFS)
== Compatibility list ==
Refer to the information regarding Raspberry Pi models in the below table when choosing image/file to download from Downloads page for your device. Verify the downloaded image before proceeding further.
== Preparing for the installation==
SD card based install media can easily be generated with few clicks using Raspberry Pi Imager tool on Linux/macOS/Windows. In Alpine linux, install the package and launch the tool: 
Follow the prompts to create install media on sd-card. When using this tool, there is no need to partition and format as the tool does everything and creates the sd card based install media. Proceed to Installation, if no further customization is required.
=== Manual method === 
Alternatively, image may be downloaded, and media formatted and prepared as per below:
* Download the Alpine for Raspberry Pi tarball. Use the compability list above when choosing image/file to download. 
* Create a bootable FAT32 partition on your SD card. The partitioning and formatting part of the instructions on the linked page could be done using a graphical partitioning tool such as gnome-disks, just make sure the partition type is W95 FAT32 (LBA). (The current type can be found in the "Type" column in the output of fdisk -l.)
*: 
* Extract the tarball to the root of the bootable FAT32 partition.
* It is recommended to create a usercfg.txt file on boot partition to configure low-level system settings, as config.txt may be replaced during bootloader/system upgrades: details can be found here. However, some settings can only be set in config.txt, and will have no effect when specified in usercfg.txt (e.g. gpu_mem). Some interesting values include:
* By default system will use legacy video driver: some options may be used to adjust displays modes (e.g. if you see black edges around your screen after booting the Pi, you can add disable_overscan=1). Alternatively Linux DRM-KMS driver may be used (see below).
* If you plan to install on a Pi Computer Module 4 with I/O board, you may need to add: otg_mode=1
* Pi Zero may be configured as simple USB serial-gadget or ethernet-gadget networking with another computer sharing its internet connection.
* For headless use, use the following parameters to maximize available memory (32 megs is required for the rpi bootloader):gpu_mem=32
=== Headless pi ===
To setup a headless system, a bootstrapping configuration overlay file headless.apkovl.tar.gz may be added to the sd card based Install media. To enable wifi, create a file in the install media as follows: 
Alternately, use wpa_passphrase utility from package to create the encrypted version of the above file as follows: and place it on the install media.
With the above setup, following Installation steps can be performed remotely using ssh. 
* Use to find the ip of your pi. 
* Refer author's website for other options.
== Installation ==
Follow these steps to install Alpine Linux in Diskless Mode:
# Insert the SD card into the Raspberry Pi and power it on
# Login into the Alpine system as root. Leave the password empty.
# Check the current date and time by issuing date. Correct if necessary by issuing date -s YYYYMMDDhhmm.
# Type setup-alpine
# Once the installation is complete, commit the changes by typing lbu commit -d
Type reboot to verify that the installation was indeed successful.
== Post Installation ==
=== Update the System ===
After installation, make sure your system is up-to-date:
Don't forget to save the changes:
Note: this does not upgrade the kernel. In order to upgrade the kernel, a full upgrade of the Alpine Linux version must be performed as described in upgrading Alpine Linux for removable media.
=== Linux Kernel Graphics Modes ===
By default system configuration will use legacy video driver: this driver has some limitations and is lacking support.
It is recommended to enable Linux DRM-KMS driver by adding the following to usercfg.txt:
 # Enable DRM VC4 V3D driver
 dtoverlay=vc4-kms-v3d
 max_framebuffers=2
 
 # Don't have the firmware create an initial video= setting in cmdline.txt.
 # Use the kernel's default instead.
 disable_fw_kms_setup=1
Note: This overlay disables legacy video options.
Install the Mesa drivers (Pi4 and Pi5):
Then reboot:
=== Wireless drivers ===
As of Alpine 3.17, Wifi and Bluetooth drivers are available within install image: they are part of linux-firmware-brcm (and linked dependencies). Since kernel 6.1.25 (i.e. Alpine 3.18), onboard bluetooth is enabled & autoprobed by default. This may be disabled by setting krnbt off).
=== Picam ===
The working of picam has been tested in sys mode only with Pi Zero 2 W model.
# Upgrade to edge version as package is not yet supported in v3.21.
# Setup eudev as device manager:
# Add <Code>camera_auto_detect=1</Code> option to the user config file 
# Install the package available in the testing repository.
# Due to bug , change the permission after every reboot as follows:
# Test the picam by the command 
== Loopback image with overlayfs ==
When you install Alpine in diskless mode, the entire system is loaded into memory at boot. If you want additional storage (for example, if you need more space than offered by your RAM) we need to create loop-back storage onto the SD card mounted with overlayfs.
First, make the SD card writable again and change fstab to always do so:
Create the loop-back file, this example is 1 GB:
Install the ext utilities:
Format the loop-back file:
Mount the storage: 
Make the overlay folders, we are using the /usr directory here, but you can use /home or anything else. 
Your /etc/fstab should look something like this:
Now commit the changes: (optionally remove the e2fsprogs, but it does contain repair tools)
Remember, with this setup if you install things and you have done this overlay for /usr, you must not commit the 'apk add', otherwise, while it boots it will try and install it to memory, not to the persistent storage.
If you do want to install something small at boot, you can use apk add and lbu commit -d.
If it is something a bit bigger, then you can use apk add but then not commit it. It will be persistent (in /user), but be sure to check everything you need is in that directory and not in folders you have not made persistent.
== Netboot ==
The Raspberry Pi 4 bootloader can be configured to boot from the network . Configure the bootloader with at least
and optionally also where x.x.x.x is the IP address of your TFTP server.
If not configuring TFTP_IP in the bootloader, you'll need to configure your DHCP server to advertise the TFTP server IP address. This varies depending on your DHCP server; use the following details if applicable:
# Vendor class: PXEClient:Arch:00000:UNDI:002001
# Filename: /
The minimal set of files that your TFTP server needs to host are:
# bcm2711-rpi-4-b.dtb (from raspberrypi/firmware/master/boot/bcm2711-rpi-4-b.dtb)
# cmdline.txt (see below)
# config.txt (see below)
# fixup4.dat (from raspberrypi/firmware/master/boot/fixup4.dat, alternatively fixup4cd.dat for the cut down version)
# initramfs-rpi4 (from alpine/edge/releases/aarch64/netboot/initramfs-rpi4)
# start4.elf (from raspberrypi/firmware/master/boot/start4.elf, alternatively start4cd.elf for the cut down version)
# vmlinuz-rpi4 (from alpine/edge/releases/aarch64/netboot/vmlinuz-rpi4)
config.txt:
cmdline.txt:
Instead of using the http://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/ base URL above, pinning to a specific point in time is preferred. Raspberry Pi 4 netboot files are available from https://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot-20230329/ onward.
With the above configured the Raspberry Pi 4 should be able to boot from the network without an SD card.
== Enable the Serial Console ==
Besides having enable_uart=1 in usercfg.txt, the kernel command-line option console needs to be changed to console=serial0,115200 in cmdline.txt.
From a Linux desktop, connect to it with something like this:
== Troubleshooting ==
raspinfo utility from the package can be used as a first step to diagnose issues: it will make a log report of essential Pi system configuration, and is often used as a reference to submit questions or bug reports within Raspberry Pi community (Forums, Github, etc).
After booting, you may find less system memory available than you expect. Currently the Pi requires a minimum of 32 megs of memory for the gpu, to boot unless you have the cut down boot loader installed, in which case you can use 16. However, you may find more gpu memory is still being used, even if you configure it for less, if you enable audio or camera support. To find out how your system is actually split, use <Code>vcgencmd</Code> utility from the package as follows:
=== Long boot time when running headless ===
If no peripherals are connected, the system might hang for an exceptionally long period of time while it attempts to accumulate entropy.
If this is the case, simply plugging in any USB device should work around this issue, since it increases the amount of entropy available to the kernel via interrupts.
=== apk indicating 'No space left on device' ===
Note some models of the Raspberry Pi such as the 3A+ only have 512M of RAM, which on fresh Alpine deployment will only leave around 200M for tmpfs root. It's important to keep this limitation in mind when using these boards.
=== Clock-related error messages ===
During the booting time, you might notice errors related to the hardware clock. Many Raspberry Pi do not have a hardware clock, or may have one without battery, in which case the behaviour depends on whether you physically cut power or not. 
Also, setup-alpine will adapt the installation to the type of Raspberry Pi you use, which means for example that on a RPI5, you will see hwclock> service, whereas on a RPI4 it will use swclock. In doubt, make sure to do the installation on the target hardware.
If you still experience clock errors, add the following line to /etc/chrony/chrony.conf:
makestep 0.1 3 
=== Wireless support with older Alpine images ===
In Alpine 3.14, the WiFi drivers for the Raspberry Pi were moved from linux-firmware-brcm to the linux-firmware-cypress package (source?). Since the images seem to be an outdated version of the former, Wi-Fi will work during installation, but after the first update it will break.
Use the ethernet interface to download the required packages:
And reboot.
If you need Wi-Fi, you'll need to download the latest Broadcom drivers to your SD card.
(Replace /mnt/sdcard with the correct mount point.)
 git clone --depth 1 https://github.com/RPi-Distro/firmware-nonfree.git
 cp firmware-nonfree/brcm/* /mnt/sdcard/firmware/brcm
=== Fileystem for boot partition ===
If you are trapped at the dreaded rainbow screen, with the green led blinking a few times in a row, repeatedly, check the boot partition type.
The rpi2 require fat32 for the boot partition, NOT fat16. Use linux fdisk to set the boot partition type as "c" (for fat32/lba) and set the lba and boot flags for the partition as suggested. Create the boot partition filesystem as fat32 with:
== See also ==
* Classic install or sys mode on Raspberry Pi - a variant.
* Raspberry Pi 3 - Setting Up Bluetooth
* Raspberry Pi 3 - Configuring it as wireless access point -AP Mode
* Raspberry Pi 3 - Browser Client
* Linux Router with VPN on a Raspberry Pi
* Create a bootable SDHC from a Mac
* Build custom Raspberry Pi images based on Alpine via Pieman
* Tutorials and Howtos#Raspberry Pi
Category:Installation
Category: Raspberry