Talk:PinePhone

From Gentoo Wiki
Jump to:navigation Jump to:search
Note
This is a talk page. Please add newer comments below older ones, and sign your comments using four tildes (~~~~). When adding a new section (at the bottom of the page), please mark it as "open for discussion" by using {{talk|open}} so it will show up in the list of open discussions.

Overlay

I'm interested in contributing (I just got my pinephone, and I intend to put gentoo on it!). Should we create an overlay in order to centralize contributions? --fxc (talk) 23:48, 25 December 2020 (UTC)

That sounds like a good idea, I just wasn't sure how to put that sort of thing together because i do not really understand how to use git beyond "git clone". once i get my system figured out the first thing i will make is a p-boot-tools ebuild (which would basically be a binary, because you need a certain compiler to build it), and then maybe I could email it to you or make a submission through git? there is also this guy's overlay I found from the pine64 wiki: https://gitlab.com/bingch/gentoo-overlay/-/blob/master/README.md. it seems to have a couple ebuilds like phosh and stuff, so maybe we should just contact this guy. sorry for getting back to you so late, i hadn't seen this. anyways merry christmas --feeloada

Installation manual proposal for option 1

I started installing Gentoo on my pine phone after booting the PostmarketOS with Sxmo from the multiboot image from Megi.

For this guide, let's assume we have:

  • / (root) on emmc of 16Go
  • /var of 32Go (Firefox needs almost 16Go of tmp space in order to compile, and, if you use flatpak, you will need a lot of space too) on sdcard
  • /var/tmp on zram
  • /tmp on zram
  • /home on the remaining space (on sdcard)

I choose to install the root filesystem on the emmc and to have /home and /var on sdcard. Indeed, I think it can be a good practice to create partition for /var of /tmp in the SDCARD because they are likely to have a lot of read/write cycle, particularly on Gentoo since Gentoo use tmp dirs in /var during compiling process. So you will preserve your EMMC memory.

Moreover, I will use zram (for ram, /var/tmp - to handle small packages -, and /tmp).

A the moment, I use bingch overlay to install kernel sources and Phosh. For sway for exemple, you can have a look on this git repo : https://github.com/Dejvino/pinephone-sway-poc I use p-boot for the boot process.

Finally, depending on your needs, I can suggest to install tar (the Sxmo version is limited), screen and btrfs-progs

Here are my installation steps.

prepare disks

For this steps the amd64 handbook helps : https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks

root #fdisk /dev/mmcblk0

Create filsystem

root #mkfs.btrfs /dev/mmcblk0p3
root #mkfs.btrfs /dev/mmcblk0p4
root #mkfs.ext4 /dev/mmcblk2p3

Chrooting

Prepare Chroot

https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage

root #vi /mnt/gentoo/etc/portage/make.conf

https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#ARM-Options https://wiki.gentoo.org/wiki/Safe_CFLAGS#ARM

TODO : list make.conf flags

root #mkdir --parents /mnt/gentoo/etc/portage/repos.conf
root #cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
root #touch /mnt/gentoo/etc/portage/repos.conf/bingch.conf
root #vi /mnt/gentoo/etc/portage/repos.conf/bingch.conf
FILE /mnt/gentoo/etc/portage/repos.conf/bingch.confBingch repos
[bingch]
location = /var/db/repos/bingch
sync-type = git
sync-uri = https://gitlab.com/bingch/gentoo_overlay.git
auto-sync = yes
root #mkdir /mnt/var-btrfs
root #mount -t btrfs /dev/mmcblk0p3 /mnt/var-btrfs
root #mkdir /mnt/home-btrfs
root #mount -t btrfs /dev/mmcblk0p4 /mnt/home-btrfs
root #btrfs subvolume create /mnt/var-btrfs/gentoo-var

Create subvolume '/mnt/var-btrfs/gentoo-var'

root #btrfs subvolume create /mnt/home-btrfs/gentoo-home

Create subvolume '/mnt/home-btrfs/gentoo-home'

root #mount --types proc /proc /mnt/gentoo/proc
root #mount --rbind /sys /mnt/gentoo/sys
root #mount --make-rslave /mnt/gentoo/sys
root #mount --rbind /dev /mnt/gentoo/dev
root #mount --make-rslave /mnt/gentoo/dev
root #test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
root #mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
root #chmod 1777 /dev/shm

Chroot itself

root #chroot /mnt/gentoo /bin/bash
root #source /etc/profile


Further configuration

root #eselect profile list Available profile symlink targets:
 [1]   default/linux/arm64/17.0 (stable)
 [2]   default/linux/arm64/17.0/desktop (stable)
 [3]   default/linux/arm64/17.0/desktop/gnome (stable)
 [4]   default/linux/arm64/17.0/desktop/gnome/systemd (stable)
 [5]   default/linux/arm64/17.0/desktop/plasma (stable)
 [6]   default/linux/arm64/17.0/desktop/plasma/systemd (stable)
 [7]   default/linux/arm64/17.0/desktop/systemd (stable)
 [8]   default/linux/arm64/17.0/developer (stable)
 [9]   default/linux/arm64/17.0/systemd (stable) *
 [10]  default/linux/arm64/17.0/big-endian (exp)
 [11]  default/linux/arm64/17.0/musl (exp)
 [12]  default/linux/arm64/17.0/musl/hardened (exp)
root #eselect profile set 4

Without systemd

root #echo "Europe/Brussels" > /etc/timezone
root #nano -w /etc/locale.gen
root #eselect locale set 9

See https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/System#Networking_information for the network configuration

With Systemd

https://wiki.gentoo.org/wiki/Systemd

root #systemctl enable systemd-networkd.service

Created symlink /etc/systemd/system/dbus-org.freedesktop.network1.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /lib/systemd/system/systemd-networkd.socket. Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /lib/systemd/system/systemd-networkd-wait-online.service.

root #systemctl enable systemd-resolved.service

Created symlink /etc/systemd/system/dbus-org.freedesktop.resolve1.service → /lib/systemd/system/systemd-resolved.service. Created symlink /etc/systemd/system/multi-user.target.wants/systemd-resolved.service → /lib/systemd/system/systemd-resolved.service.

Prepare network for reboot on Gentoo
root #emerge --ask net-misc/dhcpcd
root #emerge --ask net-wireless/iw net-wireless/wpa_supplicant
root #emerge -avq ssh
root #systemctl enable sshd

Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /lib/systemd/system/sshd.service.`

Create file /etc/systemd/network/50-dhcp.network :

FILE /etc/systemd/network/50-dhcp.networkNetwork configuration
[Match]
Name=en*
 
[Network]
DHCP=yes
root #systemctl enable systemd-networkd.service

Edit fstab

FILE /etc/fstabfstab
/dev/mmcblk2p3		/		ext4		noatime								0 1
/dev/mmcblk0p3		/var		btrfs		rw,noatime,ssd,space_cache,subvolid=256,subvol=/gentoo-var	0 0
/dev/mmcblk0p4		/home		btrfs		rw,noatime,ssd,space_cache,subvolid=256,subvol=/gentoo-home	0 0
tmpfs			/tmp		tmpfs           noatime,size=500M						0 0

Sync bingch repo

root #emaint -r bingch sync

Distcc setup

Since it can take a while to compile the entire system onboard, I should advice to use distcc.

The use of docker images makes it easy to configure on every systems.

As fas as I am concerned, I used the ksmanis Gentoo distcc image here: https://hub.docker.com/r/ksmanis/gentoo-distcc

Ksmanis provides a lot of different images that should suits your needs (for me: ksmanis/gentoo-distcc:arm64-tcp).

So once installed on every participating machines, you just have to follow theses simple steps:

  • configure distcc for participating hosts:

https://wiki.gentoo.org/wiki/Distcc#Specifying_participating_hosts

root #/usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
  • adapt the make.conf file to indicates that the emerge process now have to use distcc

https://wiki.gentoo.org/wiki/Distcc#Configure_portage

FILE /etc/portage/make.conf
[...]
MAKEOPTS="-j11 -l2"
FEATURES="distcc"

Please note that you should not use -march=native or -mtune=native in the CFLAGS or CXXFLAGS variables of make.conf when compiling with distcc.

If you are running your participating host inside your own network, I think there is no need to configure ssh connection or ever compression.

Compile and install kernel

https://github.com/umiddelb/armhf/wiki/How-To-compile-a-custom-Linux-kernel-for-your-ARM-device

root #emerge -avq pinephone-sources
root #eselect kernel list

Available kernel symlink targets:

 [1]   linux-5.10.2-pinephone *
root #cd /usr/src
root #make pinephone_defconfig # See `arch/arm64/configs/pinephone_defconfig`
root #cp ./arch/arm64/boot/Image /boot/vmlinuz-5.10.2-pinephone-arm64
root #cp ./arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone*.dtb /boot
root #make modules_install
root #make firmware_install

Configure bootloader

TODO

Boot into gentoo

Initial configuration for systemd

As a matter of fact, some steps can't be done on chrooted environment

root #hostnamectl set-hostname pinephone
root #localectl set-keymap fr # or whatever your keyboard is
root #timedatectl set-timezone Europe/Paris # or wathever your time-zone is
root #timedatectl
              Local time: mar. 2020-12-29 22:25:34 CET
          Universal time: mar. 2020-12-29 21:25:34 UTC
                RTC time: mar. 2020-12-29 21:25:34    
               Time zone: Europe/Paris (CET, +0100)   

System clock synchronized: no

             NTP service: inactive                    
         RTC in local TZ: no                          

At this point, I installed screen one again to gain confort for last steps

root #emerge -avq app-misc/screen

Enable zram

https://wiki.gentoo.org/wiki/Zram

root #emerge -avq sys-block/zram-init
root #echo "zram" > /etc/modules-load.d/zram.conf
root #systemctl edit zram_swap

and modify startup command as follows:

FILE temporary file used for editing serviceservice override
[Service]
ExecStart=
ExecStart=/bin/sh -c "exec /sbin/zram-init -s4 -alz4 -d0 -Lzram_swap 1024"

This will reserve a 1Go swap space. Please note that -d0 is unnecessary since by default the zram-init script will use slot #0.

And the same for zram_tmp

root #systemctl edit zram_tmp

add

FILE temporary file used for editing serviceservice override
[Service]
ExecStart=
ExecStart=/sbin/zram-init -d1 -s4 -azstd -text4 -ostrictatime -m1777 -Ltmp_dir 124 /tmp

By this command you will mount a drive on /tmp of 124Mo in the ZRAM slot #1

root #systemctl edit zram_var_tmp

add

FILE temporary file used for editing serviceservice override
[Service]
ExecStart=
ExecStart=/sbin/zram-init -d2 -s4 -azstd -text4 -orelatime -m1777 -Lvar_tmp_dir 1024 /var/tmp

This command mount a drive on /var/tmp of 1Go in the ZRAM slot #2. Then mask tmp.mount as it is replaced by zram_tmp

root #systemctl mask tmp.mount

And finaly, enable the units

root #systemctl enable zram_swap zram_tmp zram_var_tmp

Created symlink /etc/systemd/system/swap.target.wants/zram_swap.service → /usr/lib/systemd/system/zram_swap.service. Created symlink /etc/systemd/system/local-fs-pre.target.wants/zram_tmp.service → /usr/lib/systemd/system/zram_tmp.service. Created symlink /etc/systemd/system/local-fs-pre.target.wants/zram_var_tmp.service → /usr/lib/systemd/system/zram_var_tmp.service.

Emerge stuff

At this time, compilation process can be very long. A usefull tip, if the compilation process is halted, is to continue by submitting

root #ebuild /path/to/package merge
root #ln -s /usr/bin/vapigen-0.48 /usr/bin/vapigen # seems to be requied by some packages
root #ln -s /usr/share/asciidoc /etc/asciidoc # seems to be requied by some packages
root #emerge pinephone phosh-meta --autounmask --autounmask-write -av
root #emerge -avquDN @world

Final configuration

Start Squeekboard at session startup

FILE /etc/xdg/autostart/sm.puri.Squeekboard.desktopSqueekboard launch
[Desktop Entry]
Name=Squeekboard
GenericName=Squeekboard Virtual Keyboard
Comment=Virtual Keyboard
Exec=/usr/bin/squeekboard
Terminal=false
Type=Application
NoDisplay=true
Categories=GTK;Utility;

Enable screen keyboard (if necessary)

root #gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true

Add various services

root #systemctl enable ModemManager
Talk status
This discussion is still ongoing.

Dr41nU (talk) 21:19, 4 January 2021 (UTC)