summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiao Pan <xyz@flylightning.xyz>2024-12-16 18:44:05 -0800
committerXiao Pan <xyz@flylightning.xyz>2024-12-16 18:48:49 -0800
commitcf6365c0957253940b8fae7e1a606105c6a2754c (patch)
treedf259da4c45432c0fc3d2d2b496d226664ca94ce
parent75c587ea9c4b8bf19ef6eec11a6e0aed508f3dac (diff)
Add osk-sdl PKGBUILD from danctnix Pine64-Arch
https://github.com/dreemurrs-embedded/Pine64-Arch
-rw-r--r--.gitignore1
-rw-r--r--pkgbuilds/osk-sdl/PKGBUILD44
-rw-r--r--pkgbuilds/osk-sdl/fix-compiling-for-gcc12.patch10
-rw-r--r--pkgbuilds/osk-sdl/fix-config-parsing-with-libstdc++.patch39
-rw-r--r--pkgbuilds/osk-sdl/osk-sdl-hooks69
-rw-r--r--pkgbuilds/osk-sdl/osk-sdl-install59
6 files changed, 222 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 5ed126e..89f14ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/*/**
!/*/*/
!/*/*/PKGBUILD
+!/pkgbuilds/*/*
diff --git a/pkgbuilds/osk-sdl/PKGBUILD b/pkgbuilds/osk-sdl/PKGBUILD
new file mode 100644
index 0000000..8f1a9e3
--- /dev/null
+++ b/pkgbuilds/osk-sdl/PKGBUILD
@@ -0,0 +1,44 @@
+# Maintainer: Danct12 <danct12@disroot.org>
+# Contributor: Lance G. <gero3977@gmail.com>
+
+pkgname=osk-sdl
+pkgver=0.66
+pkgrel=5
+pkgdesc="SDL2 On-screen Keyboard for FDE"
+arch=(x86_64 armv7h aarch64)
+url="https://gitlab.com/postmarketOS/osk-sdl"
+license=('GPL3')
+depends=(device-mapper cryptsetup sdl2 sdl2_ttf mesa ttf-dejavu)
+makedepends=(scdoc meson)
+source=($pkgname-$pkgver.tar.gz::https://gitlab.com/postmarketOS/osk-sdl/-/archive/$pkgver/$pkgname-$pkgver.tar.gz
+ osk-sdl-hooks
+ osk-sdl-install
+ fix-compiling-for-gcc12.patch
+ fix-config-parsing-with-libstdc++.patch)
+
+prepare() {
+ cd "$pkgname-$pkgver"
+ patch -u -p0 --input="${srcdir}/fix-compiling-for-gcc12.patch"
+ patch -u -p0 --input="${srcdir}/fix-config-parsing-with-libstdc++.patch"
+}
+
+build() {
+ arch-meson "$pkgname-$pkgver" _build
+ meson compile -C _build
+}
+
+package() {
+ DESTDIR="$pkgdir" meson install --no-rebuild -C _build
+
+ # DejaVu is on a different directory than default
+ sed -i 's/\/usr\/share\/fonts\/ttf-dejavu/\/usr\/share\/fonts\/TTF/g' ${pkgdir}/etc/osk.conf
+
+ # Install initramfs
+ install -Dm644 ${srcdir}/osk-sdl-hooks ${pkgdir}/usr/lib/initcpio/hooks/osk-sdl
+ install -Dm644 ${srcdir}/osk-sdl-install ${pkgdir}/usr/lib/initcpio/install/osk-sdl
+}
+md5sums=('fb608060dea423d221bdfff9a6101624'
+ '32b89734fc22fe0dc470e10c3c2e8034'
+ '1b164376ca6c3ee358d5cdd7533a20da'
+ '8fef952dada64ff63040b5406e71ecac'
+ 'e6dff50a2f9a27d5de92437394e9cfda')
diff --git a/pkgbuilds/osk-sdl/fix-compiling-for-gcc12.patch b/pkgbuilds/osk-sdl/fix-compiling-for-gcc12.patch
new file mode 100644
index 0000000..424b691
--- /dev/null
+++ b/pkgbuilds/osk-sdl/fix-compiling-for-gcc12.patch
@@ -0,0 +1,10 @@
+--- src/keyboard.h
++++ src/keyboard.h
+@@ -22,6 +22,7 @@
+ #include "config.h"
+ #include <SDL2/SDL.h>
+ #include <SDL2/SDL_ttf.h>
++#include <array>
+ #include <cmath>
+ #include <cstdint>
+ #include <list>
diff --git a/pkgbuilds/osk-sdl/fix-config-parsing-with-libstdc++.patch b/pkgbuilds/osk-sdl/fix-config-parsing-with-libstdc++.patch
new file mode 100644
index 0000000..2e60e4f
--- /dev/null
+++ b/pkgbuilds/osk-sdl/fix-config-parsing-with-libstdc++.patch
@@ -0,0 +1,39 @@
+--- src/config.cpp
++++ src/config.cpp
+@@ -175,24 +175,26 @@
+ std::istringstream iss(line);
+ std::string id, eq, val;
+
+- bool error = false;
+-
+- if (!(iss >> id)) {
+- continue;
+- } else if (id[0] == '#') {
++ iss >> id;
++ if (iss.fail()) {
+ continue;
+ } else if (id.empty()) {
+ continue;
+- } else if (!(iss >> eq >> val >> std::ws) || eq != "=" || iss.get() != EOF) {
+- error = true;
++ } else if (id[0] == '#') {
++ continue;
+ }
+
+- if (error) {
++ iss >> eq >> val;
++ // check that:
++ // 1) fail/bad bits aren't set
++ // 2) eq field is '='
++ // 3) that there are no trailing fields, after ignoring any trailing whitespace
++ if (iss.fail() || eq.compare("=") || !(iss >> std::ws).eof()) {
+ SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Syntax error on line %d", lineno);
+ return false;
+- } else {
+- Config::options[id] = val;
+ }
++
++ Config::options[id] = val;
+ }
+ return true;
+ }
diff --git a/pkgbuilds/osk-sdl/osk-sdl-hooks b/pkgbuilds/osk-sdl/osk-sdl-hooks
new file mode 100644
index 0000000..4c73056
--- /dev/null
+++ b/pkgbuilds/osk-sdl/osk-sdl-hooks
@@ -0,0 +1,69 @@
+#!/usr/bin/ash
+
+run_hook() {
+
+ # Set these variables to help osk-sdl display correctly.
+ export ETNA_MESA_DEBUG=no_supertile
+ export SDL_VIDEODRIVER=kmsdrm
+
+ modprobe -a -q dm-crypt >/dev/null 2>&1
+ [ "${quiet}" = "y" ] && CSQUIET=">/dev/null"
+
+ if [ -n "${cryptdevice}" ]; then
+ DEPRECATED_CRYPT=0
+ IFS=: read cryptdev cryptname <<EOF
+$cryptdevice
+EOF
+ else
+ DEPRECATED_CRYPT=1
+ cryptdev="${root}"
+ cryptname="root"
+ fi
+
+ # This may happen if third party hooks do the crypt setup
+ if [ -b "/dev/mapper/${cryptname}" ]; then
+ echo "Device ${cryptname} already exists, not doing any crypt setup."
+ return 0
+ fi
+
+ warn_deprecated() {
+ echo "The syntax 'root=${root}' where '${root}' is an encrypted volume is deprecated"
+ echo "Use 'cryptdevice=${root}:root root=/dev/mapper/root' instead."
+ }
+
+ if resolved=$(resolve_device "${cryptdev}" ${rootdelay}); then
+ if cryptsetup isLuks ${resolved} >/dev/null 2>&1; then
+ [ ${DEPRECATED_CRYPT} -eq 1 ] && warn_deprecated
+ dopassphrase=1
+ # Ask for a passphrase
+ if [ ${dopassphrase} -gt 0 ]; then
+ echo ""
+ echo "A password is required to access the ${cryptname} volume"
+
+ #loop until we get a real password
+ while ! [ -b "/dev/mapper/${cryptname}" ]; do
+ osk-sdl -G -d ${resolved} -n ${cryptname} -c /etc/osk.conf
+ done
+ fi
+ if [ -e "/dev/mapper/${cryptname}" ]; then
+ if [ ${DEPRECATED_CRYPT} -eq 1 ]; then
+ export root="/dev/mapper/root"
+ fi
+ else
+ err "Password succeeded, but ${cryptname} creation failed, aborting..."
+ return 1
+ fi
+ else
+ err "Failed to open encryption mapping: The device ${cryptdev} is not a LUKS volume."
+ fi
+ fi
+
+ IFS=,
+ if [ -n "${osk_kms}" ]; then
+ for i in $osk_kms
+ do
+ echo "Resetting $i module"
+ rmmod -f "$i"
+ done
+ fi
+}
diff --git a/pkgbuilds/osk-sdl/osk-sdl-install b/pkgbuilds/osk-sdl/osk-sdl-install
new file mode 100644
index 0000000..a1df1d2
--- /dev/null
+++ b/pkgbuilds/osk-sdl/osk-sdl-install
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+build() {
+ local mod
+
+ add_module "lima"
+ add_module "panfrost"
+
+ add_module "dm-crypt"
+ add_module 'dm-integrity'
+ if [[ $CRYPTO_MODULES ]]; then
+ for mod in $CRYPTO_MODULES; do
+ add_module "$mod"
+ done
+ else
+ add_all_modules "/crypto/"
+ fi
+
+ add_binary 'cryptsetup'
+
+ map add_udev_rule \
+ '10-dm.rules' \
+ '13-dm-disk.rules' \
+ '95-dm-notify.rules' \
+ '/usr/lib/initcpio/udev/11-dm-initramfs.rules'
+
+ # cryptsetup calls pthread_create(), which dlopen()s libgcc_s.so.1
+ add_binary '/usr/lib/libgcc_s.so.1'
+
+ add_binary /usr/bin/osk-sdl
+ add_file /etc/osk.conf
+
+ # add DRI drivers so we can have hw accel
+ add_binary /usr/lib/dri/sun4i-drm_dri.so
+
+ # HACK: mkinitcpio does not understand hardlinks, symlink those DRI libs
+ add_symlink /usr/lib/dri/rockchip_dri.so /usr/lib/dri/sun4i-drm_dri.so
+
+ add_binary /usr/lib/libGL.so.1
+ add_binary /usr/lib/libEGL.so.1
+ add_binary /usr/lib/libEGL_mesa.so.0
+
+ [ -f /usr/share/glvnd/egl_vendor.d/50_mesa.json ] && add_file /usr/share/glvnd/egl_vendor.d/50_mesa.json
+
+ ttf_font=$(grep "^keyboard-font\s" /etc/osk.conf|cut -f3 -d' ')
+ [ -f "$ttf_font" ] && add_file "$ttf_font"
+
+ add_runscript
+}
+
+help() {
+ cat <<HELPEOF
+This hook loads osk-sdl to decrypt the filesystem. Used on touchscreen devices like tablets and phones to provide an on screen keyboard in order to enter in a passphrase for decrypting encrypted systems when an keyboard is not present.
+
+Users should specify the device to be unlocked using 'cryptdevice=device:dmname' on the kernel command line, where 'device' is the path to the raw device, and 'dmname' is the name given to the device after unlocking, and will be available as /dev/mapper/dmname.
+HELPEOF
+}
+
+# vim: set ft=sh ts=4 sw=4 et: