Talk:PinePhone
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
root #
mkdir /mnt/gentoo
root #
mount /dev/mmcblk2p3 /mnt/gentoo
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
/mnt/gentoo/etc/portage/repos.conf/bingch.conf
Bingch 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 :
/etc/systemd/network/50-dhcp.network
Network configuration[Match] Name=en* [Network] DHCP=yes
root #
systemctl enable systemd-networkd.service
Edit fstab
/etc/fstab
fstab/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
/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:
temporary file used for editing service
service 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
temporary file used for editing service
service 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
temporary file used for editing service
service 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
/etc/xdg/autostart/sm.puri.Squeekboard.desktop
Squeekboard 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