F(x)tec Pro¹ with SailfishOS 3.4 community build

Table of Contents

A community build of Sailfish OS 3.4 for the Pro1 was released a month ago and I finally got around to flashing it.

These are my installation notes.

NOTE: DO NOT OTA UPDATE FROM 3.3 YOU MUST REFLASH

boot splash

This need to reflash is OK, we finally get LVM and encryption. Thank you pigzz, I was looking forward to both these features!

Summary

I installed the latest build-lvm-testing, that day it was Job #871937492.

Obviously, I backed up my data on SFOS and copied it to my workstation before flashing my Pro¹ from scratch.

This post replaces my, older, SFOS 3.2 post. My previous update to 3.3.0.16 went so smoothly that I did not bother making a writeup.

Overall the SFOS release is OK, but I do see higher battery drain than I had under 3.2 and needed a work around for a Cal-/CardDAV regression.

A Quick Flash with Android Factory Image 2020-08-25

Before installing Sailfish OS 3.4 though, I did a factory reset to the latest available Android factory image, 20200825. See here for instructions.

I did this because quite a few blobs changed in the factory image, and I wanted the newer ones to be applied. I did not spend any time to identify the exact function of each changed blob.

The following seem to have changed between stock firmwares 20191028 and 20200825 (different sha256sum):

  • abl.elf
  • boot.img
  • dtbo.img
  • NON-HLOS.bin
  • system.img
  • vbmeta.img
  • vendor.img

And the following were identical in both stock firmware versions:

  • adspso.bin
  • BTFM.bin
  • devcfg.mbn
  • mdtp.img
  • pmic.elf
  • rpm.mbn
  • splash.img
  • tz.mbn
  • xbl.elf

I flashed as Waxberry writes in the post. Although, since I am lazy, I did put the commands into a small shell script so I did not have to check the output of each and every fastboot flash … command, but would stop flashing if any of the commands produced an error (as expected, none did error out, but I like to stop at the first failed task if something goes wrong).

#!/bin/bash

# commands from Waxberry's
# [Guide] Restore to stock firmware using Fastboot method
# at https://community.fxtec.com/topic/2466-guide-restore-to-stock-firmware-using-fastboot-method/

# show each command that is executed
set -x

# Abort when one of the called commands returns a non-zero exit code
set -e

# script flashes A and B, so no need to twiddle the active bit
fastboot flash devcfg_a devcfg.mbn
fastboot flash devcfg_b devcfg.mbn
fastboot flash dsp_a adspso.bin
fastboot flash dsp_b adspso.bin
fastboot flash bluetooth_a BTFM.bin
fastboot flash bluetooth_b BTFM.bin
fastboot flash modem_a NON-HLOS.bin
fastboot flash modem_b NON-HLOS.bin
fastboot flash pmic_a pmic.elf
fastboot flash pmic_b pmic.elf
fastboot flash rpm_a rpm.mbn
fastboot flash rpm_b rpm.mbn
fastboot flash splash splash.img
fastboot flash tz_a tz.mbn
fastboot flash tz_b tz.mbn
fastboot flash xbl_a xbl.elf
fastboot flash xbl_b xbl.elf
fastboot flash abl_a abl.elf
fastboot flash abl_b abl.elf
fastboot flash boot_a boot.img
fastboot flash boot_b boot.img
fastboot flash dtbo_a dtbo.img
fastboot flash dtbo_b dtbo.img
fastboot flash system_a system.img
fastboot flash system_b system.img
fastboot flash vendor_a vendor.img
fastboot flash vendor_b vendor.img
fastboot flash mdtp_a mdtp.img
fastboot flash mdtp_b mdtp.img
fastboot flash vbmeta_a vbmeta.img
fastboot flash vbmeta_b vbmeta.img

# nuke userdata
fastboot erase userdata

# reboot the phone
fastboot reboot

This was followed by waiting for Android to boot up, setting up my Google account so the flashed OS could pull whatever it needs, a quick phone call test, and a reboot (again into Android) just for good measure.

Flash tl;dr

Read the post SailfishOS 3.4 for the Pro1 on community.fxtec.com.

When I did the flashing, Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2.zip was the most recent output of the run-build-lvm-testing job. Obviously check the linked post and here for most recent image available if flashing at a later date.

Remember; SFOS 3.4 freshly installed uses defaultuser, while older SFOS used nemo. Thus anything having a hardcoded /home/nemo/ will have issues.

What this post is about

  • Getting Sailfish OS 3.4 on the F(x)tec Pro¹
  • allowing me to use Ansible with the Pro¹ being a host (the playbooks are run from one of my Fedora x86_64 machines)
  • grabbing some info from the device to compare to my previous SFOS devices
  • doing some well documented adjustments that were not yet part of the build

I am fine with using a community build that can not include some bits like the ability to run Android apps. Hopefully Jolla will eventually make an official image available which, like all previous SFOS releases, I’ll most definitely purchase to support the fine people at Jolla.

Pages to Read

Check these three pages for updated information before flashing!

While I love SFOS and greatly appreciate the community efforts, information is spread all over the place. talk.maemo.org is always my primary source, followed by together.jolla.com, which they replaced by forum.sailfishos.org but they have not yet fulfilled their promise to migrate the content from TJC to the new Sailfish OS forum.

FFS Jolla it’s been half a year, yes the old TJC had its failings, but come on, I expect data to be migrated at go live of a replacement software, not at some nebulous future date.

Install Sailfish OS

Just follow the instructions for SFOS 3.4. With the current image, all the needed fastboot commands come in a script.

To be safe against future data loss, I have just pointed the Wayback Machine at the URL.

Command Log

These are the commands I used. You MUST read the guide linked above, the commands are just for my records and do not include steps done interactively on the phone.

Note that the current setup does not put TWRP on the Pro¹, so there was no need to muck around with µSD-card preparation like I had to do for SFOS 3.2

Install Needed Tools on Workstation

I use Fedora on my workstation, the needed tools are available in the standard repos.

[root@workstation ~]# dnf install android-tools

Expect to find them in any modern distro, the package name might differ though. If you use Windows or MacOS, then I can not help you.

Unlock Bootloader

For units shipped after November 19 [2019], you need to unlock Bootloader first, by enabling developer mode in Android, and enable OEM unlocking and USB debugging. source

I did that ages ago and did not revisit those steps for my SFOS 3.4 install.

As pretty much always for mobile devices, the bootloadeer unlock instructions at lineageos.org are good.

[root@workstation ~]# fastboot devices
8911ce70	fastboot
[root@workstation ~]# fastboot flashing unlock
OKAY [  0.044s]
Finished. Total time: 0.044s

Flash SFOS via Included Script

Just follow the posted instructions.

Unpack and Check What Will be Flashed
user@workstation $ cd ~/tmp
user@workstation $ unzip -l artifacts.zip
user@workstation $ unzip artifacts.zip
user@workstation $ cd sfe-t5-3.4.0.24-devel-20201125/
user@workstation $ unzip Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2.zip
user@workstation $ cd Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2/
user@workstation $ cat flash.sh 
#README
#Use this script to flash the device.  The device must
#be in "fastboot" (or bootloader) mode.
#It may be nescessary to run this script as root.
#Usage: sh flash.sh

#Kernel and init
fastboot flash boot_a hybris-boot.img

#Root and home filesystems
fastboot flash userdata sailfish.img001

#vendor_b is used for /opt
fastboot flash vendor_b vendor.img001

#system_b is used for the factory restore images
fastboot flash system_b fimage.img001

#Splash Image
fastboot flash splash splash.img
Enter Fastboot Mode
  1. Power down the phone.
  2. Ensure it remains off (connecting a power supply migth wake and boot the phone)
  3. hold volume down and power until the screen shows a logo
  4. let go of the buttons
  5. connect to your computer via USB
Flash as Instructed
[root@workstation ~]# cd /home/user/tmp/sfe-t5-3.4.0.24-devel-20201125/Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2
[root@workstation Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2]# fastboot devices
8911ce70        fastboot
[root@workstation Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2]# fastboot getvar current-slot
current-slot: a
Finished. Total time: 0.001s
[root@workstation Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2]# sh flash.sh 
Sending 'boot_a' (19768 KB)                        OKAY [  0.625s]
Writing 'boot_a'                                   OKAY [  0.260s]
Finished. Total time: 0.887s
Sending sparse 'userdata' 1/2 (522154 KB)          OKAY [ 15.639s]
Writing sparse 'userdata' 1/2                      OKAY [  0.000s]
Sending sparse 'userdata' 2/2 (463619 KB)          OKAY [ 18.650s]
Writing sparse 'userdata' 2/2                      OKAY [  0.000s]
Finished. Total time: 34.306s
Sending 'vendor_b' (364 KB)                        OKAY [  0.018s]
Writing 'vendor_b'                                 OKAY [  0.000s]
Finished. Total time: 17.933s
Sending 'system_b' (493508 KB)                     OKAY [ 14.782s]
Writing 'system_b'                                 OKAY [  0.000s]
Finished. Total time: 72.719s
Sending 'splash' (6091 KB)                         OKAY [  0.188s]
Writing 'splash'                                   OKAY [  0.290s]
Finished. Total time: 27.279s
[root@t3600 Sailfish_OS--devel-20201125-3.4.0.24-t5-0.0.1.2]# fastboot reboot
Rebooting                                          
Finished. Total time: 0.050s

Use SailfishOS

From here on, it should behave like any SFOS device. Obviously the commercial Jolla bits are not in the community build. e.g. the Android compatibility layer.

Enable Developer Mode

Follow Jolla’s instructions (I failed to find an equivalent post on https://forum.sailfishos.org/)

Copy SSH Pubkey to Phone

user@workstation ~ $ ssh-copy-id -f -i ~/.ssh/id_USBkey.pub defaultuser@pro1

Enable ssh Access for root

I’ll ssh in directly as root. This saves me from having to make devel-su a valid become_method docs.

To be able to ssh in as root, you need to

  • enable developer mode in Jolla Settings
  • enable remote access in Jolla Settings
  • put your ssh pubkey in /root/.ssh/authorized_keys
  • chmod 0700 /root/.ssh/
  • chmod 0600 /root/.ssh/authorized_keys
user@workstation ~ $ ssh defaultuser@pro1
Last login: Thu Dec 24 22:35:08 2020 from 192.168.50.59
NOTICE: Env value ignored: MOZ_GMP_PATH=/usr/lib/gmp-droid/0.1/
,---
| Sailfish OS 3.4.0.24 (Pallas-Yllästunturi)
'---
[defaultuser@Pro1 ~]$ devel-su
Password: 
[root@Pro1 defaultuser]# cd
[root@Pro1 ~]# mkdir .ssh
[root@Pro1 ~]# chmod 700 .ssh
[root@Pro1 ~]# cd .ssh
[root@Pro1 .ssh]# cp /home/defaultuser/.ssh/authorized_keys .
[root@Pro1 .ssh]# ls -l
total 4
-rw-------    1 root     root           773 Dec 24 22:36 authorized_keys

Restore of old (SFOS < 3.4) Backup

My first attempt to restore backup failed, I am not the only one

Since SFOS 3.4 freshly installed uses defaultuser but older SFOS releases used nemo, I created a symlink.

c.f. the section Shared Device in the SFOS Pallas-Yllästunturi 3.4.0 release notes.

I elected to symlink, restore backup and then remove the symlink

[root@Pro1 ~]# cd /home/
[root@Pro1 home]# ln -s defaultuser nemo
[root@Pro1 home]# ls -l
total 32
-rw-------    1 root     root          9216 Dec 24 23:07 aquota.user
drwxr-x---   20 defaultu defaultu      4096 Dec 24 22:38 defaultuser
drwx------    2 root     root         16384 Oct  6 19:32 lost+found
lrwxrwxrwx    1 root     root            11 Dec 25 00:57 nemo -> defaultuser

Then I successfully restored my backup from before SFOS 3.4 (when the user was named nemo instead of the new defaultuser.)

Finally I removed the symlink again (so I can notice any other stuff that has a hardcoded /home/nemo/).

WARNING: Be sure to verify that /home/nemo is a symlink before you delete it.

[root@Pro1 ~]# ls -l /home
total 32
-rw-------    1 root     root          9216 Dec 24 23:07 aquota.user
drwxr-x---   20 defaultu defaultu      4096 Dec 24 22:38 defaultuser
drwx------    2 root     root         16384 Oct  6 19:32 lost+found
lrwxrwxrwx    1 root     root            11 Dec 25 01:02 nemo -> defaultuser
[root@Pro1 ~]# rm /home/nemo/
rm: remove '/home/nemo'? y
[root@Pro1 ~]# ls -l /home
total 32
-rw-------    1 root     root          9216 Dec 24 23:07 aquota.user
drwxr-x---   20 defaultu defaultu      4096 Dec 24 22:38 defaultuser
drwx------    2 root     root         16384 Oct  6 19:32 lost+found

To ensure all instructions work, I went through the commands in this post twice. Since my primary backup/restore/sync of contacts, calendars, todo lists and pictures is done through a mix of both a Netxcloud instance at home and KolabNow paid account, I did not bother restoring backup the second time around.

Ansible

You may not need this, but like to control my gizmos with Ansible.

These steps should apply to any SFOS device, I have successfully used them with a previous one.

Install Python on SFOS

For Ansible to be able to control your Sailfish X device, you will need to install python.

user@workstation ~ $ ssh root@pro1
Last login: Wed Nov 25 14:35:02 2020
,---
| Sailfish OS 3.4.0.24 (Pallas-Yllästunturi)
'---
[root@Pro1 ~]# pkcon refresh
Refreshing cache             
Starting                        
Refreshing software list   
Finished                       
[root@Pro1 ~]# pkcon install python
Resolving                        
Querying                        
Testing changes               
Finished                                                                                           [                                                ] (0%)
The following packages have to be installed:
 python-2.7.17+git5-1.9.2.jolla.armv7hl	An interpreted, interactive, object-oriented programming language
 python-libs-2.7.17+git5-1.9.2.jolla.armv7hl	Runtime libraries for Python
Proceed with changes? [N/y] y

Testing changes               
Installing                        
Starting                        
Downloading packages           
Installing packages            
Finished                       
[root@Pro1 ~]# 

Add Sailfish OS Device to Inventory

Obviously you will have to ensure that your phone is always reachable as pro1, do this via your network infrastructure.

pro1    ansible_user=root

Test Ansible Connectivity

user@workstation ~ $ ansible pro1 -m ping
[WARNING]: Platform linux on host pro1 is using the discovered Python interpreter at /usr/bin/python, but future installation of
another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
pro1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

View Ansible Facts

user@workstation ~ $ ansible pro1 -m setup
[WARNING]: Platform linux on host pro1 is using the discovered Python interpreter at /usr/bin/python, but future installation of
another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
pro1 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
[...]

Nail Down Python Executable to Silence the Warning

For now I want Ansible to explicitly use Python 2.7 in the Pro1, not whatever the symlink /usr/bin/python happens to point to. So I added the following in host_vars/pro1.yml on my workstation.

ansible_python_interpreter: /usr/bin/python2.7

Do not blindly add this, RTFM first and decide which behaviour you want for your use case. auto or auto_silent may better suit your use case.

Use The Right Ansible Modules and Roles

Note that you should enable/disable repos with ssu. e.g.:

ssu --help
ssu lr #list repo
ssu ar #add repo

Software should be installed with pkcon.

pkcon install <PackageName>

Neither of these seem to have corresponding ansible modules.

My Generic SFOS Playbook

Is still quite short at the moment (only nails down ssh access), I expect this to grow when doing a step manually starts to annoy me.

For now I simply added the new host to my old play sailfish.yml, it now reads as follows

- name: SailfishOS config

  hosts:
    - gemini
    - pro1
    - Xperia10II-DualSIM

  become: no # we ssh in directly as root with ssh key, to avoid dealing with devel-su

  handlers:
    - name: restart systemd-journald
      systemd:
        name:       systemd-journald.service
        state:      restarted
    - name: restart sshd
      systemd:
        name:       sshd.service
        state:      restarted

  tasks:
    # Ensure sshd config is set up to my liking, the disconnect after 15 mins is simply because I tend to forget for hours that I ssh-ed in and this will have a battery hit
    - name: SSHD | ensure AuthorizedKeysFile is configured
      lineinfile:
        path:         /etc/ssh/sshd_config
        regexp:       '^AuthorizedKeysFile'
        insertbefore: '^#AuthorizedPrincipalsFile none'
        line:         'AuthorizedKeysFile	.ssh/authorized_keys'
      notify: restart sshd

    - name: SSHD | ensure PasswordAuthentication is off
      lineinfile:
        path:         /etc/ssh/sshd_config
        regexp:       '^PasswordAuthentication'
        insertafter:  '^#PasswordAuthentication'
        line:         'PasswordAuthentication no'
      notify: restart sshd

    - name: SSHD | ensure that a response is requested from the client after 1 minute of inactivity
      lineinfile:
        path:         /etc/ssh/sshd_config
        regexp:       '^ClientAliveInterval'
        insertafter:  '^#ClientAliveInterval'
        line:         'ClientAliveInterval 1m'
      notify: restart sshd

    - name: SSHD | ensure that a client is disconnected after 3 missed response requests
      lineinfile:
        path:         /etc/ssh/sshd_config
        regexp:       '^ClientAliveCountMax'
        insertafter:  '^#ClientAliveCountMax'
        line:         'ClientAliveCountMax 3'
      notify: restart sshd

    # set either 'volatile' or 'persistent'
    # if you enable the use of persistent journal, then also see
    # https://together.jolla.com/question/4842/how-to-enable-more-detailed-and-persistent-logs-on-jolla-device/
    - name: Ensure journald.conf is NOT set to save to persistent storage
      ini_file:
        path:             /etc/systemd/journald.conf
        section:          Journal
        option:           Storage
        value:            volatile
        no_extra_spaces:  True
        backup:           False
      notify: restart systemd-journald

    - name: Ensure journald.conf has a more reasonable setting than the default RuntimeMaxUse=1M
      ini_file:
        path:             /etc/systemd/journald.conf
        section:          Journal
        option:           RuntimeMaxUse
        value:            10M
        no_extra_spaces:  True
        backup:           False
      notify: restart systemd-journald

    # While with the ini file entry Storage=persistent, systemd should create the target dir, ensure it is there like the above URL suggests
    # bounce the journald if the directory was changed
    - name: Ensure /var/log/journal is present
      file:
        path:   /var/log/journal
        state:  directory
        owner:  root
        group:  systemd-journal
      notify: restart systemd-journald

and then ran it;

pcfe@workstation pcfe.net (master) $ ansible-playbook -l pro1 sailfish.yml

PLAY [SailfishOS config] *****************************************************************************************
TASK [Gathering Facts] *******************************************************************************************
ok: [pro1]

TASK [SSHD | ensure AuthorizedKeysFile is configured] ************************************************************
ok: [pro1]

TASK [SSHD | ensure PasswordAuthentication is off] ***************************************************************
changed: [pro1]

PLAY RECAP *******************************************************************************************************
pro1                       : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Collect Info on the Pro1

Storage

This SFOS 3.4 community build finally uses LVM. Happy!

Since I have 3.8G / and a smidge over 100G /home/, maybe shrink /home to have some free PE for future expansion of /

Details here, be sure to follow the steps for encryped home volume

For now I’ll leave it as is.

[root@Pro1 ~]# pvs
  PV         VG       Fmt  Attr PSize   PFree
  /dev/sda8  sailfish lvm2 a--  107.50g    0 
[root@Pro1 ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  sailfish   1   2   0 wz--n- 107.50g    0 
[root@Pro1 ~]# lvs
  LV   VG       Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home sailfish -wi-ao---- <103.60g                                                    
  root sailfish -wi-ao----   <3.91g                                                    
[root@Pro1 ~]# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/sailfish/root        3.8G      1.1G      2.7G  29% /
devtmpfs                  2.7G    884.0K      2.7G   0% /dev
tmpfs                     2.8G         0      2.8G   0% /dev/shm
tmpfs                     2.8G     21.9M      2.8G   1% /run
tmpfs                     2.8G         0      2.8G   0% /sys/fs/cgroup
tmpfs                     2.8G      8.0K      2.8G   0% /tmp
/dev/sde18              991.9M    547.8M    428.1M  56% /vendor
/dev/sde36              820.6M    880.0K    795.7M   0% /opt
/dev/sda6                 2.9G      2.3G    598.4M  80% /system_root
/dev/sda2                27.0M      6.3M     19.8M  24% /mnt/vendor/persist
/dev/sda6                 3.8G      1.1G      2.7G  29% /system
/dev/sde9                11.7M     10.0M      1.4M  88% /vendor/dsp
/dev/sde6                64.0M    368.0K     63.6M   1% /vendor/bt_firmware
/dev/sde5               109.9M    102.9M      7.1M  94% /vendor/firmware_mnt
/dev/sailfish/root        3.8G      1.1G      2.7G  29% /vendor/lib64/librecovery_updater_msm.so
overlay                   3.8G      1.1G      2.7G  29% /system
overlay                   3.8G      1.1G      2.7G  29% /system_root/system
/dev/mapper/luks-b981e7a3-4fa4-4f67-a57f-72aee3ce3214
                        101.5G    119.9M    101.3G   0% /home
tmpfs                   569.3M    748.0K    568.5M   0% /run/user/100000
tmpfs                   569.3M         0    569.3M   0% /run/user/0

While I did not quite expect to see this many block devices, I will not override the vendor’s setup.

[root@Pro1 ~]# lsblk
NAME                                            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                               8:0    0 113.6G  0 disk  
|-sda1                                            8:1    0     8K  0 part  
|-sda2                                            8:2    0    32M  0 part  /mnt/vendor/persist
|-sda3                                            8:3    0     1M  0 part  
|-sda4                                            8:4    0   512K  0 part  
|-sda5                                            8:5    0   512K  0 part  
|-sda6                                            8:6    0     3G  0 part  /system_root
|-sda7                                            8:7    0     3G  0 part  
`-sda8                                            8:8    0 107.5G  0 part  
  |-sailfish-root                               252:0    0   3.9G  0 lvm   /
  `-sailfish-home                               252:1    0 103.6G  0 lvm   
    `-luks-b981e7a3-4fa4-4f67-a57f-72aee3ce3214 252:2    0 103.6G  0 crypt /home
sdb                                               8:16   0     4M  0 disk  
`-sdb1                                            8:17   0     4M  0 part  
sdc                                               8:32   0     4M  0 disk  
`-sdc1                                            8:33   0     4M  0 part  
sdd                                               8:48   0   128M  0 disk  
|-sdd1                                            8:49   0     4K  0 part  
`-sdd2                                            8:50   0     1M  0 part  
sde                                               8:64   0     4G  0 disk  
|-sde1                                            8:65   0   512K  0 part  
|-sde2                                            8:66   0     2M  0 part  
|-sde3                                            8:67   0   512K  0 part  
|-sde4                                            8:68   0   512K  0 part  
|-sde5                                            8:69   0   110M  0 part  /vendor/firmware_mnt
|-sde6                                            8:70   0     1M  0 part  /vendor/bt_firmware
|-sde7                                            8:71   0     4M  0 part  
|-sde8                                            8:72   0    32M  0 part  
|-sde9                                            8:73   0    16M  0 part  /vendor/dsp
|-sde10                                           8:74   0     1M  0 part  
|-sde11                                           8:75   0   512K  0 part  
|-sde12                                           8:76   0    64M  0 part  
|-sde13                                           8:77   0     8M  0 part  
|-sde14                                           8:78   0    64K  0 part  
|-sde15                                           8:79   0   512K  0 part  
|-sde16                                         259:0    0   512K  0 part  
|-sde17                                         259:1    0   128K  0 part  
|-sde18                                         259:2    0     1G  0 part  /vendor
|-sde19                                         259:3    0   512K  0 part  
|-sde20                                         259:4    0     2M  0 part  
|-sde21                                         259:5    0   512K  0 part  
|-sde22                                         259:6    0   512K  0 part  
|-sde23                                         259:7    0   110M  0 part  
|-sde24                                         259:8    0     1M  0 part  
|-sde25                                         259:9    0     4M  0 part  
|-sde26                                         259:10   0    32M  0 part  
|-sde27                                         259:11   0    16M  0 part  
|-sde28                                         259:12   0     1M  0 part  
|-sde29                                         259:13   0   512K  0 part  
|-sde30                                         259:14   0    64M  0 part  
|-sde31                                         259:15   0     8M  0 part  
|-sde32                                         259:16   0    64K  0 part  
|-sde33                                         259:17   0   512K  0 part  
|-sde34                                         259:18   0   512K  0 part  
|-sde35                                         259:19   0   128K  0 part  
|-sde36                                         259:20   0     1G  0 part  /opt
|-sde37                                         259:21   0    16K  0 part  
|-sde38                                         259:22   0     4K  0 part  
|-sde39                                         259:23   0     1M  0 part  
|-sde40                                         259:24   0   256K  0 part  
|-sde41                                         259:25   0   256K  0 part  
|-sde42                                         259:26   0     4K  0 part  
|-sde43                                         259:27   0  32.7M  0 part  
|-sde44                                         259:28   0     4K  0 part  
|-sde45                                         259:29   0     1M  0 part  
|-sde46                                         259:30   0     8M  0 part  
|-sde47                                         259:31   0     2M  0 part  
|-sde48                                         259:32   0    64M  0 part  
`-sde49                                         259:33   0   128K  0 part  
sdf                                               8:80   0   1.5G  0 disk  
|-sdf1                                            8:81   0     2M  0 part  
|-sdf2                                            8:82   0     2M  0 part  
|-sdf3                                            8:83   0     2M  0 part  
`-sdf4                                            8:84   0     4K  0 part  
mmcblk0                                         179:0    0  29.8G  0 disk  
`-mmcblk0p1                                     179:1    0  29.8G  0 part  
zram0                                           253:0    0     1G  0 disk  [SWAP]

RAM Available to SFOS

[root@Pro1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          5.6Gi       1.1Gi       3.6Gi        23Mi       899Mi       4.5Gi
Swap:         1.0Gi          0B       1.0Gi

CPU

[root@Pro1 ~]# lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           2
Vendor ID:           Qualcomm
Model:               4
Model name:          Kryo V2
Stepping:            0xa
CPU max MHz:         2457.6001
CPU min MHz:         300.0000
BogoMIPS:            38.40
L1d cache:           32K
L1i cache:           32K
L2 cache:            1024K
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32

Kernel

[root@Pro1 ~]# uname -a
Linux Pro1 4.4.153-perf #7 SMP PREEMPT Mon May 18 10:31:30 UTC 2020 aarch64 GNU/Linux

OS Customisations and Configuration

Since I expect these to be part of the build soon, not in Ansible for now.

Allow landscape orientation in homescreen

As per this tjc post

[root@Pro1 ~]# grep return\ allowed /usr/lib/qt5/qml/Sailfish/Silica/Page.qml
        return allowed
[root@Pro1 ~]# sed -e "s/return allowed/return Orientation.All/" -i  /usr/lib/qt5/qml/Sailfish/Silica/Page.qml

Hardware decoding of h.264 and h.265 (hevc) videos in native SFOS applications

As per this tjc post.

[root@Pro1 ~]# cat /etc/gst-droid/gstdroidcodec.conf
[decoders]
video/hevc=1

[root@Pro1 ~]# curl -L -o /etc/gst-droid/gstdroidcodec.conf https://raw.githubusercontent.com/mer-hybris/droid-config-sony-ganges-pie/master/sparse/etc/gst-droid/gstdroidcodec.conf
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168  100   168    0     0    425      0 --:--:-- --:--:-- --:--:--   425
[root@Pro1 ~]# rm /home/defaultuser/.cache/gstreamer-1.0/registry.* 
rm: remove '/home/defaultuser/.cache/gstreamer-1.0/registry.armv7l.bin'? y

Replace Boot Splash

Was no longer needed, Sailfish_OS–devel-20201125-3.4.0.24-t5-0.0.1.2 did this for me. Thanks SFOS Porters!

Automatic Keyboard Backlight (automatic using mce)

Was no longer needed, Sailfish_OS–devel-20201125-3.4.0.24-t5-0.0.1.2 did this for me. Thanks SFOS Porters!

HW Keyboard US-international

Was no longer needed, Sailfish_OS–devel-20201125-3.4.0.24-t5-0.0.1.2 did this for me. Thanks SFOS Porters!

Be sure to read the comments in /usr/share/X11/xkb/symbols/fxtec_vndr/pro1 if, unlike me, you want another layout than the US, intl., with AltGr dead keys default.

Left Unchanged

  • I did not enable off-mode-charge.
  • Normally I enable persistent journal storage via journald.conf(5) for all my Linux based machines; servers, workstations and mobile devices. But the last 10 months SFOS 3,2 and later 3.3 on the Pro¹ had been so stable that I left it set to Storage=volatile for now. No reason to needlessly wear out my phone’s flash storage.

Using OpenRepos.net

First install File Browser, then Storeman. Thanks olf!

Install Patchmanager 3.0

As per Guide: Sailfish X on Xperias.

So far I have not added any patches, previously I used

  • Lockscreen Analog Clock by Ancelad
  • Ultimate statusbar patch by Anceland

But I have not yet had a need for either on SFOS 3.4 since the phone is of very little use to me until it syncs with -Kolab Now_ again and since I’ve been working from home non stop since March, it’s not like I use my mobile device much anyway.

Issues

WIP section, until I have Kolab Now sorted there will not be much other testing. :-(

Syncing with Kolab Now

SFOS 3.4 against Kolab Now servers needs special handling until SFOS fixes this regression;

  • Create two separate accounts, one for CalDAv and one for CardDAV.
  • For CalDAV, put the CalDAV path (/calendars/user@domain) in the webDAV path in the UI.
  • For CardDAV, put the CardDAV path (/addressbooks/user@domain) in the webDAV path in the UI.
  • Be sure to replace ‘user@domain’ with your kolabnow.com login!

Fingerprints

Like described here

I had some fingerprints listed from a previous install (unsure if a previous SFOS or Android)

  • Cleaned them out via commandline
  • Successfully set up one new fingerprint
  • Successfully used that finger to unklock
  • Successfully deleted that fingerprint (just to be sure delete works)

Backup

[root@Pro1 ~]# tar cvf old-fingerprints.tar /persist/data/fingerprint/

Clean and Reboot

[root@Pro1 ~]# rm /persist/data/fingerprint/*
[root@Pro1 ~]# reboot

High Battery Drain

seems to be cnss_diag. It did log a lot in the about 4 days, until I edited the conf file and rebooted.

[root@Pro1 ~]# date ; ls -lhrt /data/vendor/wifi/wlan_logs
Mon Dec 28 17:32:10 CET 2020
total 143M   
-rw-------    1 system   system         0 Oct  6 19:32 txrx_pktlog_current.dat
-rw-------    1 system   system     30.0M Dec 28 16:30 host_driver_logs_001.txt
-rw-------    1 system   system     30.0M Dec 28 16:49 host_driver_logs_002.txt
-rw-------    1 system   system     30.0M Dec 28 16:51 cnss_fw_logs_000.txt
-rw-------    1 system   system     30.0M Dec 28 16:55 cnss_fw_logs_001.txt
-rw-------    1 system   system     12.3M Dec 28 16:56 host_driver_logs_current.txt
-rw-------    1 system   system     10.6M Dec 28 16:56 cnss_fw_logs_current.txt
[root@Pro1 ~]# 

To make logging stop, do

vi /data/vendor/wifi/cnss_diag.conf

so far only LOG_PATH_FLAG = 0 set. The value was 1 before edit.

See here (Discord) for details.

Sugegsted edit is

LOG_PATH_FLAG = 0
MAX_LOG_FILE_SIZE = 1
MAX_ARCHIVES = 1
LOG_STORAGE_PATH =

Opened an issue at the porting project to please disable logging.

Adaptations repo to contribute to

https://gitlab.com/sailfishos-porters-ci/t5-ci/