Installing Alpine Linux on Linx1010B
Bay Trail 32bit EFI 64bit CPU
I've got Alpine installed and networking survives reboot. Not yet tried getting a GUI set up or testing battery sensors, audio etc. yet. I was planning on testing Paper DE - a Wayland desktop environment using Wayfire and Qt - but had a hard time getting anywhere on this device. Despite activity on the GitLab, the CuboCore website is no longer resolving, so 🤷. I also failed to get DesQ working. The install script is out of date. Updating the repository names in the script stilll left way to many errors for me to chase.
Create bootable USB
- Download Ventoy, and both x86_64 & i386 Alpine Linux ISOs.
- Create a Ventoy USB with GPT format and ~3GB unused.
- Add
alpine-extended-VERSIONNUMBER-x86_64.iso
to 'Ventoy' partion. - Create a FAT or FAT32 partition using remaining space. This is where all handy stuff will be placed.
- Open
alpine-extended-VERSIONNUMBER-i386.iso
in 7zip or similar. - Extract folder
/apks/x86/grub-efi-VERSIONNUMBER.apk/grub-efi-VERSIONNUMBER.tar/usr/lib/grub/i386-efi
and its contents to the 'stuff' partition created earlier.
Setup Alpine Extended x86_64
Rotate the framebuffer console! Your neck will thank you.
echo 1 | tee /sys/class/graphics/fbcon/rotate
Login as root, no password.
Add the needed packages:
apk add grub-efi efibootmgr tzdata
I add some other packages I want to use:
apk add bash nano doas
then I set bash as the shell:
nano /etc/passwd
Find root:x:0:0:root:/root:/bin/ash
,
Change to root:x:0:0:root:/root:/bin/bash
,
type exit
then login as root again.
(you could use chsh here)
Start step-by-step setup.
setup-keymap gb gb && setup-hostname alpine && rc-service hostname restart
Wi-Fi
I couldn't set the on-board WiFi at wlan0 UP in the live environment.
You can skip this section if you like, as the on-board WiFi will work after installation is complete.
I used a USB dongle at wlan1, but you can install Alpine Extended without internet access.
Still, setup-interfaces
didn't work for this dongle. I haven't tested others.
wpas=wpa_supplicant && wpa_passphrase 'ExampleWifiSSID' 'ExampleWifiPassword' >> /etc/$wpas/$wpas.conf
Test wpa_supplicant:
$wpas -i wlan1 -c /etc/$wpas/$wpas.conf
If OK, ctrl+c
then type:
$wpas -B -i wlan1 -c /etc/$wpas/$wpas.conf
nano /etc/network/interfaces
add these lines:
auto wlan1
iface wlan1 inet dhcp
save, then type:
udhcpc -i wlan1
setup-dns
(can leave domain blank)
rc-update add $wpas boot
rc-update add networking boot
Continue with Setup
export TZ='Europe/London'
install -Dm 0644 /usr/share/zoneinfo/$TZ /etc/zoneinfo/$TZ
echo "export TZ='$TZ'" >> /etc/profile.d/timezone.sh
Create user account:
adduser -g "<username>" <username> && adduser <username> wheel
nano /etc/doas.d/doas.conf
Add: permit persist :wheel
,
save, then:
passwd
setup-sshd
setup-ntp
setup-disk -m sys
APK Repositories
The setup-apkrepos
script deletes the reference to the install media repo, and the WiFi is janky at this point.
Skip this section if you have no working WiFI. You can do this after installation.
Instead, I edited /etc/apk/repositories
, commenting out the install media repo, and adding local mirrors:
http://uk.alpinelinux.org/alpine/latest-stable/main
http://uk.alpinelinux.org/alpine/latest-stable/community
Can then update packages:
apk update
apk add --upgrade apk-utils
apk upgrade --available
DHCPCD Configuration
On reboot, the on-board WiFi is slow to respond, causing dhcpcd to wait and then timeout. To avoid this:
nano /etc/dhcpcd.conf
add: background
to the end of the file, and save.
Do not reboot yet!
Fixing GRUB
root=/dev/mmcblk1p3 && tmpmnt=/mnt/tmpmnt
Mount the installed OS and chroot in:
mkdir -p $tmpmnt
mount $root $tmpmnt
for i in dev dev/pts sys proc run ; do mount --bind /$i $tmpmnt/$i; done
chroot $tmpmnt /bin/bash
Now we're in the installed OS.
APK is clever and only installs for the architecture it detects, so we have to bypass it by mounting our 'stuff' partition i386-efi folder from earlier and copying over the files we need:
tmpmnt=/mnt/tmpmnt
mkdir -p $tmpmnt
mount /dev/sda3 $tmpmnt
cp -r $tmpmnt/i386-efi /usr/lib/grub/i386-efi
Then install grub and, if all is well, umount 'stuff'.
grub-install --target=i386-efi --removable --no-nvram /dev/mmcblk1p1
umount $tmpmnt
Modify the boot loader configuration for the sake of our necks:
nano /etc/default/grub
add: GRUB_CMDLINE_LINUX="fbcon=rotate:1"
,
save, update grub, then exit chroot:
grub-mkconfig -o /boot/grub/grub.cfg
exit
Now we have left the chroot, we can unmount everything:
for i in dev/pts dev sys proc run boot/efi "" ; do umount $tmpmnt/$i; done
Check we've not missed any umounts - should return blank:
mount | grep $tmpmnt
Restart the tablet without the Live USB inserted, and hopefully you'll boot into Alpine!
You may need to set up WiFi again (I did). setup-interfaces
should work now, so just use that :)
Links
https://tilde.town/~kzimmermann/articles/alpine_linux_desktop.html
https://wiki.alpinelinux.org/wiki/Setting_up_a_laptop
Many thanks to Ian Renton and his commenters, as well as all the other posts/articles/guides I've found over the last few days!