Jump to content

Installing packages on a running phone

From postmarketOS Wiki
Revision as of 07:10, 2 September 2020 by Ollieparanoid (talk | contribs) (copy package signing key instead of --allow-untrusted, make more consistent and easier to follow (big rewrite))

This article explains how to host packages that were built with pmbootstrap in a local network, so you can install them on your phone via Wi-Fi or USB network.

Install packages from your PC

Start the webserver

Go to the pmbootstrap packages dir and start a web server:

pc:~$ cd ~/.local/var/pmbootstrap/packages/edge && python3 -m http.server

Add the repository

Add your own repository on top of your /etc/apk/repositories file on the phone (remember to adjust the IP):

# Add your host machine address
http://172.16.42.2:8000
    
https://nl.alpinelinux.org/alpine/edge/main
https://nl.alpinelinux.org/alpine/edge/community
https://nl.alpinelinux.org/alpine/edge/testing

Copy the package signing keys

If you did not generate the postmarketOS installation from the same PC, which is now running pmbootstrap to build the packages you want to install, then you need to copy the package signing keys. Otherwise, apk will refuse to install the packages ("UNTRUSTED signature").

On your PC (replace 172.16.42.1 with the IP of your phone, user with your ssh username, mind the : at the end of the scp command):

pc:~$ scp ~/.local/var/pmbootstrap/config_apk_keys/pmos-*.rsa.pub user@172.16.42.1:
pc:~$ ssh user@172.16.42.1

Run on your phone via SSH:

phone:~$ sudo mv pmos-*.rsa.pub /etc/apk/keys/

Use your repository

Now apk should recognize your repository, and you should be able to install or upgrade packages built on your PC:

phone:~$ sudo apk update
phone:~$ sudo apk upgrade hello-world

pmos-update-kernel

Android devices currently need to run pmos-update-kernel after a kernel upgrade, to actually write the new kernel to the partition expected by LK (see boot process).

Run it manually

Install postmarketos-update-kernel, figure out the kernel flavor (in the example below: postmarketos-qcom-msm8974) and update the kernel:

phone:~$ sudo apk add postmarketos-update-kernel
phone:~$ ls /boot/boot.img-*
/boot/boot.img-postmarketos-qcom-msm8974
phone:~$ sudo pmos-update-kernel postmarketos-qcom-msm8974

Automate with a script

If you're experimenting with mainline kernel and adding new features you might end up wanting to update your kernel and restart your phone very often. On the kernel building end you can use envkernel.sh + pmbootstrap build --envkernel MAINLINE_LINUX_PACKAGE_NAME. That will produce a fresh new kernel package with the changes you made. Then you need to install that package to the phone.

Use this script to automate the steps above (adjust postmarketos-qcom-msm8974!):

#!/bin/sh -ex
# Upgrade all packages (should have your kernel upgrade)
sudo apk update
sudo apk add postmarketos-update-kernel
sudo apk upgrade

# Write kernel to location expected by LK
sudo pmos-update-kernel postmarketos-qcom-msm8974

# Prompt for restart
set +x
echo -n 'reboot [yN]? '
read ans
test "$ans" = 'y' && sudo reboot