Kategorien
Betriebssysteme

Samsung Galaxy Tab S5e entrümpeln

Ist man Dank Lineage OS eine recht schlanke Betriebssystem-Installation gewöhnt, wird einem beim ersten Start eines Samsung-Geräts nicht nur leicht schwindelig: nicht nur Google hätte gerne Kontoinformationen, man soll am besten auch gleich ein Samsung-Konto einrichten und am dann auch gleich alle weiteren Apps im Samsung eigenen Galaxy-Store kaufen.

Viele andere Apps nerven und buhlen um Aufmerksamkeit (vom Hunger auf Daten ganz zu schweigen) und so drängt sich recht schnell der Wunsch auf, etwas für Ordnung zu sorgen.

Als erste Entrümplungsmaßnahme hilft überraschenderweise das Zurücksetzen auf  Werkseinstellungen, denn nach diesem ist bereits ein Teil der Zusatzsoftware verschwunden.

Ein breites Schmunzeln kommt dann bei der zwangsweisen Nachinstallation von Apps während des Neustarts: während man die Samsung-Apps alle (sogar auf einmal) abwählen darf, besteht bei den Google-eigenen Apps diese Möglichkeit nicht.

Kategorien
Hardware

Spontane Neustarts beim Samsung Galaxy Tab S2

Das Samsung Galaxy Tab S2 ist auch 4 Jahre nach Erscheinen noch ein tolles Gerät: 9,7 Zoll Super-AMOLED-Display mit einer Auflösung von 2048 × 1536 Pixel, 3 GB Hauptspeicher und eine Qualcomm Snapdragon 652 als CPU – und das alles bei einem Gesamtgewicht von 389 g.

Leider hat die Tatsache, daß Samung mit dem Galaxy Tab S2 eines der leichtesten und dünnsten Tablets bauen wollte einen gravierenden Nachteil: mit zunehmendem Alter fängt das Tablet vor allem bei verminderter Akku-Ladung an, im laufenden Betrieb neu zu starten.

Das Problem scheint im Zusammenspiel zwischen Akku und CPU zu liegen und verschiedene Beiträge auf XDA (s.o.) berichten, daß die Geräte auch nach einer erfolgreichen Reparatur meist nach kurzer Zeit wieder ein ähnliches Fehlerbild zeigen.

Als brauchbarer Weg zur Verhinderung der Neustarts hat sich eine Limitierung der Taktfrequenz erwiesen: mit einer App wie SmartPack-Kernel Manager (Google Play) oder Kernel Adiutor (F-Droid) werden die CPU-Parameter so gesetzt, daß die „großen Kerne“ nicht mehr bis höchstmöglichen Taktfrequenz von 1804800 getaktet werden, sondern bereits bei einem niedrigeren Wert Schluß ist.

Da zum Setzen der CPU-Frequenz zwangsweise root-Rechte erforderlich sind, kann mit Hilfe von Magisk auch komplett auf eine App verzichtet und stattdessen ein Boot Script im Verzeichnis „/data/adb/service.d“ verwendet werden:

#!/system/bin/sh
# 2020-09-07 athul/initial

echo '4:1382400' > /sys/module/msm_performance/parameters/cpu_max_freq
echo '5:1382400' > /sys/module/msm_performance/parameters/cpu_max_freq
echo '6:1382400' > /sys/module/msm_performance/parameters/cpu_max_freq
echo '7:1382400' > /sys/module/msm_performance/parameters/cpu_max_freq

echo '1' > /sys/devices/system/cpu/cpu4/online
echo '1382400' > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq

echo '1' > /sys/devices/system/cpu/cpu5/online
echo '1382400' > /sys/devices/system/cpu/cpu5/cpufreq/scaling_max_freq

echo '1' > /sys/devices/system/cpu/cpu6/online
echo '1382400' > /sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq

echo '1' > /sys/devices/system/cpu/cpu7/online
echo '1382400' > /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq

Der Erfolg kann (zu Testzwecken) ebenfalls mit Hilfe eines weiteren Skripts überprüft werden:

#!/system/bin/sh
# 2020-09-07 athul/initial

echo "available frequencies:"
cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_available_frequencies

echo "scaling_max_freq:"
cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
cat /sys/devices/system/cpu/cpu5/cpufreq/scaling_max_freq
cat /sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq
cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq

echo "cpu_max_freq"
cat /sys/module/msm_performance/parameters/cpu_max_freq

echo "scaling_available_governors"
cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_available_governors

Das Skript zeigt, daß die gesetzten Werten übernommen wurden:

available frequencies:
400000 883200 940800 998400 1056000 1113600 1190400 1248000 1305600 1382400 1612800 1747200 1804800 
scaling_max_freq:
1382400
1382400
cpu_max_freq
0:4294967295 1:4294967295 2:4294967295 3:4294967295 4:1382400 5:1382400 6:1382400 7:1382400

scaling_available_governors
interactive ondemand userspace powersave performance

Sofern die Werte für einige Kerne nicht angzeigt werden, liegt dies daran, daß diese aktuell zwecks Strom sparen abgeschaltet sind.

Kategorien
Anwendungen

Virtualisierung unter Debian

Wird auf Windows-Clients oft VirtualBox als Desktop-Virtualisierungslösung eigesetzt, stellt man nach dem Wechsel auf Debian fest, daß VirtualBox seit Buster nicht mehr in den Paketquellen enthalten ist.

Das Debian-Wiki empfieht als Ersatzlösung das auf QEMU/KVM basierende Paket virt-manager, welches in den „normalen“ Paketquellen enthalten ist und somit einfach installiert werden kann:

$ sudo apt install virt-manager

Nach dem ersten Aufruf poppt erst einmal ein Fenster „System policy prevents management of local virtualized systems“ zur Eingabe des Kennwortes hoch. Wer dies vermeiden möchte, kann seinen Benutzer der Gruppe „libvirt“ hinzufügen:

$ sudo usermod -aG libvirt $(whoami)

Anschließend kann nun eine virtuelle Maschine aufgesetzt (und verwendet) werden.

Netzwerkbrücke

Je nach Anwendungsszenario stellt man sehr schnell fest, daß zwar die virtuelle Maschine ohne Probleme überall ins Netz kommunizieren kann, eine Kommunikation vom Host zur virtuellen Maschine hingegen nicht möglich ist.

Um dies zu ermöglichen, muß eine virtuelle Netzwerkbrücke eingerichtet werden. Hierzu schlagen die meisten per Suchmaschinen auffindbaren Lösungsmöglichkeiten vor, den Netzwork-Manager zu deaktivieren und die Konfiguration der Netzwerkinterfaces komplett von Hand zu übernehmen, aber es funktioniert auch mittels Network-Manager, und das sogar recht einfach und elegant.

Zuerst einmal gilt es, die aktuelle Netzwerkverbindung sowie das verwendete Interface auszulesen

$ sudo nmcli connection show
NAME                         UUID                                  TYPE      DEVICE 
Kabelgebundene Verbindung 1  4e405dd1-dc75-3990-bfd1-fdb013e95f18  ethernet  ens192

in diesem Fall sind es „Kabelgebundene Verbindung 1“ und „ens192“.

Nun wird dem System die Netzwerkbrücke hinzugefügt

$ sudo nmcli connection add type bridge ifname br0 stp no
Verbindung »bridge-br0« (e7a07a8f-beac-4ffe-adcf-47d406a82177) erfolgreich hinzugefügt.

$ sudo nmcli connection show
NAME                         UUID                                  TYPE      DEVICE 
Kabelgebundene Verbindung 1  4e405dd1-dc75-3990-bfd1-fdb013e95f18  ethernet  ens192 
bridge-br0                   e7a07a8f-beac-4ffe-adcf-47d406a82177  bridge    br0

und die Netzwerkschnittstelle als Slave der Brücke zugewiesen

$ sudo nmcli connection add type bridge-slave ifname ens192 master br0
Verbindung »bridge-slave-ens192« (e4a63a0d-4e1b-4a82-b1af-bdc9aecaf593) erfolgreich hinzugefügt.

$ sudo nmcli connection show
NAME                         UUID                                  TYPE      DEVICE 
Kabelgebundene Verbindung 1  4e405dd1-dc75-3990-bfd1-fdb013e95f18  ethernet  ens192 
bridge-br0                   e7a07a8f-beac-4ffe-adcf-47d406a82177  bridge    br0    
bridge-slave-ens192          e4a63a0d-4e1b-4a82-b1af-bdc9aecaf593  ethernet  -- 

Als letzter Schritt wird dann die Brücke aktiviert

$ sudo nmcli connection up bridge-br0
Verbindung wurde erfolgreich aktiviert (master waiting for slaves) (Aktiver D-Bus-Pfad: /org/freedesktop/NetworkManager/ActiveConnection/3)

sowie die bisher verwendete Verbindung deaktiviert

$ sudo nmcli connection down "Kabelgebundene Verbindung 1"
Verbindung »Kabelgebundene Verbindung 1« wurde erfolgreich deaktiviert (aktiver D-Bus-Pfad: /org/freedesktop/NetworkManager/ActiveConnection/1)

Ein Blick in die Verbindungseinstellungen zeigt, daß der Wechsel erfolgreich war:

$ sudo nmcli connection show
NAME                         UUID                                  TYPE      DEVICE 
bridge-br0                   e7a07a8f-beac-4ffe-adcf-47d406a82177  bridge    br0    
bridge-slave-ens192          e4a63a0d-4e1b-4a82-b1af-bdc9aecaf593  ethernet  ens192 
Kabelgebundene Verbindung 1  4e405dd1-dc75-3990-bfd1-fdb013e95f18  ethernet  --    

Die so erzeugte Brücke kann dann in virt-manager für die Netzwerkverbindungen der virtuellen Maschinen verwendet werden.

Kategorien
Betriebssysteme

Systemd vs. SysVinit

Die Diskussion „Systemd vs. SysVinit“ nimmt fast schon religiöse Züge an und erinnert in mancher Beziehung an ein Phänomen, das oft zu beobachten ist, wenn sich irgendwo irgendetwas ändert: Neumodischer Krams? Kann nur schlecht sein!

METALLICA anyone? Da gibt es auch eine Fraktion, die „alles seit dem schwarzen Album“ „grottenübel“ findet, und trotzdem verkaufen sich die Scheiben und Konzertkarten noch immer recht gut.

Ich persönlich hätte nichts dagegen gehabt, wenn sich Debian für ein Verbleiben beim „alten“ Init-System entschieden hätte, das hat schließlich jahrzehntelang problemlos funktioniert. Mich ärgern an Systemd täglich so Dinge, wie daß ich z.B. mit einem journaldingens arbeiten muss, statt mit grep um mal schnell ein Protokoll zu durchsuchen.

Über die tatsächlichen Vor- und Nachteile und was vielleicht besser ist und was weniger haben sich eine ganze Menge kluge Köpfe ihre Gedanken gemacht, die deutlich tiefer in der Materie stecken als Meinereiner und ich habe die Hoffnung, daß die auch zu einem klugen Ergebnis gekommen sind. Nicht alles ist nur schwarz oder weiß, wir bewegen uns im Normalfall irgendwo zwischen Grauschattierungen.

Letztendlich ist mir ein zuverlässig funktionierendes System wichtig und wenn ich mich komplett von allen Datenkraken lösen möchte, dann müsste ich den Netzstecker ziehen, das Mobiltelefon wegwerfen und hätte immer noch ein Problem, wenn das nächste Mal ein Google Streetview-Auto vorm Haus vorbeirollt.

Kategorien
Betriebssysteme

Aktualisiertes AppArmor-Profil für Sublime Text

Das AppArmor-Profil für Sublime Text hat sich im Praxiseinsatz bewährt, allerdings sind im Laufe der Zeit ein paar Nebenwirkungen aufgetreten: trotz expliziter Genehmigung des Lese- und Schreibzugriffs auf alle im Besitz des Benutzers befindlichen Dateien unterhalb von „/home“

owner /home/** rw,

war es nicht möglich, z.B. die Datei „.bashrc“ zu bearbeiten. Dies wurde auch entsprechend im Log protokolliert:

apparmor="DENIED" operation="open" profile="/opt/sublime_text/sublime_text" name="/home/buster/.bashrc" pid=5507 comm="file_read_threa" requested_mask="r" denied_mask="r" fsuid=1000 ouid=1000

Ursache hierfür war das Einbinden der Datei „abstractions/evince“

#include <abstractions/evince>

welche wiederum den Regelsatz um den Inhalt der Datei „abstractions/private-files“ erweiterte

#include <abstractions/private-files>

wodurch letztendlich die Regel

deny @{HOME}/.bash* mrk,

im Profil aktiv war. Diese unterbindet den Lesezugriff auf alle Dateien im „Home“-Verzeichnis des Benutzers welche mit „.bash“ beginnen, weshalb die spätere Genehmigung ins Leere läuft.

Das aktualisierte Profil sieht wie folgt aus:

# Last Modified: Mon May 11 20:28:54 2020
# 2020-09-29 athul/replaced abstractions/evince

#include <tunables/global>

/opt/sublime_text/sublime_text {
  #include <abstractions/X>
  #include <abstractions/base>
  #include <abstractions/dbus-session-strict>
  #include <abstractions/fonts>

  deny network,

  /opt/sublime_text/ r,
  /opt/sublime_text/** r,
  /opt/sublime_text/plugin_host mrix,
  /opt/sublime_text/sublime_text mr,
  /proc/filesystems r,
  /usr/share/** r,
  /usr/bin/perl mrix,
  /usr/bin/sassc mrix,
  owner /dev/shm/* rwl,
  owner /run/user/** rw,
  @{HOME}/** rwk,
  @{HOME} rw,
}

Neben dem Ersetzen von „abstractions/evince“ wurde das Profil noch um eine Zugriffsregel für den Perl-Interpreter sowie den Sass CSS-Precompiler erweitert und auf die Variable „@{HOME}“ aus „tunables/global“ statt der statischen Pfadangabe „/home/…“ zurückgegriffen.

Als Best Practice sollte man zur Minimierung von Nebenwirkungen mit Hilfe von „aa-genprof“ die Zugriffsrechte lieber dediziert vergeben statt die vorgeschlagenen Includes einzubinden.