Benutzer:Thomas: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
 
(31 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
* Jabber: schnittchen ÄT das-labor PUNKT org
* Jabber: schnittchen ÄT das-labor PUNKT org


==Dienste, die keine X-Clients sind, mit der Gnome Session starten und beenden==
==meine Vorträge==
Das Problem: Dienste, die selbst keine X-Clients sind, werden beim Beenden der X-Session nicht automatisch beendet. Es ist nämlich keineswegs so, dass das Gnome Session Management allen eingetragenen Prozessen zum Schluss ein entsprechendes Signal sendet -- vielmehr müssen Clients das Ende der Session daraus ableiten, dass ihre Verbundung zum X-Server stirbt.
 
* "Linux Konsolen Basics" aus der [[Linux Basics Vortragsreihe]]
* [[Lightning Talks|Lightning-Talk]] "Warum Ruby - 5+ Gründe in 15 Minuten"
 
==meine Projekte==
(unvollständig...)
 
* [[Partitionmasker]]
* [https://www.das-labor.org/trac/browser/tools/muelltermine Parser und Generator] für die Abholtermine der drei Müllsorten: macht aus .ics und html-Schnippsel ein einziges .ics
* [[partialmock]] zur Anwendung in Tests in Ruby: Methoden für die Laufzeit eines Tests neu definieren
* [[https://das-labor.org/wiki/Kalender#Weiterverarbeitung_der_Labor-Termine Neue Fassung]] des Skripts, das unseren Kalender parst und daraus RSS-Feeds und einen HTML-Schnippsel macht
* [[LibBracket]]
 
==Tipps und Tricks==
 
===Dienste, die keine X-Clients sind, mit der Gnome Session starten und beenden===
Das Problem: Dienste, die selbst keine X-Clients sind, werden beim Beenden der X-Session nicht automatisch beendet. Es ist nämlich keineswegs so, dass das Gnome Session Management allen eingetragenen Prozessen zum Schluss ein entsprechendes Signal sendet -- vielmehr müssen Clients das Ende der Session daraus ableiten, dass ihre Verbindung zum X-Server stirbt.


Das folgende Skript macht sich zu Nutze, dass die dbus-Session zusammen mit der X-Session stirbt. Ein beliebiger X-Client, der nichts tut (dem Nutzer nicht in die Quere kommt), würde es hier tun. Falls jemandem eine "leichtere" Lösung einfällt: bitte melden!
Das folgende Skript macht sich zu Nutze, dass die dbus-Session zusammen mit der X-Session stirbt. Ein beliebiger X-Client, der nichts tut (dem Nutzer nicht in die Quere kommt), würde es hier tun. Falls jemandem eine "leichtere" Lösung einfällt: bitte melden!
Zeile 24: Zeile 40:
Dieses Skript anpassen, ausführbar ablegen und in die Gnome-Session eintragen (System->Einstellungen->Sitzungen, Tab Startprogramme).
Dieses Skript anpassen, ausführbar ablegen und in die Gnome-Session eintragen (System->Einstellungen->Sitzungen, Tab Startprogramme).


==Dinge, die mal jemand machen sollte (Software)==
===Auf einem Socket sniffen (unidirektional)===
 
Die folgende Bash-pipeline gibt wieder, was Prozess <tt>''PID''</TT> auf seinem file descriptor <tt>''FD''</tt> liest:


* -U Option für mkswap, um die UUID zu setzen
strace -p ''PID'' -e read=''FD'' 2>&1 | egrep "^ \| .....  " | cut -b 11-33,35-58 | ruby -n -e 'split().each { |str| $stdout.putc str.hex }'


==LVM+cryptsetup triple layer mit Hibernate auf Ubuntu==
Will man sich das Ergebnis ansehen, sollte man noch <tt>| hexdump -C | less</tt> anhängen!


Soeben in meiner virtuellen Maschine ausprobiert, dass es prinzipiell funktionieren sollte:
Diese Lösung hängt leider empfindlich vom Ausgabeformat von strace ab.


LVM ist ja unter anderem dafür da, sich von der Knechtschaft der Partitionierungsschemata zu befreien, um bei Bedarf Dateisysteme verkleinern oder vergrössern zu können oder weitere anzulegen. Wenn man nun sowohl verschlüsselte als auch unverschlüsselte Dateisysteme haben will UND (gewissermassen) die Grenze zwischen beiden Bereichen verschieben können will UND keine Lust/nicht ausreichend Verschiebeplatz hat, um komplett neuzupartitionieren, dann funktioniert folgendes Layout:
Geht vielleicht nur bei little endian Rechnern, läßt sich aber leicht anpassen. Auch der Write-Fall ist entsprechend machbar.
(...ausserdem muss man beim booten nur einmal ein passwort eingeben...)


* auf der untersten Ebene sammelt man, Partition für Partition nacheinander ("fließende Migration"), alle physikalischen Partitionen (ausser einer für /boot) als lvm '''physical volume''' (pv) in einer '''volume group''' "everything" zusammen
===Liste aller Sektionen einer langen Manpage===
sudo pvcreate /dev/sda2
sudo vgcreate everything /dev/sda2
sudo pvcreate /dev/sda3
sudo vgextend everything /dev/sda3
* in "everything" erstellt man ein '''logical volume''' "rawcrypt", das dann mit cryptsetup aufgesetzt wird.
Beim ersten Mal ist
sudo modprobe dm-mod
nötig. Dann:
sudo lvcreate -L ''Größe'' -n rawcrypt everything
sudo cryptsetup luksFormat /dev/mapper/everything-rawcrypt
sudo cryptsetup luksOpen /dev/mapper/everything-rawcrypt pvcrypt
* das mit cryptsetup auf "rawcrypt" erstellte verschlüsselte volume "pvcrypt" wird als physical volume angemeldet und als einziges pv der volume group "crypt" zugefügt:
sudo pvcreate /dev/mapper/pvcrypt
sudo vgcreate crypt /dev/mapper/pvcrypt
* in "crypt" legt man seine logical volumes an, die verschlüsselt sein sollen, etwa ''swap'':
sudo lvcreate -L ''Größe'' -n swap crypt
sudo mkswap /dev/mapper/crypt-swap


Die unverschlüsselten Dateisysteme legt man direkt in logical volumes aus der volume group "everything" an. Hier gibt es keinen Grund für eine weitere Indirektion.
Die folgende Pipeline gibt alle Sektionen (und ein klein wenig mehr) von der bash-Manpage:
man bash | grep -Ev ’^( |$)’


Entsprechende Einträge in ''/etc/fstab'', ''/etc/crypttab'' und ''/etc/initramfs-tools/conf.d/resume'' vorausgesetzt und einen Aufruf von
==Howto-mäßige Projekte==
sudo update-initramfs -c -k all
später sollte das System bereits fähig sein, in seinen in diesem Setup verschlüsselten swap zu hibernaten und danach auch daraus aufzuwachen.


Bald mehr dazu hier.
* [[HowTo: LVM+Cryptsetup triple layer mit Hibernate-Fähigkeit]]


==sonstiges==
==Dies+Das==


[[VirtualBox Lösungen]]
* [[Benutzer:Thomas/WIP-Banner]]
* [[Benutzer:Thomas/Test1]]
* [[Benutzer:Thomas/Test2]]
* [[Benutzer:Thomas/Test3]]
* [[Benutzer:Thomas/Test3/doc]]
* [[Benutzer:Thomas/Lebenszyklus einer Labor-Veranstaltung]]
* [[Benutzer:Thomas/Startseitenentwurf]]

Aktuelle Version vom 16. April 2011, 23:57 Uhr

Kontakt[Bearbeiten | Quelltext bearbeiten]

  • Jabber: schnittchen ÄT das-labor PUNKT org

meine Vorträge[Bearbeiten | Quelltext bearbeiten]

meine Projekte[Bearbeiten | Quelltext bearbeiten]

(unvollständig...)

  • Partitionmasker
  • Parser und Generator für die Abholtermine der drei Müllsorten: macht aus .ics und html-Schnippsel ein einziges .ics
  • partialmock zur Anwendung in Tests in Ruby: Methoden für die Laufzeit eines Tests neu definieren
  • [Neue Fassung] des Skripts, das unseren Kalender parst und daraus RSS-Feeds und einen HTML-Schnippsel macht
  • LibBracket

Tipps und Tricks[Bearbeiten | Quelltext bearbeiten]

Dienste, die keine X-Clients sind, mit der Gnome Session starten und beenden[Bearbeiten | Quelltext bearbeiten]

Das Problem: Dienste, die selbst keine X-Clients sind, werden beim Beenden der X-Session nicht automatisch beendet. Es ist nämlich keineswegs so, dass das Gnome Session Management allen eingetragenen Prozessen zum Schluss ein entsprechendes Signal sendet -- vielmehr müssen Clients das Ende der Session daraus ableiten, dass ihre Verbindung zum X-Server stirbt.

Das folgende Skript macht sich zu Nutze, dass die dbus-Session zusammen mit der X-Session stirbt. Ein beliebiger X-Client, der nichts tut (dem Nutzer nicht in die Quere kommt), würde es hier tun. Falls jemandem eine "leichtere" Lösung einfällt: bitte melden!

#!/usr/bin/ruby
SUB_COMMAND = "Pfad des Dienstes"
COMMAND_ARGS = "-d -f blahfu".split
TERMINATE_SIG = "TERM" #Ändere zu INT für den Rails Webrick ./script/server

child = fork { exec(SUB_COMMAND, *COMMAND_ARGS) }
puts child

#ein x-client, der sich mit dem Ende der Sitzung beendet
system("dbus-monitor", "sender='yyy.invalid'")

Process.kill(TERMINATE_SIG, child)
Process.wait(child, Process::WNOHANG)

Dieses Skript anpassen, ausführbar ablegen und in die Gnome-Session eintragen (System->Einstellungen->Sitzungen, Tab Startprogramme).

Auf einem Socket sniffen (unidirektional)[Bearbeiten | Quelltext bearbeiten]

Die folgende Bash-pipeline gibt wieder, was Prozess PID auf seinem file descriptor FD liest:

strace -p PID -e read=FD 2>&1 | egrep "^ \| .....  " | cut -b 11-33,35-58 | ruby -n -e 'split().each { |str| $stdout.putc str.hex }'

Will man sich das Ergebnis ansehen, sollte man noch | hexdump -C | less anhängen!

Diese Lösung hängt leider empfindlich vom Ausgabeformat von strace ab.

Geht vielleicht nur bei little endian Rechnern, läßt sich aber leicht anpassen. Auch der Write-Fall ist entsprechend machbar.

Liste aller Sektionen einer langen Manpage[Bearbeiten | Quelltext bearbeiten]

Die folgende Pipeline gibt alle Sektionen (und ein klein wenig mehr) von der bash-Manpage:

man bash | grep -Ev ’^( |$)’

Howto-mäßige Projekte[Bearbeiten | Quelltext bearbeiten]

Dies+Das[Bearbeiten | Quelltext bearbeiten]