Development guide

From postmarketOS
Jump to: navigation, search

Tips

If happens often that we commit changes and then we realize that we forgot to regenerate APKBUILD checksums. This is noticed by Travis (example) but you might want to avoid it.

You can install the following git hook that is run every time before you commit.

Copy the following code to .git/hooks/pre-commit inside your pmbootstrap repository:

#!/bin/sh
#
# postmarketOS pre-commit hook
# Checks for bad checksums

./test/check_checksums.py

Now this is what happens when you forgot to regenerate checksums for some aport and try to commit

$ git commit -a
Checking device-qemu-aarch64 for correct checksums
[13:45:23] (native) generate checksums for device-qemu-aarch64
[13:45:23] Done
MM aports/device/device-qemu-aarch64/APKBUILD

diff --git a/aports/device/device-qemu-aarch64/APKBUILD b/aports/device/device-qemu-aarch64/APKBUILD
index 99b811b..c4cee6c 100644
--- a/aports/device/device-qemu-aarch64/APKBUILD
+++ b/aports/device/device-qemu-aarch64/APKBUILD
@@ -21,4 +21,4 @@ package() {
                "$pkgdir"/etc/deviceinfo
 }
 
-sha512sums="a18ab789c19d8802be6a9e9c842f4c304f267bd78f46b096b4ba6609430d1544e0a9eca9bc22db67a0728efae3aad6c2def9f7e64157d31aeb31b4bb839076d5  deviceinfo"
+sha512sums="8df46383685a40a96b7c604c29d413ecdd4b4a9b92cb61f452283042f189b1ca01cb70632fec0711dd67229e0501729762c6841359ac7ea455f516b512abce9c  deviceinfo"

** The checksums are not correct

After that, simply do git commit -a --amend -n (-n is necessary so that this time the hook is not triggered).

Code

pmb.helpers.run

Use pmb.helpers.run.root() and pmb.helpers.run.user() instead of subprocess because these logs to the log file.

For security reasons, you cannot write files by redirecting the output of the echo command using pmb.helpers.run functions. The following call will never work as you would expect

pmb.chroot.root(args, ["echo", "test", ">", "/tmp/test"])

In order to write a file inside of a chroot, the recommended way is to write the file normally as you would do in Python and then copy the file to the correct location, like

with open("/tmp/somefile", "w") as handle:
    handle.write("It works")
pmb.chroot.root(args, ["mv", "/tmp/somefile", "/etc/somefile"])

If you need to redirect the input instead, another solution is writing a bash script to a file and then executing it as in pmb/chroot/initfs.py

pmb.install

Whenever you change the installation process, also adjustt the recovery zip installer (which performs a good part of the installation procedure directly on the Android device with a shell script).