Pinephone: Taschenlampen App – die Zweite

Hallo Linuxphone-Fans,

ich habe da mal die Taschenlampen App etwas vereinfacht und von Eurem Phosh aufrufbar gemacht.

Pinephone: Taschenlampen App – die Zweite

Auf Github habe ich Euch die Sourcen dafür heute bereitgestellt. Ok, ok.. es ging nicht eher, ich hab es erst heute geschrieben 😉

https://github.com/Cyborgscode/pinephone/tree/main/flashlight

Der Unterschied von dieser Version zu der Bash Version mit Sudo ist, es kommt ohne Sudo aus … und ist nicht mehr Bash, sondern C . Alles was Ihr zum Kompilieren braucht, ist das gcc Packet und das eine oder andere Develpaket. In einem Develpaket sind Strukturen, Definition und Macros gespeichert, die für die Benutzung einer Library benötigt werden. Man kann da auch andere Sachen reinschreiben, aber das führt jetzt zu weit.

Wie bauen wir die neue Taschenlampe jetzt?

Wenn wir uns das Makefile ansehen, welches hier wirklich ein Makefile ist und nicht ein File für den „make“ Befehl, ist die Sache ganz einfach:

gcc flashlight.c -o flashlight

Damit bauen wir das Binary, also die ausführbare Datei. Wenn Ihr das direkt auf Eurem Pinephone macht, wird da automatisch ein für die laufende Architektur gedachtes File erzeugt. Hier ist das „aarch64“. Wenn Ihr das spaßeshalber auf Eurem großen PC macht, und dann die Datei auf das Pine kopiert, werdet Ihr feststellen, daß es nicht funktioniert. Auf Eurem großen PC wurde es für x86_64 gebaut.

Ist das Binary fertig, setzen wir die nötigen Rechte: Hier „Jeder darf es ausführen und bei Ausführung darf es das als Root tun“. Wir erinnern uns: Rootrechte sind nötig, um die LED Helligkeit setzen zu dürfen.

chmod 755 flashlight
chmod u+s flashlight

Nun kopieren wir das Binary „flashlight“ an seinen Ausführungsort: /usr/local/bin

rm -f /usr/local/bin/flashlight
mv flashlight /usr/local/bin/

Jetzt noch die Desktopdatei ins passende Applicationsverzeichnis verschieben:

rm -f /usr/share/applications/flashlight.desktop
cp flashlight.desktop /usr/share/applications/

Wieso ist hier „cp“ im Spiel und nicht „mv“ wie beim Binary?

Vielleicht wollt Ihr ja mal ein Update machen und dann wär es doch Schade, wenn das Desktopfile weg wäre. Das Binary baut Ihr ja jedes mal neu, ob das für einen zweiten Durchlauf noch vorhanden ist, spielt keine Rolle. Das Desktopfile wäre dann weg 😉

Wieso ist das dem Sudo-Bash Konstrukt überlegen?

Für das korrekte Sudofile muß man wissen, wie der Username des ausführenden Benutzers lautet. Seine UID würde vielleicht auch noch gehen. Außerdem mußten wir erstmal die sudoers-Datei ändern, damit die Anweisung ausgeführt wurde. Das fällt alles komplett weg.

Damit das Programm so auf jeder Distribution einsetzbar, völlig egal von den Umständen.

Gibt es Sicherheitsbedenken?

Die gibt es immer, es ist ein SUID Programm. Nun ist in dem Programm nichts drin, was gefährlich ist, solange die echten Betriebssystem Libs benutzt werden. Schafft es ein Angreifer, dem Befehl eine eigene Kopie einer benutzten System-Lib unterzujubeln, und dafür gibt es Möglichkeiten, könnte er die Funktionsaufrüfe nutzen und einfach irgendwas anderes machen.

Ich denke aber nicht, daß das mit diesem Build möglich ist. Falls Ihr Verbesserungen habt, schickt einen Pull-Request in Github-Repo oder lasst einen Kommentar da. C ist nicht gerade mein Steckenpferd und die GCC Options schon gar nicht 😉

Wann kommt das endlich in den Fedora Build rein?

Überraschung !… Torbuntu baut schon dran 😀

Flatpaks als Platzfresser

Falls sich jemand gefragt hat, warum ich so ungern Flatpaks einsetze:

org.gnome.Fractal permissions:
    ipc      network              fallback-x11      pulseaudio      wayland      x11
    dri      dbus access [1]

    [1] org.freedesktop.Notifications, org.freedesktop.secrets


        ID                                                Zweig          Op        Remote         Download
 1. [✓] org.freedesktop.Platform.GL.default               20.08          i         flathub         95,3 MB / 95,9 MB
 2. [✓] org.freedesktop.Platform.GL.nvidia-460-39         1.4            i         flathub        133,2 MB / 133,3 MB
 3. [✓] org.freedesktop.Platform.ffmpeg-full              20.08          i         flathub          3,9 MB / 4,1 MB
 4. [✓] org.freedesktop.Platform.openh264                 2.0            i         flathub          1,5 MB / 1,5 MB
 5. [✓] org.gnome.Fractal.Locale                          stable         i         flathub         13,4 kB / 233,8 kB
 6. [✓] org.gnome.Platform.Locale                         3.38           i         flathub         23,8 MB / 326,1 MB
 7. [✓] org.gnome.Platform                                3.38           i         flathub        292,9 MB / 344,0 MB
 8. [✓] org.gnome.Fractal                                 stable         i         flathub          3,5 MB / 3,6 MB

Installation complete.

Das sind 3,5 MB für die Anwendung, und 570 MB für die Abhängigkeiten. Also wenn man jetzt nicht GBweise Flatpaks einsetzt ist das Verhältnis so richtig fürn Arsch. Aufm Pine waren das ungelogen sogar 1GB an Abhängigkeiten.

Und das ist nur ein Grund wieso 😉

Fedora: wie man mit RPM sein System auf Integrität prüft.

Heute geht es um Dateiintegrität und wie man das mit RPM prüft und ggf. behebt. Grund ist das Pinephone.

Fedora: wie man mit RPM sein System auf Integrität prüft.

Wenn man sein Pinephone zum ersten mal bootet, startet es mit dem Image auf der internen Storage mmcblk2. Will man etwas anderes Booten, so steckt man eine SD Karte rein, auf dem das Bootimage drauf ist. Das ist gerade am Anfang, wenn man viel Testet eine normale Sache, weil man die MicroSD Karte leicht wieder mit einem SD-Kartenreader am PC neu bespielen kann.

Wenn man aber zu an einen Punkt gekommen ist, wo das System gut genug funktioniert, möchte man es auf die interne Speicherkarte kopieren. Das könnt Ihr via rsync machen, oder Ihr kopiert die SD-Karte mit dem Tool dd rüber. Das hat aber einen Haken: Von dem System habt Ihr gerade gebootet und das läuft noch. Da man die Karte im laufenden Betrieb nicht wechseln sollte, steht Ihr vor einem Problem. Rsync umgeht das, aber Systemfiles lassen sich nicht so einfach syncen. Würde man so z.b. ein Fedora 33 auf ein anderes Fedora 33 syncen, würde es vermutlich laufen, aber (wie hier) ein Fedora auf Manjaro Syncen, geht sehr wahrscheinlich voll in die Hose.

Wenn wir also dd benutzen steigt zwar die Erfolgschance, aber ein Datenverlust steht im RAM, weil die Programme auf der Partition rumwerkeln und die sich beim Kopieren ändern. Also am besten ALLES was geht beenden: Desktop, Services, alles bis auf SSHd und das Netzwerk.

Schritt 1 – Ermitteln was drauf ist

Dazu führt Ihr „rpm -qa > rpms“ aus. Nicht vergessen das File nachher wieder zu löschen.

Schritt 2 – jedes Paket prüfen

Dazu brauchen wir awk und ein klein wenig Bashmagie:

awk < rpms ‚{print „rpm -V –nolinkto –nomtime –nomode –nouser –nogroup –nordev –nodeps „$1;}‘ | bash > log

Das liest die Liste der RPMs Zeile-für-Zeile ein und prüft das Paket, ob die Checksummen mit den Dateien übereinstimmen. Einige Tests sind absichtlich abgeschaltet worden, weil für den Test, ob eine Datei beschädigt ist oder nicht, nicht nötig. Ob ich da mal dran war und die absichtlich verändert habe, war nicht die Aufgabe, kann man so aber auch machen, wenn man die –no Flags weglässt. „–nodeps“ sollte man aber drin lassen, weil sonst jedes Paket immer mit allen Abhängigkeiten geprüft wird und wir prüfen eh alle einzeln 😉

Schritt 3 – Defekte Dateien finden

Da wir in Schritt 2 eine Log-Datei angelegt haben, werten wir die aus und lassen uns gleich die Paketnamen der defekten Dateien geben. Das „sort -u“ wirft doppelte raus:

grep „\.5\.\.“ log | grep -v “ c “ | grep -v “ d „| grep -v ^S | awk ‚{print „rpm -qf „$2;}‘ | bash | sort -u

.5… ist die Ausgabe, wenn die Datei beschädigt ist und z.b. keine Configdatei ist. Configs können sich natürlich jederzeit ändern, deswegen sind die nicht gleich defekt.

Ein paar Beispiele was die Ausgaben so meinen:

S.5…… c /etc/ssh/sshd_config  Datei hat andere Checksumme, ist aber eine Configdatei
fehlend d /usr/share/man/fr/man1/manconv.1.gz Datei ist eine Dokumentation, nicht tragisch, wenn die nicht da ist.
fehlend /boot/efi/overlays/adau1977-adc.dtbo Datei fehlt und sollte aber da sein.
..5…… /usr/bin/mokutil Datei ist defekt und sollte ersetzt werden.

Schritt 4 – Reparieren

Nun haben wir eine Liste mit Paketnamen und müssen die nur noch reparieren. In meinem Fall waren es vier defekte Pakete:

dnf reinstall dcraw efibootmgr f2fs-tools mokutil -y

Das muß natürlich bei Euch so nicht passen, es könnte auch gut gehen oder andere Dateien betreffen!

Vom efibootmgr wissen wir jetzt, daß er gar nicht nötig ist auf einem Pinephone, weil das U-Boot benutzt und so gesehen kein EFI Bios vorhanden ist.

Ein Wort noch zum Pinephone:

Kopiert das System ruhig auf die interne Karte, weil das dann ca. 5x schneller ist: beim Booten, beim Runterfahren, Apps starten und updaten. Es lohnt sich wirklich.