If you’re anything like me you hate installing software and operating systems. A lot of the process includes arbitrary steps you do very infrequently to be able to recall properly, or maybe arcane knowledge about a particular software or hardware system that you have to know or it won’t work. Beyond that it can be tedious and keeps you from the real work or project you’d like to get to. Even Linus Torvalds doesn’t like it.
This is a short guide I wrote a while ago on how to install and configure alpine linux on a raspberry pi zero w. It’s similar in purpose to my guide on void linux for the raspberry pi 3b+. It’s designed to walk you through some basic configuration if you’re new to linux or alpine. By the end you’ll be able to ssh to a basic user to do whatever you need.
-
Ingredients List
- Raspberry Pi Zero W
- Microsd Card
- (Optional) my setup script
-
Write the image to your sdcard and install unpack alpine to your pi
- Use my script if you want, but make sure to change
PIDRIVEto your sdcard device (lsblkto find your card device) andIMGVERandIMGREVto the latest values (as of this writing change IMGVER->‘3.12’ and IMGREV->‘0’ . - Otherwise you can download the armhf image and install manually
- Use my script if you want, but make sure to change
-
Insert the microsd card, hook the pi up, and turn it on
- Login as ‘root’ (password is empty)
- The default login shell is ash
-
Basic configuration
- Run the setup wizard
setup-alpine
- This wizard will set up the keyboard, hostname, internet connection, ntpd, and other stuff
- I had a problem with the busybox ntp daemon, so I left the default ntp daemon option (chrony)
- Add a few basic packages (rng, man, vim, bash, sudo)
apk update && apk upgradeapk add rng-tools man vim bash sudo
- rng service configuration (this fixes dhpc issues that occur on reboot) this guide was helpful
service rngd startrc-update add rngd bootrc-update add wpa_supplicant bootrc-update del networking bootrc-update -u
- The wizard should enable the sshd service automatically (assuming you enabled network access), but by default the root user can’t be ssh to with a password.
- For ssh you can either edit ‘/etc/ssh/sshd_config’ (to enable root ssh) or add a new user.
- I elected for the latter approach because I try to minimize using root, even on embedded systems.
- Run the setup wizard
-
Create a standard user
- Alpine uses its own
adduserandaddgroupcommands, which work a little differently from theuseraddandgroupaddthat I’m more familiar with. - Create a standard user called with a
bashlogin shell, membership towheelandusersgroups, and a password:adduser -S <user> -h /home/<user> -s /bin/bash -G wheeladdgroup <user> userslbu include /home/<user>passwd <user>
- Add wheel to sudoers to give standard user sudo ability
visudo- uncomment line (remove
#):%wheel ALL=(ALL) ALL
- commit changes and reboot
lbu commit -dreboot
- Alpine uses its own
-
Client SSH conveniences (Optional)
- Go to the terminal on your client (remote) machine
- Get your pi LAN ip address
- You could have got this during
setup-alpinewhen dhcp was set up - If not you can get it with
sudo arp-scan -l
- You could have got this during
- Add the pi hostname to your client machine ‘/etc/hosts’ file
sudo vim /etc/hosts<host_ip>
- Add your default key to be used as authentication (if you don’t have one, generate a keypair with
ssh-keygen)ssh-copy-id <user>@<host>
- Test ssh connection
ssh <user>@<host>
-
Configure the standard user
- Connect to pi from client
ssh <user>@<host>
- Create an empty .profile file
touch .profile
- (Optional) Add whatever you want to your .profile
vim .profile
- Symlink .bash_profile and .zprofile to .profile
ln -s .profile .bash_profileln -s .profile .zprofile
- Connect to pi from client