# 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 ~/purepp # Download 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.xz # Download 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.xz # Make temporary dirs for mounting images mkdir pmos-boot pmos-root pureos-boot pureos-root # List used loop devices losetup -a # List 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.img # Pick an unused loop device (6 in my case) and mount PureOS image with partitions losetup -P /dev/loop6 librem5.img # Get pmOS PinePhone bootloader dd if=/dev/loop5 of=uboot-pmos.bin count=2048 # Put pmOS PinePhone bootloader on PureOS image dd if=uboot-pmos.bin of=/dev/loop6 bs=1024 skip=8 seek=8 # Mount partitions mount /dev/loop5p1 pmos-boot mount /dev/loop5p2 pmos-root mount /dev/loop6p1 pureos-boot mount /dev/loop6p2 pureos-root # Copy 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.img # Get uboot-script wget https://mozzwald.com/pp/pureos-uboot-script.cmd -O pureos-boot/boot.cmd # Compile uboot script mkimage -A arm64 -T script -C none -d pureos-boot/boot.cmd pureos-boot/boot.scr # Put helper files into rootfs wget https://mozzwald.com/pp/pureos-pp-helpers.tar.gz cd pureos-root tar -pxvf ../pureos-pp-helpers.tar.gz # If 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/loop6 # Copy the new image to SD card dd if=librem5.img of=/dev/your-sd-card-device bs=1M # Optionally resize PureOS Root partition on SD card # Put in PinePhone and boot. WIN! Default username: purism Default password: 123456