Permalink

kurz notiert: PHP-Fusion & MySQL & Encoding

Jemand benutzt auf dem Server PHP-Fusion für eine Webseite. Nach unerfindlichen Gründen (eventuell lag es am PHP Update) wurden die Umlaute in den alten Beiträgen auf einmal falsch angezeigt. Neue Einträge wurden aber richtig erstellt und angezeigt. Anscheinend existierten nun in der MySQL Datenbank Einträge mit UTF-8 und Einträge mit Latin Encoding. Problem war eigentlich, dass im MySQL Server und auch in der Datenbank beziehungsweise in den Tabellen UTF-8 eingestellt war. Ein „grep“ über die PHP-Dateien brachte auch keine falschen Encoding Einstellungen.

Als erster Versuch wurden alle Einträge konvertiert beziehungsweise vielmehr die Latin Umlaute ersetzt. Dafür habe ich bei GitHubGist ein fertiges PHP Script gefunden. Nach der Ersetzung wurden die alten Einträge immer noch falsch angezeigt. Das Löschen des Caches half nicht. Dafür waren nun auch die neuen Einträge falsch. Anscheinend waren die neuen Einträge vorher nicht UTF-8.

Der nächste Versuch war in PHP-Fusion direkt nach dem Verbinden den Charset auf UTF-8 mit Hilfe von mysql_set_charset einzustellen. Dies brachte auch den Erfolg. Anscheinend war als Standard nicht automatisch UTF-8 gesetzt. Eigentlich Komisch, da folgende Einträge für [client], [mysql], [mysqld] und weitere bereits in der my.cnf gesetzt waren:

1
2
character-sets-dir = /usr/share/mysql/charsets
default-character-set = utf8

Nach ein bisschen Suchen fand ich dann folgende Zeile, welche ich unter [mysqld] einfügte:

1
init-connect = 'SET NAMES utf8'

Nun funktionierten die Umlaute auch ohne die Änderung in PHP-Fusion. Wieso dies hier extra gesetzt werden musste, weiß ich nicht. Also was es macht, weiß ich. Aber wieso es nicht standardmäßig so eingestellt wird, ist für mich komisch. Dafür funktioniert es nun.

Permalink

kurz nachgedacht: Einkreisen in Sozialen Netzwerken

Ich überlege schon eine Weile wie für mich das beste Soziale Netzwerk aussehen würde.

Derzeit benutze ich Twitter, Facebook und Google+.

Letztere beiden eher weniger, dafür gefällt mir irgendwie Google+ eigentlich am besten. Bei Google+ gibt es beispielsweise diese Kreise. Man kann diverse Personen in unterschiedliche (und auch in mehreren) Kreise einordnen, sodass man Inhalte nur an bestimmte Personen(gruppen) teilen kann. Das gleiche gibt es eigentlich auch bei Facebook. Dort kann man Leute in Listen eintragen und so die Inhalte nur an diese verteilen. Beides funktioniert relativ gleich, nur dass es bei Facebook immer bidirektionale (X und Y sind Freunde) und bei Google+ eher direktionale Beziehungen (wie Twitter: X folgt Y – evtl. auch anders herum) gibt. Wenn ich es richtig verstanden habe, kann man bei Google+ Beiträge an Leute teilen, die einem selber eigentlich gar nicht folgen (was manchmal echt nervig sein kann).

Bei Twitter gibt es mittlerweile mehrere Personen, die jeweils mehrere Accounts haben. Entweder versuchen sie dadurch zwischen privates, parteiliches oder berufliches zu trennen. Oder der Zweitaccount ist ein protected Account. Sie sind auch als Rageaccounts verbreitet.

Ich selber habe Twitter von den dreien als erstes benutzt. Dann kam Facebook. Dort habe ich aber nun auch andere Empfänger. So gibt es dort neben z.B. Parteibekanntschaften auch private Freunde, Verwandte, Kommilitonen von der Uni oder auch ehemalige Klassenkameraden. Dort habe ich zuerst versucht mit den Listen Leute in Interessengebiete aufzuteilen. Wenn es um Piratenkram ging, dann sollte es nur an die Piraten gehen. Wenn es etwas privates war, dann entweder an alle oder nur an private Kontakte. Ich wollte halt niemanden mit meinen Interessen nerven – die Zuteilung hatte also nichts mit Vertraulichkeit o.ä. zu tun. Ich hätte aber z.B. nichts dagegen gehabt, wenn auch jeder Nichtfreund meine Piratenbeiträge lesen darf. So ähnlich sieht es auch bei Google+ aus, auch wenn ich da eher ähnliche Empfänger wie auf Twitter habe (also mehr Piraten und Interessierte).

Nun, Kreise, Listen, Aspekte oder wie man das alles nennt sind ja toll, aber erfüllen nicht meine Bedürfnisse. In Google+ bin ich es auch irgendwie langsam Leid Leute in Kreise einzusortieren. Mittlerweile landet jeder in „was auch immer“. Auf Facebook veröffentliche ich auch alles öffentlich – man kann mich auch abonnieren und so fast alles lesen. Dafür benutze ich Facebook auch kaum mehr.

Wieso schreibe ich das alles? Ich habe mir gedacht, dass ein soziales Netzwerk cool wäre, wo man selber Kreise o.ä. einrichtet und die Leute sich selber dort reinschreiben können. Dann könnte ich z.B. Kreise für „Piratiges“, „Privates“, „Uni“ usw. einführen. Dann können sich die Leute aussuchen, was sie lesen möchten – natürlich unter der Voraussetzung, dass ich beim Schreiben meiner Beiträge das an die richtigen Kreise teile. Wenn die Leute das selber aussuchen, dann wäre ich nicht der Dumme, der die Leute falsch einteilt. Ich meine: Es könnte ja sein, dass ehemalige Klassenkameraden etwas über meine piratigen Aktivitäten lesen wollen. Die Kommilitonen aus der Uni in meinen sozialen Netzwerken wissen eigentlich, dass ich bei den Piraten bin, aber ob sie sich überhaupt für diese Themen interessieren, das weiß ich nicht. Mit diesem umgedrehten Konzept könnte man auch das mit den RageAccounts lösen ohne dass man mehrere Accounts verwalten muss. Es könnte so Kreise geben, bei denen man selber die Leute erst zulassen muss, ehe sie mitlesen können.

Ja, man kann auch mehrere Accounts anlegen, aber langsam überfordert mich das. Es passiert auch echt schnell, dass man aus versehen mit dem falschen Account postet. Und wieso mehrere Accounts, wenn es auch nur mit einen ginge?

Nun meine Frage: Gibt es denn schon so etwas? Habe ich etwas übersehen?

Permalink

kurz notiert: Software RAID 1 Synchronisierung und S.M.A.R.T Tests

Ich betreibe ein Software RAID 1 mit zwei Festplatten. Dieses RAID war nicht mehr synchron. Der Befehl „cat /proc/mdstat“ zeigte 93% an. Entweder gab es Festplattenfehler oder so viel IO Last, dass die Resynchronisation nicht mehr hinterher kam (die Synchronisationsgeschwindigkeit hängt von der IO-Last ab). Da dies ungewöhnlich ist, habe ich dann auf beide Platten S.M.A.R.T Tests durchlaufen lassen. Leider wurden diese Tests nie beendet – selbst bei den zwei Minuten Tests kam die Meldung:

$ smartctl -a /dev/sda
...
Self-test execution status: ( 241) Self-test routine in progress...
10% of test remaining.
...

Bei einer kleinen Recherche hatte jemand auch das Problem mit einem RAID 1 Verbund. Vor allem war bei mir die Resynchronisation mit einer Geschwindigkeit von ca. 300-600K/sec total langsam. Irgendwie müssen sich die Tests und die Resynchronisation gegenseitig geblockt haben. Selbst ein herauslösen einer der Platten aus dem RAID ging nicht (gut, kann auch sein, dass es gemountet so nicht geht):

$ mdadm /dev/mdX --remove /dev/sdXX
mdadm: hot remove failed for /dev/sdXX: Device or resource busy

Nachdem ich die Tests dann mit „smartctl -X /dev/sdX“ abgebrochen hatte, erhöhte sich die Geschwindigkeit auf 4000-7000K/sec (je nach Auslastung).

Permalink

GnuPG Cheet Sheet

Irgendwann hatte ich mal eine Liste mit GPG Befehlen erstellt. Diese möchte ich mit euch teilen. Bevor ich mit den Befehlen anfange, möchte ich kurz meine GPG Config zeigen (~/.gnupg/gpg.conf):

1
2
3
use-agent
keyserver hkp://pgp.mit.edu:11371
keyserver-options auto-key-retrieve

In dieser Config habe ich zum einen eingestellt, dass zum Abfragen des Passworts der GPG-Agent benutzt wird. Dafür benötigt man je nach Distribution/Betriebssystem das Paket „gnupg-agent“ (in ArchLinux ist es bereits in gnupg) und „pinentry“ (Ubuntu: pinentry-curses, pinentry-gtk2, pinentry-qt und/oder pinentry-qt4). Soweit ich weiß wird in GnuPG 2 der Agent standardmäßig benutzt.

Außerdem habe ich einen Keyserver festgelegt. Dadurch muss man bei den Befehlen, die mit dem Keyserver arbeiten, nicht ständig diesen per „–keyserver“ angeben.

In der letzten Zeile habe ich angegeben, dass der Schlüssel automatisch vom Keyserver geholt wird (deshalb muss der Keyserver ebenfalls in der Config festgelegt sein). So wird bei mir in Thunderbird beim Überprüfen der Signatur der E-Mails automatisch der Schlüssel vom Keyserver geholt.

Zu den Befehlen:

Vorweg: Ich benutze immer den Befehl „gpg2“. Ihr könnt natürlich auch „gpg“ verwenden.

Schlüssel anzeigen/auflisten

Alle Schlüssel im Keyring erhält man wie folgt:

% gpg2 --list-keys

Um einen bestimmten Schlüssel zu zeigen, gibt man beim letzten Befehl die Schlüssel-ID mit an:

% gpg2 --list-keys $KEY

Den Fingerprint des Schlüssels anzeigen:

% gpg2 --fingerprint $KEY

Die Signaturen des Schlüssels anzeigen:

% gpg2 --list-sigs $KEY

Alle Schlüssel auflisten, von denen man den geheimen Schlüssel hat:

% gpg2 --list-secret-keys

Den Öffentlichen Schlüssel exportieren (in der Konsole angezeigt):

% gpg2 --armor --export $KEY

Um diesen öffentlichen Schlüssel in eine Datei zu speichern:

% gpg2 --armor --output $DATEI --export $KEY

Schlüssel erzeugen

Irgendwann benötigt man einen eigenen Schlüssel oder muss sich einen neuen erzeugen. Dies geht einfach per:

% gpg2 --gen-key

Eigentlich ist alles selbsterklärend. Als Schlüsselart nimmt man „(1) RSA und RSA (voreingestellt)“. Die Schlüssellänge setze ich gerne auf 4096. Beim Verfallsdatum stelle ich immer unendlich ein. Dies kann man später auch ändern (siehe unten). Nicht vergessen den Schlüssel auf einen Keyserver hochzuladen (siehe unten).

Schlüssel bearbeiten

Schlüssel bearbeiten, um diesen z.B. zu ändern oder zu unterschreiben:

% gpg2 --edit-key $KEY

Alternativ: Falls man mehrere eigene Schlüssel hat und beim Bearbeiten mit einem bestimmten Schlüssel unterschreiben möchte:

% gpg2 -u $OWNKEY --edit-key $KEY

Weitere Identität hinzufügen

Wenn man mit dem erzeugten Schlüssel für weitere E-Mail Adressen signieren möchte, dann kann man dies wie folgt machen (man muss vorher in den Bearbeitungsmodus – siehe letzten Abschnitt):

gpg> adduid

Hier gibt man den Namen, die E-Mail Adresse sowie (falls gewünscht) einen Kommentar an. Mit „f“ sagt man, dass es so stimmt und mit „save“ speichert man den Schlüssel.

Schlüssel unterschreiben

(vorher muss man in den Bearbeitungsmodus gehen – siehe oben)

Unterschreiben kann man mit:

gpg> sign

(hier wird nochmal angezeigt, mit welchem Schlüssel signiert wird)

Wirklich signieren? (j/N) j

(Passwortabfrage)

gpg> trust

Ihre Auswahl? 5 (bzw. je nach Vertrauen abstrufen)

Wollen Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? (j/N) j

gpg> q

Änderungen speichern? (j/N) j

Verfallsdatum setzen und neuen Unterschlüssel erzeugen

Der Alex hat dies ausführlich erklärt. Hier nur ganz kurz zusammengefasst (vorher in den „Bearbeitungsmodus“):

Um das Verfallsdatum bei einem Unterschlüssel zu setzen, muss dieser erst einmal ausgewählt werden und dann das Datum setzen:

gpg> key 1

(In der Liste ist bei dem ausgewählten Unterschlüssel nun ein Stern)

gpg> expire
Ändern des Verfallsdatums des Unterschlüssels.
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
        = Schlüssel verfällt nach n Tagen
      w = Schlüssel verfällt nach n Wochen
      m = Schlüssel verfällt nach n Monaten
      y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0) 6m
Key verfällt am Fr 17 Okt 2014 14:07:11 CEST
Ist dies richtig? (j/N) j

(Passwortabfrage)

gpg> save

Mit „addkey“ erzeugt man analog einen Unterschlüssel. Hier wählt man dann am besten „(6) RSA (nur verschlüsseln)“ aus. Am Ende das Speichern nicht vergessen.

Keyserver etc

Hat man Änderungen an dem Schlüssel vorgenommen, dann kann man ihn hochladen (ggf. „–keyserver“ angeben):

% gpg2 --send-keys $KEY

Benötigt man einen bestimmten Schlüssel vom Keyserver oder möchte diesen nur updaten, dann kann man ihn sich herunterladen:

% gpg2 --recv-keys $KEY

Man sammelt in der ganzen Zeit viele Schlüssel. Diese werden von anderen signiert oder vom Eigentümer aktualisiert (neuer Unterschlüssel, zurückgesetzt, …). Deshalb möchte man von Zeit zu Zeit mal alle Schlüssel in seinem Keyring aktualisieren:

% gpg2 --refresh-keys