summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-10-01 00:53:10 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-10-01 01:08:19 +0200
commit8b8fc8358d734867e1e10d3099cf6f7ccc47fd42 (patch)
tree5bce5d3d0bb324d3e42b1520c2cb945a3efad83b
parent9f7462a185a8a5f4c4b314bcf003f08b6a839aec (diff)
downloadabslibre-8b8fc8358d734867e1e10d3099cf6f7ccc47fd42.tar.gz
abslibre-8b8fc8358d734867e1e10d3099cf6f7ccc47fd42.tar.bz2
abslibre-8b8fc8358d734867e1e10d3099cf6f7ccc47fd42.zip
pcr: Add abootimg 0.6 from Aur
The Aur package is based on the abootimg-git, Guix and Debian packages. While abootimg only supports old Android images format and its git repository[1] doesn't have new commits since 2012, the abootimg program is used by diffoscope to produce more fine grained diffs between two Android boot images. Without it you end up with a hexdump based diff which isn't very useful. With abootimg you can really debug and fix reproducibility issues when creating Android boot images. Here's what you get between two boot images whose only difference is due to the timestamps in the gzip command used to build the images[2]: --- tests/recovery-i9300-with-root.img +++ tests/recovery-i9300-with-root.img.1 ├── abootimg -i {} │ @@ -13,9 +13,9 @@ │ * load addresses: │ kernel: 0x40008000 │ ramdisk: 0x41000000 │ tags: 0x40000100 │ │ * cmdline = console=ttySAC2,115200 │ │ -* id = 0xa1891d8e 0xdfc327bf 0xe9dc0add 0xb1b7ba27 0x4c251f7d 0x00000000 0x00000000 0x00000000 │ +* id = 0xbd8bda50 0x69a5cbc5 0x9f4e7867 0x3853557e 0x888ff90a 0x00000000 0x00000000 0x00000000 ├── initrd.img │ ├── filetype from file(1) │ │ @@ -1 +1 @@ │ │ -gzip compressed data, was "ramdisk.cpio", last modified: Thu Sep 30 23:04:41 2021, from Unix │ │ +gzip compressed data, was "ramdisk.cpio", last modified: Thu Sep 30 23:02:44 2021, from Unix And without abootimg you have the following instead: --- tests/recovery-i9300-with-root.img +++ tests/recovery-i9300-with-root.img.1 │┄ 'abootimg' not available in path. Falling back to binary comparison. @@ -30,16 +30,16 @@ 000001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000200: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000210: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000220: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000230: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000240: 8e1d 89a1 bf27 c3df dd0a dce9 27ba b7b1 .....'......'... -00000250: 7d1f 254c 0000 0000 0000 0000 0000 0000 }.%L............ +00000240: 50da 8bbd c5cb a569 6778 4e9f 7e55 5338 P......igxN.~US8 +00000250: 0af9 8f88 0000 0000 0000 0000 0000 0000 ................ 00000260: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000270: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000280: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000290: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000002a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000002b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000002c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ @@ -212218,15 +212218,15 @@ 0033cf90: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cfa0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cfb0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cfc0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cfd0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cfe0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0033cff0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -0033d000: 1f8b 0808 8942 5661 0003 7261 6d64 6973 .....BVa..ramdis +0033d000: 1f8b 0808 1442 5661 0003 7261 6d64 6973 .....BVa..ramdis 0033d010: 6b2e 6370 696f 00b4 5b7b 77db b692 cfbf k.cpio..[{w..... 0033d020: d6a7 c0b1 7dea 3c4c 5292 653b 76cb b6b9 ....}.<LR.e;v... 0033d030: 8d6f 93de a4ce 899d bddd 4db2 3c10 094a .o........M.<..J 0033d040: bc22 0916 0065 298f fdec 3b03 5212 1fa0 ."...e)...;.R... 0033d050: ac74 f7fa b48e 35f8 cd60 30c0 bc40 aa7f .t....5..`0..@.. 0033d060: de3f ef0f fafd fee8 e284 f5f1 870e e8a8 .?.............. 0033d070: 6ffe 1934 3e07 1db8 e6cf d3d5 1ffe 948a o..4>........... And the issue here is not hypothetical as the above show a real bug preventing tests from working in a tool meant to add root access by default in Replicant boot and recovery images. And that bug was really fixed thanks to abootimg. [1]https://github.com/ggrandou/abootimg [2]The ID takes into account the hash of the initrd image. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r--pcr/abootimg/PKGBUILD46
-rw-r--r--pcr/abootimg/no-initrd.patch35
2 files changed, 81 insertions, 0 deletions
diff --git a/pcr/abootimg/PKGBUILD b/pcr/abootimg/PKGBUILD
new file mode 100644
index 000000000..22f46210b
--- /dev/null
+++ b/pcr/abootimg/PKGBUILD
@@ -0,0 +1,46 @@
+# Contributor: Bailey Fox <bfox200012@gmail.com>
+# Contributor: ajs124 < aur AT ajs124 DOT de >
+# Contributor: Benoit Favre <benoit.favre@gmail.com>
+# Contributor: Thomas Hebb <tommyhebb@gmail.com>
+# Contributor: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+
+pkgname=abootimg
+pkgver=0.6
+pkgrel=1
+pkgdesc="A tool to read/write/update old android boot images"
+arch=('i686' 'x86_64' 'arm' 'armv7h')
+url="https://github.com/ggrandou/abootimg"
+license=('GPL')
+depends=('util-linux' 'cpio')
+makedepends=('git')
+provides=('abootimg')
+source=("http://http.debian.net/debian/pool/main/a/abootimg/abootimg_${pkgver}.orig.tar.gz"
+ "http://http.debian.net/debian/pool/main/a/abootimg/abootimg_${pkgver}-1.diff.gz"
+ 'no-initrd.patch')
+sha512sums=('b96be8abe9bccfb7694c1d8f30b3a5dcc0e411b73fc78eb15f1488207032aa4737286be776b78e41bc14216e8d78ec768bbb2f91f0fe53192f08df8b6497d28f'
+ '66884cf42c7c2121065cec6e974f3c6d301e058231b910db8e4816ed5274d7e6eb6045d1649b059c468e6760b16046ae7ef58756c810967e47e6214e0fc0612f'
+ 'SKIP')
+
+prepare() {
+ cd "${srcdir}/abootimg-${pkgver}"
+ patch -p0 --binary < ../no-initrd.patch
+ patch -p1 --binary < ../abootimg_0.6-1.diff
+}
+
+build() {
+ cd "${srcdir}/abootimg-${pkgver}"
+
+ make
+ gzip -f debian/abootimg.1
+}
+
+package() {
+ cd "${srcdir}/abootimg-${pkgver}"
+
+ install -d "${pkgdir}/usr/bin"
+ install -d "${pkgdir}/usr/share/man/man1/"
+ install abootimg -t "${pkgdir}/usr/bin"
+ install pack-initrd "${pkgdir}/usr/bin/abootimg-pack-initrd"
+ install unpack-initrd "${pkgdir}/usr/bin/abootimg-unpack-initrd"
+ install debian/abootimg.1.gz -t "${pkgdir}/usr/share/man/man1/"
+}
diff --git a/pcr/abootimg/no-initrd.patch b/pcr/abootimg/no-initrd.patch
new file mode 100644
index 000000000..a523845fb
--- /dev/null
+++ b/pcr/abootimg/no-initrd.patch
@@ -0,0 +1,35 @@
+This patch incorporates a patch made by John Stultz <https://github.com/johnstultz-work> to allow abootimg to
+work with newer Android aboots that do not include an initrd
+--- abootimg.c 2019-03-12 03:16:42.335616885 -0500
++++ abootimg.c.1 2019-03-12 03:18:01.550892862 -0500
+@@ -163,7 +163,7 @@
+ "\n"
+ " bootimg has to be valid Android Boot Image, or the update will abort.\n"
+ "\n"
+- " abootimg --create <bootimg> [-c \"param=value\"] [-f <bootimg.cfg>] -k <kernel> -r <ramdisk> [-s <secondstage>]\n"
++ " abootimg --create <bootimg> [-c \"param=value\"] [-f <bootimg.cfg>] -k <kernel> [-r <ramdisk>] [-s <secondstage>]\n"
+ "\n"
+ " create a new image from scratch.\n"
+ " if the boot image file is a block device, sanity check will be performed to avoid overwriting a existing\n"
+@@ -291,7 +291,11 @@
+
+ if (!(img->header.ramdisk_size)) {
+ fprintf(stderr, "%s: ramdisk size is null\n", img->fname);
+- return 1;
++ /*
++ * On newer AOSP devices, system can be used as rootfs,
++ * resulting in no initrd being used. Thus this case should
++ * not be fatal.
++ */
+ }
+
+ unsigned page_size = img->header.page_size;
+@@ -932,7 +936,7 @@
+ break;
+
+ case create:
+- if (!bootimg->kernel_fname || !bootimg->ramdisk_fname) {
++ if (!bootimg->kernel_fname) {
+ print_usage();
+ break;
+ }