Difference between revisions of "Pmbootstrap development guide"

From postmarketOS
Jump to: navigation, search
m (Ollieparanoid moved page Development-guide to Development guide)
(link to testsuite)
Line 1: Line 1:
 
== Tips ==
 
== Tips ==
 
 
If happens often that we commit changes and then we realize that we forgot to regenerate APKBUILD checksums. This is noticed by Travis ([https://travis-ci.org/postmarketOS/pmbootstrap/builds/261056579 example]) but you might want to avoid it.
 
If happens often that we commit changes and then we realize that we forgot to regenerate APKBUILD checksums. This is noticed by Travis ([https://travis-ci.org/postmarketOS/pmbootstrap/builds/261056579 example]) but you might want to avoid it.
  
Line 36: Line 35:
  
 
== Code ==
 
== Code ==
 
 
=== pmb.helpers.run ===
 
=== pmb.helpers.run ===
 
 
Use <code>pmb.helpers.run.root()</code> and <code>pmb.helpers.run.user()</code> instead of <code>subprocess</code> because these logs to the log file.
 
Use <code>pmb.helpers.run.root()</code> and <code>pmb.helpers.run.user()</code> instead of <code>subprocess</code> because these logs to the log file.
  
Line 52: Line 49:
  
 
=== pmb.install ===
 
=== 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).
  
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).
+
== See also ==
 +
* [[Testsuite]]

Revision as of 11:17, 27 January 2018

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).

See also