diff --git a/main/postmarketos-android-recovery-installer/APKBUILD b/main/postmarketos-android-recovery-installer/APKBUILD
index f0f22dd50..527ef0fb0 100644
--- a/main/postmarketos-android-recovery-installer/APKBUILD
+++ b/main/postmarketos-android-recovery-installer/APKBUILD
@@ -1,5 +1,5 @@
pkgname=postmarketos-android-recovery-installer
-pkgver=0.1.9
+pkgver=0.1.10
pkgrel=0
pkgdesc="TWRP compatible postmarketOS installer script"
url="https://postmarketos.org"
@@ -7,13 +7,19 @@ url="https://postmarketos.org"
depends="busybox-extras lddtree cryptsetup multipath-tools device-mapper parted util-linux zip e2fsprogs tar"
source="build_zip.sh
update-binary
+ disable-warning.c
pmos_chroot
pmos_install
pmos_install_functions
pmos_setpw"
-arch="noarch"
+arch="all"
+options="!check"
license="GPL3"
+build() {
+ gcc -static -o disable-warning disable-warning.c
+}
+
package() {
install -Dm755 "$srcdir/build_zip.sh" \
"$pkgdir/sbin/build-recovery-zip"
@@ -21,13 +27,16 @@ package() {
"$pkgdir/var/lib/postmarketos-android-recovery-installer/META-INF/com/google/android/update-binary"
install -Dm755 "$srcdir"/pmos_chroot \
"$pkgdir/var/lib/postmarketos-android-recovery-installer/pmos_chroot"
+ install -Dm755 "$srcdir"/disable-warning \
+ "$pkgdir/var/lib/postmarketos-android-recovery-installer/disable-warning"
for file in pmos_install pmos_install_functions pmos_setpw; do
install -Dm755 "$srcdir/$file" \
"$pkgdir/var/lib/postmarketos-android-recovery-installer/chroot/bin/$file"
done
}
sha512sums="924f961e1a488134d265f43724d2b06a908ac1522706dc3f7118f0dec16453aa0a928fef6d9a31a6a747910df665e64f25c94c47a9e3f1d57db19abb0fd8210d build_zip.sh
-6390fc1b1c7dc8e917bb675d2e59e479782ac7754e97c4781866360ff704afe2d04f173a0ac74e3129db45328fab4b6b77a8717ee2e17c6ff79febadaa8ea034 update-binary
+bb152e86ce420761dd2dca660552131610bb8f39cb7e30c75689aacc7cccddce17a90c998097f1b63b3d68a20f9c2c4823d8d591de156dff827381fe436f3b9d update-binary
+38c21dc80aa2530fc06c2960c1318e07d068d403af02133f09ba227106a9b23fb77c3bed904e6135b048846f2733bd5d043235e5ab04598ed9c8fa45cbb15586 disable-warning.c
2400d18734d08b3d2f5ec2fe4e802cdcacddea851644b47505eff1aac47302699c171b880bca55dd1704cc9cef9ac26082ac89cee802b6bf57ff8cf649373328 pmos_chroot
ef6377f6c062b9a86eb9dfb2aa2c0049fda20f24ec75865a682a50e4655710a18bd7a470deab527e1dd4c273f9ea6a003ec03fc5748d44b1c4fbfc91baa9e358 pmos_install
1b19d507a9142e537d052037a0c0768f064ad9131ac8019b234178dc15c0590dbc549ccf553b7a7d55e977df269d4dc0567b520c890738cb80184fc8235222aa pmos_install_functions
diff --git a/main/postmarketos-android-recovery-installer/disable-warning.c b/main/postmarketos-android-recovery-installer/disable-warning.c
new file mode 100644
index 000000000..65cb9e3c3
--- /dev/null
+++ b/main/postmarketos-android-recovery-installer/disable-warning.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2019 Attila Szollosi
+ *
+ * This file is part of postmarketos-android-recovery-installer.
+ *
+ * postmarketos-android-recovery-installer is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * postmarketos-android-recovery-installer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with postmarketos-android-recovery-installer. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+void close_FDs()
+{
+ unsigned int fd;
+ struct dirent* ep;
+ DIR* dp = opendir("/proc/self/fd");
+ if (dp != NULL) {
+ // first two entries are . and ..
+ readdir(dp);
+ readdir(dp);
+
+ while (ep = readdir(dp))
+ if (sscanf(ep->d_name, "%u", &fd) != EOF)
+ close(fd);
+ closedir(dp);
+ } else {
+ // try to close all file descriptors by brute-force
+ // in case the list of open FDs could not be read
+ // from the procfs
+ for (fd = 256; fd >= 0; fd--)
+ close(fd);
+ }
+}
+
+// Detach the program from the installation script
+void daemonize()
+{
+ pid_t pid;
+
+ pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid > 0)
+ exit(0);
+
+ if (setsid() < 0)
+ exit(1);
+
+ pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid > 0)
+ exit(0);
+
+ umask(0);
+ chdir("/");
+ close_FDs();
+}
+
+// Workaround to disable No OS warning in TWRP
+// See: https://gitlab.com/postmarketOS/pmbootstrap/issues/1451
+//
+// Works by setting the variable tw_backup_system_size to a large
+// value, so TWRP's check
+// (tw_backup_system_size < tw_min_system) will result in
+// false.
+//
+// TWRP doesn't allow issuing OpenRecoveryScript commands while
+// the installation is running, so we have to daemonize the
+// process to change the value after the installation script
+// exited.
+int main()
+{
+ daemonize();
+
+ int orsin, orsout;
+
+ char command[1024];
+ char result[512];
+
+ char* commands[] = {"set tw_backup_system_size 999",
+ "set tw_app_prompt 0"};
+
+ sleep(4);
+
+ int i;
+ for (i = 0; i < sizeof(commands)/sizeof(char*); i++) {
+ if ((orsin = open("/sbin/orsin", O_WRONLY)) == -1)
+ return 1;
+ strcpy(command, commands[i]);
+ write(orsin, command, sizeof(command));
+ close(orsin);
+
+ // Have to read FIFO file, because it blocks
+ // the thread processing the command
+ // (see man 3 mkfifo)
+ if ((orsout = open("/sbin/orsout", O_RDONLY)) == -1)
+ return 1;
+ read(orsout, result, sizeof(result));
+ close(orsout);
+
+ sleep(3);
+ }
+
+ return 0;
+}
diff --git a/main/postmarketos-android-recovery-installer/update-binary b/main/postmarketos-android-recovery-installer/update-binary
index 07eacfdae..9f8f8559a 100644
--- a/main/postmarketos-android-recovery-installer/update-binary
+++ b/main/postmarketos-android-recovery-installer/update-binary
@@ -1,6 +1,6 @@
#!/sbin/sh
-# Copyright 2017 Attila Szollosi
+# Copyright 2017-2019 Attila Szollosi
#
# This file is part of postmarketos-android-recovery-installer.
#
@@ -34,3 +34,8 @@ mkdir -p /tmp/postmarketos/
unzip -o "$ZIP" "pmos_chroot" -d /tmp/postmarketos/
chmod 755 /tmp/postmarketos/pmos_chroot
/tmp/postmarketos/pmos_chroot || { fail_info ; exit 1 ; }
+
+# Disable No OS warning
+unzip -o "$ZIP" "disable-warning" -d /tmp/postmarketos/
+chmod 755 /tmp/postmarketos/disable-warning
+/tmp/postmarketos/disable-warning