PinePhone - Instructions for creating a PureOS image for PinePhone
Instructions for creating a PureOS Image for PinePhone by mozzwald
You will need u-boot-tools package for your distro and it helps to have binfmt and qemu packages for chrooting to the image. Paths and devices may be different on your system. Always verify before blindly copying and pasting commands.
Make a new working directory
mkdir ~/purepp
cd ~/pureppDownload and extract PinePhone phosh image (check for newer releases if you like)
wget https://images.postmarketos.org/pinephone/pine-pinephone-20200218-phosh.img.xz
unxz -d pine-pinephone-20200218-phosh.img.xzDownload and extract PureOS Librem 5 image (check for newer releases if you like)
wget http://downloads.pureos.net/amber/phone/gnome/librem5/2020-02-25/librem5.img.xz
unxz -d librem5.img.xzMake temporary dirs for mounting images
mkdir pmos-boot pmos-root pureos-boot pureos-rootList used loop devices
losetup -aList all loop devices
ls /dev/loop*The remaining commands should be run with sudo or as root user (sudo su)
Pick an unused loop device (5 in my case) and mount pmOS image with partitions
losetup -P /dev/loop5 pine-pinephone-20200218-phosh.imgPick an unused loop device (6 in my case) and mount PureOS image with partitions
losetup -P /dev/loop6 librem5.imgGet pmOS PinePhone bootloader
dd if=/dev/loop5 of=uboot-pmos.bin count=2048Put pmOS PinePhone bootloader on PureOS image
dd if=uboot-pmos.bin of=/dev/loop6 bs=1024 skip=8 seek=8Mount partitions
mount /dev/loop5p1 pmos-boot
mount /dev/loop5p2 pmos-root
mount /dev/loop6p1 pureos-boot
mount /dev/loop6p2 pureos-rootCopy PinePhone kernel & dtb to PureOS image
cp pmos-boot/vmlinuz-postmarketos-allwinner pureos-boot/
cp pmos-boot/sun50i-a64-pinephone.dtb pureos-boot/Copy PinePhone modules to PureOS image
cp -pRv pmos-root/lib/modules/5.5.0 pureos-root/lib/modules/Copy PinePhone firmware to PureOS image
cp -pRv pmos-root/lib/firmware pureos-root/lib/Make u-boot initramfs from PureOS initramfs
mkimage -A arm -O linux -T ramdisk -C gzip -d pureos-boot/initrd.img pureos-boot/uInitrd.imgGet uboot-script
wget https://mozzwald.com/pp/pureos-uboot-script.cmd -O pureos-boot/boot.cmdCompile uboot script
mkimage -A arm64 -T script -C none -d pureos-boot/boot.cmd pureos-boot/boot.scrPut helper files into rootfs
wget https://mozzwald.com/pp/pureos-pp-helpers.tar.gz
cd pureos-root
tar -pxvf ../pureos-pp-helpers.tar.gzIf you have binfmt setup for arm64/aarch64 then you can chroot and enable modem service and do whatever else you want. Otherwise this needs done after bootup
cp /usr/bin/qemu-aarch64-static usr/bin/
chroot ./
systemctl enable pinephone.service # enable modem service
exit
cd ..Unmount disk images
umount pmos-boot pmos-root pureos-boot pureos-root
losetup -d /dev/loop5
losetup -d /dev/loop6Copy the new image to SD card
dd if=librem5.img of=/dev/your-sd-card-device bs=1MOptionally resize PureOS Root partition on SD card
Put in PinePhone and boot. WIN!
Default username: purism
Default password: 123456Last updated