diff --git a/content/documentation/PinePhone_Pro/Software/Multi-distribution_image.adoc b/content/documentation/PinePhone_Pro/Software/Multi-distribution_image.adoc index eb59c6e7..e005ead5 100644 --- a/content/documentation/PinePhone_Pro/Software/Multi-distribution_image.adoc +++ b/content/documentation/PinePhone_Pro/Software/Multi-distribution_image.adoc @@ -13,6 +13,41 @@ menu: This article explains how to install a multiple linux distribution environment on your PinePhone Pro. You can choose to install this environment to the phone's internal eMMC memory or to a microSD card. These instructions also integrate with the link:/documentation/PinePhone_Pro/Software/Releases/#multi_distribution_image[multi-distribution image] releases page section. +[#variables] +== Variables + +During the processes of link:#partitioning[partitioning] the target device, link:#building[building] the image or installing the link:#u_boot[bootloader], make sure the variables are properly defined. Each time you open a new terminal window, the values of the variables must be re-set. + +[TIP] +==== +_BASE_ is the base directory path on your computer + +_DEV_ is the device name from the lsblk command + +_ATTR_ are the attributes of each partition/distribution + +_SIZE_ is the GiB capacity of each partition/distribution + +_NameUrl_ is the Key:Value of distribution name and relative URL download address +==== + +This guide has been tested with 6 Linux distributions on a 128 GiB microSD card, and following variables: + +[source,console] +---- +$ BASE=ppp-multi-image +$ DEV=sdb # i.e. sdb or mmcblk0 +$ ATTR=RequiredPartition,LegacyBIOSBootable +$ SIZE=11GiB + +$ declare -A NameUrl +NameUrl[uboot]=https://xff.cz/kernels/bootloaders-2024.04/ppp.tar.gz +#NameUrl[uboot]=https://megous.com/dl/tmp/ppp.tar.gz # test build +NameUrl[arch]=https://github.com/dreemurrs-embedded/Pine64-Arch/releases/download/20240326/archlinux-pinephone-pro-phosh-20240326.img.xz +NameUrl[manjaro]=https://github.com/manjaro-pinephone/phosh/releases/download/beta37/Manjaro-ARM-phosh-pinephonepro-beta37.img.xz +NameUrl[mobian]=https://images.mobian.org/pinephonepro/weekly/mobian-rockchip-phosh-20240324.img.xz +NameUrl[pmos]=https://images.postmarketos.org/bpo/v23.12/pine64-pinephonepro/phosh/20240403-0443/20240403-0443-postmarketOS-v23.12-phosh-22.3-pine64-pinephonepro.img.xz +NameUrl[sailfish]=https://gitlab.com/sailfishos-porters-ci/dont_be_evil-ci/-/jobs/artifacts/master/download?job=pinephonepro-rootfs +NameUrl[ut]=https://ci.ubports.com/job/focal-hybris-rootfs-arm64/job/master/lastSuccessfulBuild/artifact/ubuntu-touch-pinephone-pro-img-arm64.raw.xz +NameUrl[extra]= +---- + [#rk2aw] == Install rk2aw @@ -22,11 +57,9 @@ Boot up the PinePhone Pro's stock operating system and start a shell session. Yo [source,console] ---- -$ mkdir -p ~/rk2aw -$ cd ~/rk2aw $ curl -O https://xff.cz/kernels/bootloaders-2024.04/ppp.tar.gz -$ tar -xvzf ppp.tar.gz -C ~/rk2aw -$ cd ~/rk2aw/ppp +$ tar -xvzf ppp.tar.gz +$ cd /ppp $ sudo ./spinor-flash-initial-setup.sh ---- @@ -44,80 +77,26 @@ If you are installing to the eMMC, make sure the SPI flash is empty. Further instructions can be found on the link:https://xff.cz/kernels/bootloaders-2024.04/ppp/rk2aw/INSTALL[author's website]. -[#variables] -== Setting variables - -During the processes of link:#partitioning[partitioning] the target device, link:#building[building] the image or installing the link:#u_boot[bootloader], make sure the variables are properly defined. - -Connect your PinePhone Pro to a Linux computer, with the stock USB cable. Press power button on. From the graphical menu select _eMMC over USB_ or _SD over USB_ to expose the device to your computer. You can optionally flash microSD directly into your computer's slot, if available. - -Start a shell sessions to find the target device with `lsblk` command. - -[TIP] -==== -General variables + -_DEVICE_ is the device name from the lsblk command + -_PARTATTR_ are the attributes of each partition/distribution + -_PARTSIZE_ is the GiB capacity of each partition/distribution + -_WORKDIR_ is the working directory path on your computer + - -Distribution-specific variables + -_DISTROURL_ is the image downloading URL address of Linux distribution + -_MENUNAME_ is the name of graphical boot menu item + -_PARTNAME_ is the name of partition/distribution + -==== - -Each time you open a new terminal window, the values of the variables must be adapted, for example: - -[source,shell] ----- -WORKDIR=~/ppp -DEVICE=sdb -PARTSIZE=11GiB -PARTATTR=RequiredPartition,LegacyBIOSBootable - -DISTROURL=https://github.com/dreemurrs-embedded/Pine64-Arch/releases/download/20240326/archlinux-pinephone-pro-phosh-20240326.img.xz -MENUNAME=ARCH -PARTNAME=ppp-multi-image-${MENUNAME,,} ----- - -This guide has been tested with following images: - -* https://github.com/dreemurrs-embedded/Pine64-Arch/releases/download/20240326/archlinux-pinephone-pro-phosh-20240326.img.xz -* https://github.com/manjaro-pinephone/phosh/releases/download/beta37/Manjaro-ARM-phosh-pinephonepro-beta37.img.xz -* https://images.mobian.org/pinephonepro/weekly/mobian-rockchip-phosh-20240324.img.xz -* https://images.postmarketos.org/bpo/v23.12/pine64-pinephonepro/phosh/20240320-0453/20240320-0453-postmarketOS-v23.12-phosh-22.3-pine64-pinephonepro.img.xz -* https://gitlab.com/sailfishos-porters-ci/dont_be_evil-ci/-/jobs/artifacts/master/download?job=pinephonepro-rootfs -* https://ci.ubports.com/job/focal-hybris-rootfs-arm64/job/master/lastSuccessfulBuild/artifact/ubuntu-touch-pinephone-pro-img-arm64.raw.xz +== Expose the device -== Erase the device +Connect your PinePhone Pro to a Linux computer, with the stock USB cable. Press power button on. From the graphical menu select _eMMC over USB_ or _SD over USB_ to expose the device to your computer. You can optionally flash microSD directly into your computer's slot, if available. -Make sure there are no signatures or partitions left with the command: +== Erasing -[source,console] ----- -$ sudo wipefs /dev/$DEVICE ----- - -To erase all signatures, type: +Make sure there are no signatures or partitions left, and overwrite the first sectors with zeroes. You can find the target device under `lsblk` command. [source,console] ---- -$ sudo wipefs --all --force /dev/$DEVICE* ----- - -Clean the device by overwriting the first sectors with zeroes: - -[source,console] ----- -$ sudo dd if=/dev/zero of=/dev/$DEVICE status=progress bs=32768 count=1 +$ sudo wipefs /dev/$DEV +$ sudo wipefs --all --force /dev/$DEV* +$ sudo dd if=/dev/zero of=/dev/$DEV status=progress bs=32768 count=1 ---- Optionally you can zeroes the whole device: [source,console] ---- -$ sudo dd if=/dev/zero of=/dev/$DEVICE status=progress bs=32768 count=$(expr $(lsblk -bno SIZE /dev/$DEVICE | head -1) \/ 32768) +$ sudo dd if=/dev/zero of=/dev/$DEV status=progress bs=32768 count=$(expr $(lsblk -bno SIZE /dev/$DEV | head -1) \/ 32768) ---- [#partitioning] @@ -127,25 +106,45 @@ Partition the device for the multiple distributions: [source,shell] ---- -$ sudo sfdisk /dev/$DEVICE --wipe always < /dev/null +$ mv pinephonepro/*/*.tar.bz2 sailfish.tar.bz2 +$ mkdir -p ~/$BASE/downloads/sailfishos +$ sudo tar -xvf sailfish.tar.bz2 -C sailfishos/ > /dev/null ---- Format the partition and copy the extracted files directly onto the device: [source,console] ---- -$ sudo mkfs.ext4 -F /dev/disk/by-partlabel/$PARTNAME -$ sudo mkdir -p /mnt/$PARTNAME/device -$ sudo mount /dev/disk/by-partlabel/$PARTNAME /mnt/$PARTNAME/device -$ sudo rsync -avz --progress $WORKDIR/distros/sailfishos/ /mnt/$PARTNAME/device +$ sudo mkfs.ext4 -F /dev/disk/by-partlabel/$BASE-$NAME +$ sudo mkdir -p /mnt/$NAME/dev +$ sudo mount /dev/disk/by-partlabel/$BASE-$NAME /mnt/$NAME/dev +$ sudo rsync -avz --progress ~/$BASE/downloads/sailfishos/ /mnt/$NAME/dev +$ sudo chmod a=rwx /mnt/$NAME/dev/boot/* ---- === Ubuntu Touch @@ -266,188 +257,148 @@ For this distribution, download and decompress the image: [source,console] ---- -$ mkdir -p $WORKDIR/distros -$ cd $WORKDIR/distros -$ wget $DISTROURL -$ xz -v -d -k IMAGE.*.xz -$ mv IMAGE.raw $PARTNAME.img +$ NAME=ut +$ mkdir -p ~/$BASE/downloads && cd ~/$BASE/downloads +$ wget ${NameUrl[$NAME]} +$ xz -v -d -k $(basename "${NameUrl[$NAME]}") +$ mv $(basename -as .xz "${NameUrl[$NAME]}") $NAME.img ---- Mount the image: [source,console] ---- -$ cd $WORKDIR/distros -$ sudo losetup -P /dev/loop0 $PARTNAME.img -$ sudo mkdir -p /mnt/$PARTNAME/boot /mnt/$PARTNAME/system /mnt/$PARTNAME/userdata /mnt/$PARTNAME/device -$ sudo mount /dev/loop0p2 /mnt/$PARTNAME/boot/ -$ sudo mount /dev/loop0p3 /mnt/$PARTNAME/system/ -$ #sudo mount /dev/loop0p4 /mnt/$PARTNAME/userdata/ +$ cd ~/$BASE/downloads +$ sudo losetup -P /dev/loop0 $NAME.img +$ sudo mkdir -p /mnt/$NAME/boot /mnt/$NAME/system /mnt/$NAME/userdata /mnt/$NAME/dev +$ sudo mount /dev/loop0p2 /mnt/$NAME/boot/ +$ sudo mount /dev/loop0p3 /mnt/$NAME/system/ +$ #sudo mount /dev/loop0p4 /mnt/$NAME/userdata/ ---- Create the `userdata` partition and copy `system` and `boot` contents: [source,console] ---- -$ sudo mkfs.ext4 -F /dev/disk/by-partlabel/$PARTNAME-data -$ sudo e2label /dev/disk/by-partlabel/$PARTNAME-data ${MENUNAME,,}-data -$ sudo dd if=/dev/loop0p3 of=/dev/disk/by-partlabel/$PARTNAME bs=1M status=progress conv=fsync -$ sudo mount /dev/disk/by-partlabel/$PARTNAME /mnt/$PARTNAME/device/ -$ sudo scp -r /mnt/$PARTNAME/boot/* /mnt/$PARTNAME/device/boot +$ sudo mkfs.ext4 -F /dev/disk/by-partlabel/$BASE-$NAME-data +$ sudo e2label /dev/disk/by-partlabel/$BASE-$NAME-data $NAME-data +$ sudo dd if=/dev/loop0p3 of=/dev/disk/by-partlabel/$BASE-$NAME bs=1M status=progress conv=fsync +$ sudo mount /dev/disk/by-partlabel/$BASE-$NAME /mnt/$NAME/dev/ +$ sudo scp -r /mnt/$NAME/boot/* /mnt/$NAME/dev/boot ---- === All distributions -You also need some adjustments on _boot.scr_, _extlinux.conf_ and _fstab_ files. - -Remame _/boot/boot*.scr_, if exists, to keep graphical menu clean: - -[source,console] ----- -$ [ ! -f /mnt/$PARTNAME/device/boot/boot.scr ] || sudo mv /mnt/$PARTNAME/device/boot/boot.scr /mnt/$PARTNAME/device/boot/boot.scr.bk -$ [ ! -f /mnt/$PARTNAME/device/boot/boot.pinephonepro.scr ] || sudo mv /mnt/$PARTNAME/device/boot/boot.pinephonepro.scr /mnt/$PARTNAME/device/boot/boot.pinephonepro.scr.bk ----- - -Rename the original _/boot/extlinux/extlinux.conf_ file, if exist: +If present, you can optionally backup _boot.scr_, _extlinux.conf_ and _fstab_ files. [source,console] ---- -$ sudo mkdir -p /mnt/$PARTNAME/device/boot/extlinux -$ [ ! -f /mnt/$PARTNAME/device/boot/extlinux/extlinux.conf ] || sudo mv /mnt/$PARTNAME/device/boot/extlinux/extlinux.conf /mnt/$PARTNAME/device/boot/extlinux/extlinux.conf.bk +$ sudo mkdir -p /mnt/$NAME/dev/boot/extlinux +$ [ ! -f /mnt/$NAME/dev/boot/extlinux/extlinux.conf ] || sudo mv /mnt/$NAME/dev/boot/extlinux/extlinux.conf /mnt/$NAME/dev/boot/extlinux/extlinux.conf.bk +$ [ ! -f /mnt/$NAME/dev/boot/boot.scr ] || sudo mv /mnt/$NAME/dev/boot/boot.scr /mnt/$NAME/dev/boot/boot.scr.bk +$ [ ! -f /mnt/$NAME/dev/boot/boot.pinephonepro.scr ] || sudo mv /mnt/$NAME/dev/boot/boot.pinephonepro.scr /mnt/$NAME/dev/boot/boot.pinephonepro.scr.bk +$ sudo mv /mnt/$NAME/dev/etc/fstab /mnt/$NAME/dev/etc/fstab.bk ---- Then write the new _/boot/extlinux/extlinux.conf_ file, making sure you remove `#` comment for the selected distributions: [source,shell] ---- -$ sudo tee /mnt/$PARTNAME/device/boot/extlinux/extlinux.conf < +$ sudo tee /mnt/$NAME/dev/etc/fstab < -#uncomment next line for ARCH -#PARTLABEL=$PARTNAME / ext4 rw,relatime 0 1 +## uncomment next line for ARCH +#PARTLABEL=$NAME / ext4 rw,relatime 0 1 -#uncomment next line for MANJARO -#PARTLABEL=$PARTNAME / ext4 defaults 0 1 +## uncomment next line for MANJARO +#PARTLABEL=$NAME / ext4 defaults 0 1 -#uncomment next line for MOBIAN -#PARTLABEL=$PARTNAME / ext4 defaults,x-systemd.growfs 0 1 +## uncomment next line for MOBIAN +#PARTLABEL=$NAME / ext4 defaults,x-systemd.growfs 0 1 -#uncomment next line for PMOS -#PARTLABEL=$PARTNAME / ext4 defaults 0 0 +## uncomment next line for PMOS +#PARTLABEL=$NAME / ext4 defaults 0 0 -#uncomment next 7 lines for SAILFISH -#PARTLABEL=$PARTNAME / ext4 rw,noatime 0 1 -#devtmpfs /dev devtmpfs nosuid 0 0 -#devpts /dev/pts devpts gid=5,mode=620 0 0 -#tmpfs /dev/shm tmpfs noexec,nosuid,nodev 0 0 -#proc /proc proc defaults 0 0 -#sysfs /sys sysfs defaults 0 0 -#tmpfs /tmp tmpfs nosuid,nodev 0 0 +## uncomment next 7 lines for SAILFISH +#PARTLABEL=$NAME / ext4 rw,noatime 0 1 +#devtmpfs /dev devtmpfs nosuid 0 0 +#devpts /dev/pts devpts gid=5,mode=620 0 0 +#tmpfs /dev/shm tmpfs noexec,nosuid,nodev 0 0 +#proc /proc proc defaults 0 0 +#sysfs /sys sysfs defaults 0 0 +#tmpfs /tmp tmpfs nosuid,nodev 0 0 -#uncomment next 3 lines for UT -#PARTLABEL=$PARTNAME / ext4 defaults 0 1 -#PARTLABEL=$PARTNAME /boot ext4 defaults 0 2 -#PARTLABEL=$PARTNAME-data /userdata ext4 defaults 0 2 +## uncomment next 3 lines for UT +#PARTLABEL=$NAME / ext4 defaults 0 1 +#PARTLABEL=$NAME /boot ext4 defaults 0 2 +#PARTLABEL=$NAME-data /userdata ext4 defaults 0 2 EOF ---- Close any mounted directory window. -==== Build the postmarketOS image - -You can optionally use link:https://wiki.postmarketos.org/wiki/Pmbootstrap[pmbootstrap] to generate the distribution image on your Linux computer, instead of downloading a pre-made image. Make sure you install pmbootstrap before building the image. - -Start creating 2 GB empty image file, format and mount it. - -[source,console] ----- -$ sudo su -# dd if=/dev/zero of=postmarketos.img bs=1 count=0 seek=2G status=progress && sync -# mkfs.ext4 postmarketos.img -# losetup -P /dev/loop0 postmarketos.img -# exit ----- - -Then build the image using _pmbootstrap_ - -[source,console] ----- -$ pmbootstrap init -$ pmbootstrap status -$ pmbootstrap pull -$ pmbootstrap install --sdcard=/dev/[LOOP-DEVICE] -$ pmbootstrap shutdown ----- - === Unmount, detach and resize To unmount and deatch all building images, run: [source,console] ---- -$ sudo umount /mnt/$PARTNAME/* -$ sudo rm -r /mnt/$PARTNAME +$ sudo umount /mnt/$NAME/* +$ sudo rm -r /mnt/$NAME $ sudo losetup -D ---- @@ -455,9 +406,9 @@ On the first boot, if it doesn't happen automatically, you can manually resize e [source,console] ---- -$ sudo e2label /dev/disk/by-partlabel/$PARTNAME ${MENUNAME,,} -$ sudo e2fsck -f /dev/disk/by-partlabel/$PARTNAME -$ sudo resize2fs /dev/disk/by-partlabel/$PARTNAME +$ sudo e2label /dev/disk/by-partlabel/$BASE-$NAME $NAME +$ sudo e2fsck -f /dev/disk/by-partlabel/$BASE-$NAME +$ sudo resize2fs /dev/disk/by-partlabel/$BASE-$NAME ---- IMPORTANT: Repeat the link:#building[building process] for each needed distribution, adapting link:#variables[needed variables]. @@ -471,3 +422,31 @@ In case you want to reinstall only one distribution, the easy way is to delete a If the device doesn't start, connect a compatible link:https://pine64.com/product/pinebook-pinephone-pinetab-serial-console[serial cable] to the headphone jack and a computer, switch off microswitch 6 and start a serial console to investigate further. Find out the corresponding USB device using `ls /dev/ttyUSB*` and then connect to it with for example _minicom_ using the command `minicom -b 1500000 -D /dev/ttyUSB**[...]**`, where *[...]* is the number of the USB device. To find the exact _LABEL_, _UUID_, _PARTLABEL_ and _PARTUUID_ names, open a terminal window on the phone and use the command `blkid`. + +== Appendix + +Build the postmarketOS image + +You can optionally use link:https://wiki.postmarketos.org/wiki/Pmbootstrap[pmbootstrap] to generate the distribution image on your Linux computer, instead of downloading a pre-made image. Make sure you install pmbootstrap before building the image. + +Start creating 2 GB empty image file, format and mount it. + +[source,console] +---- +$ sudo su +# dd if=/dev/zero of=postmarketos.img bs=1 count=0 seek=2G status=progress && sync +# mkfs.ext4 postmarketos.img +# losetup -P /dev/loop0 postmarketos.img +# exit +---- + +Then build the image using _pmbootstrap_ + +[source,console] +---- +$ pmbootstrap init +$ pmbootstrap status +$ pmbootstrap pull +$ pmbootstrap install --sdcard=/dev/[LOOP-DEVICE] +$ pmbootstrap shutdown +---- diff --git a/content/documentation/PineTab2/Software/Releases.adoc b/content/documentation/PineTab2/Software/Releases.adoc index e032aac9..9bc5baab 100644 --- a/content/documentation/PineTab2/Software/Releases.adoc +++ b/content/documentation/PineTab2/Software/Releases.adoc @@ -224,3 +224,32 @@ https://devices.ubuntu-touch.io/device/pinetab2/release/focal[UBports PineTab2 D Scroll down to the middle of https://gitlab.com/ook37/pinephone-pro-debos/[the GitLab project page], or directly here https://devices.ubuntu-touch.io/device/pinetab2/release/focal/#deviceOverview[at the UBports website] to see which features work. Contributions and bug reports can be made at the https://gitlab.com/ook37/pinephone-pro-debos/[UBports PineTab2 GitLab page]. See https://ubports.com/foundation/sponsors[UBports website] for how to donate. + +=== Plasma Mobile on Debian + +Images of Plasma Mobile on either Debian Bookworm or Debian Trixie created by dieselnutjob + +The images include uboot, and are an SDcard installer (modified from the Danctnix OS Factory Tool). Using the installer wipes the eMMC drive. + +==== Download + +https://sourceforge.net/projects/pinetab2debianplasmamobile/files/ + +|=== +2+| Default credentials + +| Default user +| `pt2`/`1234` + +| root +| `root`/`1234` +|=== + +==== Notes +The image will not autoexpand to the fill the eMMC, however once booted it is easy to adjust the size of the rootfs using the included KDE Partition Manager. + +The PineTab2 may be reluctant to shutdown, with several minutes delay whilst the BES2600 wifi driver unloads. This can be avoided by turning off the wifi in the menu that can be pulled down from the top of the screen before shutting down or rebooting. + +There is a video of the PineTab2 running one of these images here https://www.youtube.com/watch?v=9xpSuG63Rck + +The author may be contacted via the pinetab discord channel on the Pine64 discord.