/dev/blog von TamCore

made with Linux.

profile-cleaner - Thunderbird

Montag, 3. März 2014
von Philipp
3 Kommentare

profile-cleaner: Frühjahrsputz für den Browser

Na, auch schon mal gewundert, dass Browser und Mailclient trotz aufräumen immer mehr Speicherplatz fressen? In den meisten Fällen dürfte das daran liegen, dass unter der Haube SQLite verwendet wird und SQLite den Speicherplatz von gelöschten Daten nicht automatisch freigibt. Abhilfe schaffen kann hier (zumindest unter Linux) das Tool profile-cleaner, welches ein Wrapper für die SQLite Befehle vacuum und reindex ist.

Wenn Einträge aus einer SQLite-Datenbank gelöscht werden, bleiben an den betroffenen Stellen “leere” Einträge zurück. Das führt dazu, dass die Datenbank trotz Löschung der eigentlichen Daten nicht kleiner wird. Hier setzen die SQLite-Befehle vacuum und reindex an. Grob gesagt, wird zuerst die komplette Datenbank ohne ihre leeren Einträge neu geschrieben und anschließend der Index neu erstellt.

profile-cleaner - Chromium

Chromium-Profil um 59 MB verkleinert

profile-cleaner - Thunderbird

Thunderbird-Profil um 10 MB verkleinert

sl510_statusled

Mittwoch, 26. Februar 2014
von Philipp
2 Kommentare

S2RAM-Probleme bei schlafender Festplatte

Seit geraumer Zeit hatte ich das Problem, dass mein ThinkPad sporadisch nicht korrekt in den S3 Modus (s2ram / suspend) wechseln konnte und sich stattdessen mit blinkender Status-LED aufgehangen hat. Nach einer Menge Trial and Error wurde mir letztlich klar, dass die schlafende HDD das Problem ist.

Ohne mir die Funktionsweise von Linux’ s2ram genauer angeschaut zu haben, gehe ich davon aus, dass der Kernel versucht, den vorhandenen Festplatten die Anweisung zu geben, in den Standby zu wechseln. Da sich die HDD allerdings zu dem Zeitpunkt schon im Standby befindet, scheitert der Versuch und der Kernel verabschiedet sich.

Aber wie kann man das Problem zumindest temporär beheben? Dazu habe ich mir für Systemd einen wirklich simplen Sleep Hook gebaut, der lediglich die Aufgabe hat, die HDD vorübergehend aufzuwecken, damit der Kernel sie korrekt ansprechen kann.

Es wird lediglich überprüft, ob der Hook vor dem Suspend aufgerufen wird und ob das Blockdevice /dev/sdb existiert. Falls dem so ist, wird von einer zufälligen Position auf der Platte 1MB Daten gelesen. Die Position muss zufällig gewählt werden, da man sonst Gefahr laufen könnte, dass sich die abgefragten Daten bereits im Cache befinden und die HDD somit nicht aufgeweckt wird.

$ cat /usr/lib/systemd/system-sleep/sdb_spindown_fix
#!/bin/sh

if [ "$1" = "pre" ] && [ -b /dev/sdb ]; then
  dd if=/dev/sdb of=/dev/null bs=1M count=1 skip=$(( ( RANDOM % 1337 )  + 42 ))
fi

Simpel, oder?

arch-linux-logo

Freitag, 7. Februar 2014
von Philipp
2 Kommentare

Systemd: zurück zu richtigen Logfiles

Gott, wie ich Systemd teilweise einfach nur hasse. Versteht denn irgendwer, was sich seine Entwickler dabei gedacht haben, so nen Mist wie nen binäres Journal einzuführen? Hab lang genug versucht mich daran zu gewöhnen, bin gescheitert und schaffe den Mist daher jetzt auf meinen Systemen ab. Viel muss dafür zum Glück nicht geändert werden.

In der /etc/systemd/journald.conf werden lediglich die folgenden Einträge gesetzt.

[Journal]
Storage=none
ForwardToSyslog=yes

Anschließend ein passender Syslogd installiert, aktiviert und gestartet. Sowie der Journald neugestartet.

$ pacman -S syslog-ng
$ systemctl enable syslog-ng
$ systemctl start syslog-ng
$ systemctl restart systemd-journald

Done! Ab sofort ist der Journald arbeitslos :)

Freitag, 20. Dezember 2013
von Philipp
2 Kommentare

Danke, OVH!

Da ich in letzter Zeit irgendwie nur Negatives über OVH lese, muss ich an dieser Stelle auch mal ein paar positive Worte hinterlassen. Heute Vormittag gegen 9:44 hat mein Server nicht mehr auf die Pings des OVH Monitorings reagiert. Um 10:56 bekam ich dann die Info, dass das Mainboard des Servers abgeraucht ist und getauscht wurde.

Bei anderen Hostern muss der Kunde erst laut schreien, bis überhaupt etwas getauscht wird und bei vielen wird dann einfach direkt das ganze System getauscht. Insofern: Danke, OVH! System läuft und Kunde is glücklich :)

Hier die Details des Eingriffs: 
Motherboard replacement
Date 2013-12-20 09:50:49, xxxx.xxxx made Motherboard
replacement:
 Diagnosis:
HS motherboard

Actions:
Replacing the motherboard.
Updating the MAC address for DHCP.
Server restart.

result:
DHCP OK. Boot OK. Server on login screen. Ping OK, services
started.

Dienstag, 17. Dezember 2013
von Philipp
Keine Kommentare

Dedizierten Server in eine OpenVZ-VE migrieren

Vor geraumer Zeit habe ich meinen Server auf Basis von CentOS 6 und OpenVZ neu aufgesetzt um die Hardware insgesamt flexibler nutzen zu können und auch zukünftige Umzüge einfacher zu bewerkstelligen. Da ich allerdings zum faulen Teil der Menschheit gehöre und nicht alles neu einrichten wollte, habe ich kurzerhand das gesamte System in eine VE auf meinem KS2G von OVH umgezogen und zum Schluss einfach mittels vzmigrate umgezogen.

Wenn euer System mit dem Template eures Hosters installiert wurde, könnte es passieren, dass ihr ggf in die ein oder andere von ihm vorgenommene Anpassung rennt. Muss aber nicht zwingend passieren.

Zuerst sollten wir uns überlegen, welche bestehenden Files wir nach der Migration nicht mehr brauchen und diese in eine für rsync lesbare Datei packen.

cat << EOF > /tmp/exclude.txt
/initrd*
/vmlinuz*
/proc/*
/dev/*
/tmp/*
/boot
/lib/modules
/etc/blkid
/etc/lvm
/etc/udev
EOF

Anschließend legen wir auf dem OpenVZ-Host eine leere VE an

mkdir /vz/root/123 /vz/private/123
cat /etc/vz/conf/ve-vswap-2g.conf-sample > /etc/vz/conf/123.conf

convertieren diese ins Ploop-Format (optional, aber empfohlen)

vzctl convert 123

mounten diese

vzctl mount 123

und starten den ersten Sync

rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt root@alter.server:/ /vz/root/123

nachdem der Sync durch ist, ist es Zeit auf dem alten Server Dienste wie MySQL zu beenden und den Sync noch mals zu starten.

Sobald das erledigt ist, müssen noch ein paar Kleinigkeiten angepasst werden

sed -i -e '/getty/d' /vz/root/123/etc/inittab
ln -sf /proc/mounts /vz/root/123/etc/mtab

cat << EOF > /vz/root/123/etc/fstab
proc  /proc       proc    defaults    0    0
none  /dev/pts    devpts  rw,gid=5,mode=620    0    0
none  /run/shm    tmpfs   defaults    0    0
EOF

mknod --mode 666 /vz/root/123/dev/ptmx c 5 2
mknod --mode 666 /vz/root/123/dev/null c 1 3
mknod --mode 444 /vz/root/123/dev/urandom c 1 9

Damit OpenVZ weiß, wie es mit der VE umgehen muss, sollte man mit einem

vzctl set 123 --ostemplate debian-7.0-x86_64 --save

angeben, dass es sich bei der gerade gebauten VE bspw um ein Debian handelt.

Um die alte IP durch die neue zu ersetzen, empfiehlt sich bspw ein einfaches

find /vz/root/123/etc -type f -exec sed -i 's/alte.ip/neue.ip/g' {} \;

Das restliche Feintuning eurer VE überlasse ich ab hier euch :)

Dienstag, 19. November 2013
von Philipp
Keine Kommentare

Autologin via Systemd

Vor geraumer Zeit habe ich meine verwendete Desktopumgebung komplett über den Haufen geschmissen und bin auf Openbox mit Cairo-Dock und fbpanel gewechselt. Da dadurch mehr oder weniger zwangsweise auch der Login Manager über Bord ging, habe ich mich nach einer brauchbaren Alternative umgesehen. Da mein Notebook aber lediglich von mir verwendet wird, besteht eigentlich kein Bedarf für einen permanent im Hintergrund laufenden und Ressourcen schluckenden Daemon.

Daher habe ich mich nach ein wenig Recherche dazu entschieden, den Autologin einfach über agetty laufen zu lassen. Dafür habe ich das bestehende Systemd-Service-File von/für agetty dahingehend erweitert, dass der im Aufruf übergebene User automatisch auf tty7 angemeldet wird.

Dementsprechend habe ich das Service-File /etc/systemd/system/autologin@.service angelegt

[Unit]
Description=Autologin for %I
After=systemd-user-sessions.service
Before=getty.target
IgnoreOnIsolate=yes
ConditionPathExists=/dev/tty7

[Service]
ExecStart=-/sbin/agetty -a %I tty7 38400 linux
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=tty7
TTYPath=/dev/tty7
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
KillSignal=SIGHUP

[Install]
WantedBy=multi-user.target

und die erste Zeile meiner heimischen ~/.zshrc bzw ~/.bashrc (basierend auf eurer Default Shell) entsprechend erweitert.

[[ -z $DISPLAY && $XDG_VTNR -eq 7 ]] && exec startx &> ~/.xlog

Anschließend muss noch die ~/.xinitrc entsprechend angepasst werden, damit sie Openbox startet.

#!/bin/sh
exec openbox-session

Zum Abschluss reicht dann ein simples

systemctl enable autologin@philipp.service

Freitag, 15. November 2013
von Philipp
1 Kommentar

“Universales Public-Folder” für BTsync, BitPocket und co.

Ende Januar diesen Jahres veröffentlichte ich mein Public-Folder für ownCloud, das auch soweit gut funktionierte. Allerdings hat mich der leicht verkackte Sync des Desktop-Clients von ownCloud minimal angekotzt und ich bin zu BitPocket gewechselt. Mittlerweile verwende ich zwar BitTorrent Sync, allerdings vermisse ich seit dem Wechsel auf BitPocket das Public-Folder, das ich eigentlich sehr rege genutzt habe.

Daher habe ich mir überlegt, einfach das entsprechende Verzeichnis mit einem kleinen HTTPd über 127.0.0.1:9999 freizugeben und den Apache via mod_proxy darauf zugreifen zu lassen. Aus Gründen der Faulheit habe ich mich dann dazu entschieden, nicht auf Python’s http.server zurückzugreifen, sondern was fertiges zu nehmen und bin dann bei webfs gelandet.

Die Installation war dank

apt-get -y install webfs

schnell erledigt und das Configfile /etc/webfsd.conf ist selbsterklärend.

web_root="/home/philipp/Public"
web_ip="127.0.0.1"
web_port="9999"
web_index="index.txt index.htm index.html"
web_user="philipp"
web_group="philipp"

Im Falle von BitPocket würde der web_root bspw /home/user/BitPocketMaster/Public lauten. Da ich aber BTsync verwende, habe ich für ~/Public einfach eine eigene Synchronisierung eingerichtet.

Anschließend muss dem Apache nur noch beigebracht werden, dass er die Requests für pub.tamcore.eu an webfs weiterleiten soll. Das könnte dann in etwa so aussehen (frei Hand geschrieben, da ich eigentlich ein Panel verwende)

<VirtualHost 94.23.166.176:80 [2001:41d0:2:6030:0:d0:c0:ffee]:80>
  ServerName pub.tamcore.eu

  <IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPass / http://127.0.0.1:9999/
    ProxyPassReverse / http://127.0.0.1:9999/
  </IfModule>
</VirtualHost>