cat /path/to/list.txt | xargs tar -cf foobar.tar
cat /path/to/list.txt | xargs tar -cf foobar.tar
Ich bin nun auch per Jabber (self hosted, openfire) erreichbar. Meine Adresse lautet:
Das Problem: ein Backup von wenigen aber wichtigen kleinen Dateien von einem Server machen, aber irgendwie keine Zeit den eigentlichen Backup-Client einzurichten. Sowieso ist in diesem Fall der Backup-Client auf dem Server eigentlich ein bisschen wie mit Kanonen auf Spatzen zu schiessen. Backup muss aber dennoch gemacht werden.
Die Loesung: die Backupmailbox. Auf dem Mailserver wird eine Backup-Aliasmailadresse eingerichtet. Backups gehen dann per Mail an diese Adresse, ein Skript extrahiert die Anhaenge und legt sie im Dateisystem in einer Ordnerstruktur ab. Diese Ordner werden dann ueber den Backupclient - der auf dem Mailserver sowieso laeuft - mit ins regulaere Backup geschoben. Die Anhaenge werden in Unterordner gespeichert, die dem Namen der EMailadresse entsprechen um sie besser auseinanderzuhalten. Dabei wird das @ gegen einen . ersetzt. Weiter werden nur Emails bearbeitet, die als Betreff ein definiertes Zufallspasswort haben.
Die Umsetzung: Man benoetigt einen Email-Alias, ein Skript, zwei Ordner im Dateisystem, ein Zufallspasswort und 15min Zeit eines Systemadministrators.
Zuerst lege man in der /etc/aliases einen neuen Backup-Alias an:
backupalias: "| /path/to/attatchExtract.sh"
und uebernehme diesen mit dem Kommando newaliases. Danach lege man unter dem definierten Pfad das folgende Skript ab:
#!/bin/bash ## base path where attachments and logfile should be stored without trailing slash BASEPATH=/var/local/backup/ ## The subject needs to match this string, otherwise the mail is dropped without action SECRETSUBJECT="12345" ## uniq filename for temp file FILENAME=$(date +%s) echo "Filename = $FILENAME" >> $BASEPATH/logfile ## safe email to tmp file /bin/cat > /tmp/$FILENAME ## extract sender from email SENDER=$(grep "From:" /tmp/$FILENAME | sed 's/.*< *//;s/ *>.*//' | tr "@" ".") echo "Sender = $SENDER" >> $BASEPATH/logfile ## extract subject from email SUBJECT=$(grep "Subject:" /tmp/$FILENAME | sed '/^Subject: */!d; s///; q') echo "Subject = $SUBJECT" >> $BASEPATH/logfile ## only do something if secret subject is matched if [ "$SUBJECT" == "$SECRETSUBJECT" ]; then ## create folder for email address if doesn't exist if [ ! -d "$BASEPATH/$SENDER" ] ; then echo "Directory $BASEPATH/$SENDER does not exist, creating it" >> $BASEPATH/logfile mkdir -p $BASEPATH/$SENDER fi ## extract files from email and safe to correcet folder /usr/bin/uudeview -i -a -p $BASEPATH/$SENDER/ /tmp/$FILENAME >> $BASEPATH/logfile echo >> /$BASEPATH/logfile ## otherwise just do nothing else echo "Subject didn't match secret Subject. Doing nothing..." >> $BASEPATH/logfile fi ## delete tmp file /bin/rm /tmp/$FILENAME
In dem Skript passe man nun das Zufallspasswort gegen ein eigenes an (makepasswd --chars 40) und aktualisiere den BASEPATH. Zuletzt noch das Skript mit chmod 755 ausfuehrbar machen und das Ergebnis aus dem Mailclient seiner Wahl testen.
Sollte es zu Problemen kommen, dass keine Logdatei und Anhaenge abgelegt werden liegt dieses meistens an fehlenden Rechten.
ich nutze unter anderem eine GT 9800. Nachdem Upgrade auf 12.04 ruckelten ploetzlich die Fenster beim verschieben. Geholfen hat ein deaktvieren der Option "Mit VBLANK synchronisieren" unter dem Compizsettings Manager -> Allgemeine Optionen. Generell hat 12.04 bei mir sehr viele Probleme mitgebracht, z.B. gibt es mit einer TI 550 sehr häufig freezes. Das Problem ist wohl bekannt, aber bisher wurde noch keine Loesung Angeboten.
Ab heute hat mein Blog ein neues SSL-Zertifikat von CAcert.org. Wenn mich jemand "assuren" wuerde, waere ich dem sehr dankbar.
Weiter ist mein Blog nun auch ueber spdy erreichbar. Ein deutlicher Geschwindigkeitszuwachs, um es mal einfach auszudruecken. Die Installation gestaltete sich sehr einfach: runterladen, installieren, Apache neu starten, fertig. Das Apache-Modul gibt es hier bei Google.
Um in den Genuss des schnelleren Seitenaufbaus zu kommen als Firefox-Nutzer unter about:config nach network.http.spdy.enabled suchen und auf true setzen.
Braucht man immer wieder mal,
/etc/postfix/main.cf: virtual_alias_domains = example.com ...other hosted domains... virtual_alias_maps = hash:/etc/postfix/virtual /etc/postfix/virtual: postmaster@example.com postmaster info@example.com joe sales@example.com jane # Uncomment entry below to implement a catch-all address # @example.com jim ...virtual aliases for more domains...
postmap /etc/postfix/virtual
/etc/init.d/postfix reload
findet man alles gut erklaert unter http://www.postfix.org/VIRTUAL_README.html
Im folgenden ist beschrieben, wie man einen SVN-Server mit HTTP-Zugang einrichtet und anschliessend ein vorhandenes Repository auf diesen neuen Server umzieht. Die Anleitung bezieht sich auf einen Ubuntu Server, es sollte sich jedoch auf Debian Systemen alles analog verhalten.
Zuerst wird die benoetigte Software installiert:
apt-get install subversion libapache2-svn
Danach werden die erforderlichen Ordnerstrukturen angelegt:
mkdir /srv/svn mkdir /srv/svn/repository chown www-data:www-data /srv/svn/repository chmod 770 /srv/svn/repository
Als naechstes wird die Datei /etc/apache2/mods-available/dav_svn.conf entsprechend konfiguriert. Hier werden verschiedene Dinge eingestellt, unter anderem fuer die Zugangsbeschraenkungen und ACLs:
<Location /svn> DAV svn SVNParentPath /srv/svn/repository AuthType Basic AuthName "Subversion Repository" AuthUserFile /srv/svn/dav_svn.passwd AuthzSVNAccessFile /srv/svn/dav_svn.authz Require valid-user </Location>
Nun wird in der /srv/svn/dav_svn.passwd ein neuer Benutzeraccount angelegt, der Zugriff auf das Repository bekommen soll:
htpasswd -c /srv/svn/dav_svn.passwd USERNAME
Und in der /srv/svn/dav_svn.authz die entsprechenden ACL-Rechte gesetzt:
[example:/] USERNAME = rw
Zum Schluss wird das Repository migriert. Dafuer muss auf dem alten Server ein entsprechender Repository-Dump erzeugt, und auf den neuen Server kopiert werden:
svnadmin dump /path/to/repository/foobar > foobar.dump scp foobar.dump user@example.net:
Auf dem neuen Server wird nun ein neues Repository angelegt und mit dem vorher erstellten und kopierten Dump befuellt. Damit es die richtigen Rechte hat, wird es als Benutzer www-data gemacht
cd /srv/svn/repository su www-data svnadmin create foobar svnadmin load foobar < foobar.dump
Das wars! Ab nun kann man auf das Repository auf den neuen Server schwenken und damit arbeiten. In diesem Beispielfall koennte es das folgende sein:
http://example.net/svn/foobar
Ich stand gerade wieder einmal vor dem Problem, dass ich aus einer Logdatei Meldungen nach dem Muster:
582 media files copied.
extrahieren und davon dann nur die Zahlen zusammenzaehlen wollte. Ein gutes Beispiel um mal ein paar Tools fuer das Arbeiten mit Texten in der Shell vorzustellen.
Als erstes moechte ich alle Zeilen extrahieren. Dafuer nutze ich das Kommando grep:
grep "media files copied." /tmp/logfile
Ich erhalte daraufhin eine Liste mit allen Zeilen, die diesen String enthalten. Als naechstes moechte ich daraus die Nummern extrahieren. Der String beginnt immer mit acht Leerzeichen, und danach steht die Nummer. Hierfuer nutze ich das Kommendo cut, das mir einen String an bestimmten Trennzeichen aufteilt und mir davon die angegebene Spalte ausgibt. Als Trennzeichen eignet sich hier das Leerzeichen, da vor und nach der Nummer eines steht. Da acht Leerzeichen am Anfang sind, brauche ich die neunte Spalte. Dieses erreiche ich mit dem folgenden Code:
grep "media files copied." /tmp/logfile | cut -d " " -f 9
Ich leite also mit der Pipe | die Ausgabe des grep Kommandos weiter zu cut. Das Ergebnis ist eine Liste mit vielen Zahlen, die jede fuer sich in einer eigenen Zeile stehen. Um diese nun mit Hilfe des Kommandos bc zu addieren, muss daraus noch eine Rechenaufgabe werden. Ich greife dafuer auf das Programm paste zurueck. Hiermit kann ich Zeilen zusammenfuehren und dabei den Zeilenumbruch gegen ein von mir vorgegebenes Zeichen ersetzen. In diesem Fall moechte ich, dass jede Zeile nacheineander (seriell, nicht parallel) abgearbeitet wird, und der Zeilenumbruch gegen ein "+" Zeichen ersetzt wird. Dementsprechend sieht mein Aufruf nun wie folgt aus:
grep "media files copied." /tmp/logfile | cut -d " " -f 9 | paste -sd+
Heraus kommt bei mir gerade das:
32+32+52+32+187+208+22+793+63+632+8+16+40+293+313+48+243+96+32+579+647+768+808+18+48+102+120+258+52+18+52+52+10+52+108+137+512+48+40+48+51+96+582+52+687+101+696+48+48+784+766+776+614+599+804+32+28+779+76+32+86+99+20+34+776+837+44+824+28+803+48
was ich nun nur noch zu bc pipen muss, und schon weiss ich, dass:
grep "media files copied." /tmp/logfile | cut -d " " -f 9 | paste -sd+ | bc
18869 Dateien kopiert wurden.
Nachdem ich essen war, liefert omreport ploetzlich:
#omreport chassis pwrmonitoring Power Consumption Information Error : Current probes not found
Wodurch auch der check_openmanage Check von Nagos Fehler meldet. Auch blacklisting diverser Checks von check_openmanage hat nichts gebracht. Also im check_openmanage Skript folgendes auskommentiert:
# else {
# @output = @{ run_omreport("$omopt_chassis pwrmonitoring") };
# }
Gleichzeitig gab es in Goettingen einen Brand mit involvierter Starkstromleitung, ein seltsamer Zufall.
omreport sollte beim Aufruf eigentlich so etwas liefern
#omreport chassis pwrmonitoring Power Consumption Information Power Consumption Index : 2 Status : Ok Probe Name : System Board System Level Reading : 175 W Warning Threshold : 917 W Failure Threshold : 966 W Amperage PS 1 Current : 0.4 A PS 2 Current : 0.4 A Power Headroom System Instantaneous Headroom : 796 W System Peak Headroom : 652 W Power Tracking Statistics Statistic : Energy Consumption Measurement Start Time : Fri Mar 25 19:14:50 2011 Measurement Finish Time : Mon Mar 19 13:54:03 2012 Reading : 301.8 KWh Statistic : System Peak Power Measurement Start Time : Fri Mar 25 18:58:46 2011 Peak Time : Fri Mar 25 19:21:18 2011 Peak Reading : 320 W Statistic : System Peak Amperage Measurement Start Time : Fri Mar 25 18:58:46 2011 Peak Time : Fri Mar 25 19:20:07 2011 Peak Reading : 1.4 A
Mal schauen ob man raus finden kann, was da genau im System den Geist aufgegeben hat.
update: Der Brand war Schuld, anscheinend gab s ein "kurzes" Flackern im Stromnetz.
Über die Token Software MOTP-AS habe ich hier schon etwas geschrieben. Diesmal nur ein kleiner Hinweis, dass MOTP-AS gerade ein Update erhalten hat. Hier die Releasenotes:
After too many months without changes, version 0.7.2 of MOTP-AS is now available. The source code and the Slitaz images for testing are already online, the openSUSE images will follow in the next days.
Since there is no change in the core functionality, only the minor version is increased. However the update also implies changes on the database.
The improvements of the new version are:
- IPv6 support for RADIUS clients.
- Configuration parameters are now stored in database and can be changed by Web interface.
- Old log entries can be purged automatically; log entries follow the same pattern.
- very simple import/export possibility through Web interface
- You have to confirm the deletion of database entries (users, accounts, etc.)
As always please assure that you have a backup before updating. After updating, please verify the configuration parameters (now using Web interface!), especially if you previously changed the settings in config.php.
Please report any bugs to motp-as@network-cube.de.
Leider ist das Killerfeature aka. LDAP Support noch nicht integriert, dennoch sollte man die Lösung für kleine Installationen im Hinterkopf behalten.
Hier noch ein Link.
Ähnliche Verfriemelungen:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
www-data www-data@wehateyouall.de
postmap /etc/postfix/sender_canonical /etc/init.d/postfix restart
Eine 1:1 Kopie von exdc. Ich habe es bisher immer dort nachgelesen, aber mir ist der Suchen-Suchschlutz einfach zu weit unten in der Sidebar. Darum nun eine Kopie hier rueber in meinen Blog.
Vor 3,5 Jahren bloggte ich:
Der Zeitpunkt an dem Bilder mit bestimmten Personen drauf gefunden werden können rückt immer näher.
Und was haben wir da?…

Was bisher noch eher Spezialwissen war, z.B. http://www.tineye.com/, ist plötzlich auch in Googles Bildersuche enthalten. Falls irgendjemand sein Foto noch an einem Ort im Netz stehen hat, wo er nicht gefunden werden möchte – der richtige Zeitpunkt es dort zu entfernen liegt bereits in der Vergangenheit.
Wir wissen, dass die Grossen Datensammler bereits jetzt massenhaft mit biometrischen Informationen gefüttert werden. Jedes mal, wenn irgendein Idiot sich – oder schlimmer – seine Freunde auf einem Foto tagged, gibt es eine Person ein Opfer mehr, das man mit “Suche mehr Bilder wo diese Person drauf ist”, “Suche Bilder wo diese Person nackt drauf ist”, “Suche Bilder wo diese Person in Begleitung von XY” drauf ist finden können wird. Falls die Suchmaschinenbetreiber sich trauen werden, solche Suchen anzubieten.
Die Vorteile von krank sein und den ganzen Tag im Bett vor sich hin zu vegetieren sind...
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="360" src="http://www.youtube.com/embed/Ul0elQ9jp-U" width="640"></iframe>
Host *.home.lan IdentityFile ~/.ssh/id_dsa.home User rudolfrichter

In der Ouvertüre “Tetrahedon” zum neuen Opus “Befehl von ganz unten” von Deichkind ist offensichtlicher rückwärts gesprochener Text zu hören. Wenn man das mit audacity umdreht, langsamer und etwas lauter macht und die Soundeffekte rausschmeisst klingt das wie im Player zu hören ist.
Das Ergebnis kam uns spanisch vor. Da aber weder smurf noch ich spanisch können, haben wir das in in Lautschrift in den Google Translator geschrieben und Google und wir haben uns auf folgenden Text geeinigt:
una pequeña parte de ti
un poco de paz
en mi va a muriere
esto no es un milagro
o esto no es americano
Ich dachte zuerst, das hätte was mit Nicole zu tun, wegen der zweiten Zeile “Ein bisschen Frieden”. Aber auch die letzte “das ist nicht Amerika” kommt bekannt vor. Und das ist es auch – das ist die erste Strophe von This is not america von David Bowie auf Spanisch.
Thanks for listening.
Das Plugin dw2pdf herunterladen und installieren. Nutzt man als Template Arctic kann man einfach in die main.php
<form method="get" action="<?php wl($ID)?>">
<div>
<button type="submit">
<img src="<?php echo DOKU_BASE?>lib/images/fileicons/pdf.png" alt="PDF Export" />
Export to PDF
</button>
<input type="hidden" name="do" value="export_pdf" />
<input type="hidden" name="id" value="<?php echo $ID?>" />
</div>
</form>
einfuegen und gut ist. Ich habe es unterhalb von
<div class="left_sidebar">
<?php if(!tpl_sidebar_hide()) { ?>
eingetragen (haengt natuerlich von der jeweiligen Konfiguration ab) und finde es sieht ganz brauchbar aus . Wozu man PDF Export im Wiki braucht ist natuerlich eine andere Frage.
Man sollte nicht das offiziele Repository von etherpad nutzen, sondern etherpad direkt vom git Repository runterladen. Das Debian Repository ist veraltet.
git clone git://github.com/ether/pad.git etherpad cd etherpad/etherpad dpkg-buildpackage -us -uc
Die Abhaengigketen sollten natuerlich installiert sein. Das ist alles grosses Gefrickel. Hoffen wir mal, dass etherpad lite schnell von den Funktionen her aufholt.
Link:
http://feeding.cloud.geek.nz/2011/12/installing-etherpad-on-debianubuntu.html
Sollte man dies Problem haben, hilft eventuell loeschen bzw. umbenennen der Datei StartProfiler.php im Wikiroot.
I've been looking for this for ages now...
(via)
Ich moechte diesen Blogeintrag mit einer Graphik beginnen um die Ausgangsstellung besser aufzeigen zu koennen:
Mein Problem ist, dass ich mit Nagios den Server 1 ueberwachen moechte, der hinter einem Webproxy sitzt. Ich kann von aussen nicht aktiv per NRPE vom Server pullen, und passiv mit NSCA pushen funktioniert auch nicht, da es nicht durch den Webproxy geht. Als Loesungsansatz habe ich mich dann ein bisschen mit NPA auseinandergesetzt, bin aber zu der Ueberzeugung gekommen, dass es fuer das was ich eigentlich machen moechte zu gross und zu kompliziert ist.
Fragen, die ich mit einem bash-Skript nicht beantworten kann, versuche ich oft mit einem PHP-Skript zu loesen. Auch dieses mal ist es mir wieder gelungen. Das NagiosProxySender Skript erwartet drei Parameter:
Weiter muessen in dem NagiosProxySender Skript verschiedene Konfigurationseinstellungen gemacht werden. Dieses sind IP und Port von dem Webproxy, die komplette URL zu dem Nagios cmd.cgi-Skript sowie die HTTP-Authentifizierungsdaten um an das cmd.cgi-Skript heranzukommen. Das war es dann eigentlich auch schon. Wenn auf dem Nagios-Server die passiven Checks eingerichtet sind kann es losgehen.
Ich persoenlich habe mir jeden Aufruf in ein eigenes Bash-Skript gepackt, da ich dadurch flexibler bin. Zur Veranschaulichung hier drei Beispiele. Das erste uebermittelt den Updatestatus eines debianbasierten Systems. Das zweite prueft wann eine Logdatei zuletzt geaendert wurde und gibt Warnungen aus wenn es zu lange in der Vergangenheit liegt. Der dritte Aufruf ueberprueft ob auf einem Host beim Aufruf einer URL der HTTP-Code 200 zurueckgegeben wird und auf der Seite ein bestimmter String zu finden ist. Reagiert der Server zu traege gibt es ebenfalls Meldungen.
apt.sh
#!/bin/bash /usr/bin/php /opt/skripte/nagios/nps.php -h myHost -s UPDATE -c "/usr/lib/nagios/plugins/check_apt"
log.sh
#!/bin/bash /usr/bin/php /opt/skripte/nagios/nps.php -h myHost -s LOG -c "/usr/lib/nagios/plugins/check_file -w 300 -c 900 -f /var/log/myLog-$(date +%Y%m).log"
http.sh
#!/bin/bash /usr/bin/php /opt/skripte/nagios/nps.php -h myHost -s HTTP -c "/usr/lib/nagios/plugins/check_http -H 1.2.3.4 -u http://www.example.net/my/page.html -e \"HTTP/1.1 200\" -s \"foobar \" -w 10 -c 20"
All diese Skripte rufe ich in den von mir gewuenschten Intervallen mit cron auf. Dafuer habe ich mir die Datei /etc/cron.d/nagios-passive angelegt:
# # Regular cron jobs for the nagios passive checks # 1 8,16 * * * user /opt/skripte/nagios/apt.sh 1,15,30,45 * * * * user /opt/skripte/nagios/log.sh 1,15,30,45 * * * * user /opt/skripte/nagios/http.sh
Zu guter letzt natuerlich das NagiosProxySender Skript (nps.php):
<?php /*** * Name: Nagios Proxy Sender * * Description: This script sends the output of a Nagios plugin through * a webproxy to the Nagios server using the cmd.cgi. * * Parameter: -h: Host name specified in Nagios that you want to update * -s: Service name of the host that you want to update * -c: Nagios plugin that you would like to execute with all * parameters * * * Usage: php nps.php -h myHost -s SERVICE -c "/usr/lib/nagios/plugins/check_dummy 0 foo" * * * Changelog: 2012-02-02 - initial Release // Jan Toenjes <jan.toenjes@intranda.com> * ***/ /*** * Please define your settings in this section ***/ $baseurl = 'http://www.example.net/nagios/cgi-bin/cmd.cgi'; // set url to nagios cmd.cgi script $http_username = 'username'; // set username for http authentication $http_password = 'password'; // set password for http authentication $proxy_host = 'webproxy'; // set proxy hostname or ip address here $proxy_port = '8080'; // set proxy port here $verbose = 0; // set to 1 if you want some output /*** * Get commands passed as arguments to this script and give error message * if something seems to be wrong... ***/ $options = getopt("h:s:c:"); if (!is_array($options) ) { print "There was a problem reading in the options.\n\n"; exit(1); } if (count($options) != "3") { print "You need to specify the following parameters: \n -h: Host name specified in Nagios that you want to update -s: Service name of the host that you want to update -c: Nagios plugin that you would like to execute \n\n"; exit(2); } if ($verbose == 1) { print_r($options); } $host = trim($options['h']); $service = trim($options['s']); $check = trim($options['c']); /*** * Perform actual Nagios check and give error message * if the return code is not a valid Nagios return code ***/ exec("$check 2>&1", $output, $returnCode); if ($returnCode != "0" && $returnCode != "1" && $returnCode !="2" && $returnCode != "3") { print "There was a problem running the Nagios check. Please check: Output: " . $output[0] . " Return Code: $returnCode\n\n"; exit(3); } $plugin_state = $returnCode; $plugin_output = urlencode($output[0]); if ($verbose == 1) { print "plugin_state = $returnCode \n"; print "plugin_output = $output[0] \n"; } /*** * Create GET URL to pass the information to Nagios ***/ $url = $baseurl . "?cmd_typ=30&cmd_mod=2&host=$host&service=$service&plugin_state=$plugin_state&plugin_output=$plugin_output&btnSubmit=Commit"; /*** * Trigger the GET URL using the provided proxy and HTTP Authentification information ***/ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0); curl_setopt($ch, CURLOPT_PROXY, "$proxy_host:$proxy_port"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, $http_username . ":" . $http_password); $curl_output = curl_exec ($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); /*** * Success and error handling ***/ if ($http_status == "200") { print "Success: The output was sent to Nagios successfully!\n\n"; } elseif ($http_status == "0") { print "Error: Nothing was sent to the Nagios server. Please check your proxy settings.\n\n"; exit(4); } else { print "Error: HTTP-Code $http_status received. Please check the given information.\n\n"; if ($verbose == 1 ) { print_r($curl_output); } exit(5); } ?>
Ssh unter WebOS einrichten ist realtiv einfach. Openssh aus optware installieren, via WebOSQuickInstall auf das Touchpad connecten und dann je nach belieben eine der Loesungen waehlen. Ich habe es ueber "Enabling_non-root_Password_logins_via_SSH_using_the_command_line" eingerichtet. Ein eigener User mit Passwort ist fuer mich die einfachste Loesung.
/opt/sbin/sshd -D -p 22
1. Oeffnen oder erstellen:
~/.mozilla/firefox/MYPROFILE.default/chrome/userChrome.css
2. Folgenden Inhalt reinkopieren:
#echofon-ad-unit { display: none !important; }
3. Firefox neustarten
Den Tip hier habe ich von da. An dieser Stelle auch noch einmal der Hinweis auf das verschieben der Sidebar auf die rechte Seite.
Zeigt ps aux nur user IDs anstatt der User, liegt es daran, dass der Username mehr als 8 Zeichen hat.
Hatte grad mal wieder das Problem, dass ich in vim eine Textdatei geoeffnet hatte, die voll von ^M war... In der Vim Tips Wiki steht hier was dazu, damit man nicht soviel lesen muss:
:%s/^M/\r/g
Nicht c&p machen davon, sondern das ^M mit Strg+v und Strg+m eingeben
Befehl:
find /path/to/folder -type l | (while read broken; do test -e "$broken" || ls -ld "$broken"; done)
Uebersetzung:
Suche mir alle Dateien vom Typ "Link" im Verzeichnis /path/to/folder inkl. allen Unterverzeichnissen und gib mir den kompletten Pfad zu den Links aus. Die Ausgabe wird in eine WHILE-Schleife gepipt die diese zeilenweise einliest. Fuer jede Zeile wird einmal getestet ob die Datei existiert. Wenn die Datei existiert isses dufte, wenn nicht gib den defekten Link aus.
Ich bin gestern Abend mit dem Blog auf meinen neuen vServer bei www.netcup.de umgezogen. Alles in allem muss ich erstmal die reibungslose Abwicklung loben. Ich habe nach dem Klick auf den Bestellbutton, gleich das Bankeinzugsformular ausgedruckt und war grad am ausfüllen, als mein Handy klingelte und eine Mitarbeiterin von netcup mich zur Verifizierung der Bestellung nach einigen Daten fragte… Immer wieder geil wenn jemand meine Mailadresse vorliest
… blog@ver-PAUSE-friemelt-???.com
Ne halbe Stunde später hatte ich meine Zugangsdaten und konnte loslegen. MySQL, Nginx und PHP sind schnell installiert. WordPress Verzeichnis auf dem alten Server eingepackt, nen mysqldump angeschmissen, alles auf den neuen Server geschubst, Host-Records angepasst und hier sind wir nun.
Mal gucken wie es sich entwickelt. Der erste Eindruck stimmt jedenfalls… Falls ihr hier irgendwo Fehler findet, lasst mir bitte einen Kommentar da.
Ähnliche Verfriemelungen:
$Kunde hat wohl einen seiner Funkwerk Router auf Werkseinstellungen zurückgesetzt, neue Firmware eingespielt oder sonstwas getan und wollte danach den Router wieder in Betrieb nehmen. Hatte eigentlich auch alles richtig gemacht, dennoch wollte das Biest einfach keinen IPSec Tunnel aufbauen. Also via SSH auf den Router geguckt und erstmal ein “debug ipsec” angeworfen:
DEBUG/IPSEC: P1: peer 1 (xxx.xxxxxxxx.xx) sa 0 (-): License limit (0) reached: resetting
Ok… Keine IPSec Lizenz mehr frei… 5 Lizenzen gehören aber per default dazu und nur ein Tunnel wurde konfiguriert.
Nun, denn mal das setup Menü aufgerufen und unter Lizenzen nachgeschaut. Hier herrschte gähnende Leere. Keine einzige Lizenz vorhanden. Die müssen also beim Reset ebenfalls gelöscht worden sein. Es fiel dann noch auf, dass in dem CLI Menü nicht einmal der Menüpunkt IPSec auftaucht… Im Webinterface allerdings schon, also war schonmal klar, worüber der Tunnel erstellt wurde
Die Default Lizenzen können bei den Bintec/Funkwerk Routern dank “default easy licensing” einfach wiederhergestellt werden. Man geht im Licenses Menü auf Add und lässt alles so wie es ist, bzw im “Mask” Feld, den Wert 65535, bestätigt mit “Save” und schon klappts auch wieder mit dem Peer.
Keine Ahnung ob es ein Bug in der Firmware ist/war oder ein Anwenderfehler… Jedenfalls sollte man nicht davor zurückschrecken, auch mal ins CLI zu schauen, dort ist man oft näher am Geschehen und die Fehlersuche lässt sich so um einiges verkürzen.
No related posts.
Kommt man in die Situation, dass man raus finden will, was man denn nun genau fuer Mysql Kommandos in den letzten Tagen so ausgefuehrt hat, helfen die binlog Dateien in /var/log/mysql/.
mysqlbinlog mysql-bin.000001
Vorausgesetzt man nutzt log_bin und STATEMENT als logging Format in der my.cnf . Vorher aber den Zeitstempel der Logdateien anschauen, um die Datensuche etwas einzugrenzen. Nutzt man row-based als Replikationsvefahren hat man keine Logdateien zum ueberpruefen. Die Frage ob man nun row-based oder statement-based als Verfahren nutzt ist eine andere. Beide Verfahren, row- und statement-based, haben Ihre Vor- und Nachteile. Man kommt also nicht drumherum sich damit etwas ausgiebiger zu beschaeftigen.
Links zum Thema row-based Replkation:
http://dev.mysql.com/doc/refman/5.1/de/replication-row-based.html
http://dev.mysql.com/doc/refman/5.1/en/replication-sbr-rbr.html
http://albertech.net/2011/10/upgrading-debian-lenny-to-squeeze-with-mysql-for-row-based-replication/
http://www.ovaistariq.net/528/statement-based-vs-row-based-replication/
http://www.mysqlperformanceblog.com/2010/05/06/debugging-problems-with-row-based-replication/
Ich mag die gnome-shell nicht und daher Ubuntu 11.10 auch nicht besonders. Aber tatsaechlich laeuft mein billig gekaufter DVB-T Stick unter 11.10. Natuerlich nicht ohne die benoetigten Module kompiliert zu haben. Das duerfte aber auch fuer Linuxanfaenger kein Problem sein.
http://linuxtv.org/wiki/index.php/MSI_DigiVox_mini_II_V3.0
https://github.com/ambrosa/DVB-Realtek-RTL2832U-2.2.2-10tuner-mod_kernel-3.0.0
Wenn man dann bei Kaffeine noch folgende Meldung bekommt:
"kaffeine cannot find demux plugin for MRL"
sollte man
apt-get install libxine1-all-plugins
eingeben und Kaffeeine neu starten.
<object height="383" style="width:611px;height:383px;" width="611"><embed allowfullscreen="true" allowscriptaccess="always" height="383" src="http://www.myvideo.de/movie/5008118" type="application/x-shockwave-flash" width="611"></embed><param name="movie" value="http://www.myvideo.de/movie/5008118"/><param name="AllowFullscreen" value="true"/><param name="AllowScriptAccess" value="always"/></object>
Northern Lite featuring Chapeau Claque -- Enemy - MyVideo
Dstat ist quasi Zusammenfassung der Funktionen von vmstat, iostat, netstat, ifstat und noch etwas mehr. Ueber dstat --list kann man sich eine Liste aller Plugins anzeigen lassen. Ideal um sich aufzeigen zu lassen, welcher Prozess den ungewoehnlich viele Ressourcen verbraucht und welche es sind. Damit man eine nutzbare Anzeige bekommt, muss man die Optionen dementsprechend anpassen. Die Moeglichkeiten sind sehr vielseitig, z.B. dstat -cn --top-cpu -d --load --time. Zudem bietet dstat die Moeglichkeit, die Daten direkt in eine CSV Datei zu schreiben. Hat man z. B. zu ungastlichen Zeiten Auffaelligkeiten auf Maschinen, kann dstat eventuell helfen die Ursache einzugrenzen. Dstat erinnert an nmon, ist aber aus meiner Sicht etwas uebersichtlicher und gezielter auf Prozesse ausgelegt.
Wer sein Telefon dem Nachwuchs zum spielen überlässt sollte sich nicht wundern, wenn hohe iTunes Rechnungen eintrudeln. Gerade bei Spielen ist es eine gängige Praxis, In-App-Käufe anzubieten um den Spielvortschritt zu beschleunigen. Hinterlistig ist allerdings dieser Passus:
Hinweis: Sie werden bei jedem getätigten In-App-Kauf aufgefordert, den Kauf durch Tippen auf “Kaufen” zu bestätigen. Wenn Ihr letzter Kauf oder Ihre letzte Anmeldung beim iTunes Store weniger als 15 Minuten zurückliegt, müssen Sie Ihr Account-Kennwort nicht noch einmal eingeben.
Dieses Verhalten lässt sich aber wie folgt Abstellen:
In den iOS Einstellungen unter Allgemein -> Einschränkungen falls nocht nicht geschehen, einen 4-Stelligen Einschränkungscode vergeben.
Die Einschränkungen aktivieren.
In-App-Käufe sowie die 15 Minuten können an dieser Stelle deaktiviert werden.
Ähnliche Verfriemelungen:
Treu dem Motto "Was du selbst hosten kannst, hoste selbst" habe ich vor einigen Monaten einen eigenen pastebin Dienst aufgesetzt. Als Software kommt Sticky Notes zum Einsatz. Ich hatte mir damals noch 1-2 andere Loesungen angeschaut, die waren aber vergleichsweise bescheiden. Unter paste.exdc.net kann man sich das mal anschauen. Fuer die Firma eventuell auch interessant, daher bin ich wieder drauf gekommen. Sollte jemand eine andere Software bevorzugen, immer her damit.
Ach ja, ich habe die Neujahrsgruesse vergessen:
Erst einmal möchte ich allen ein frohes neues Jahr wünschen und denen danken, die mich nach fast nem halben Jahr Blogabstinenz noch nicht aus ihrem Feedreader entfernt haben. Ich gelobe Besserung und versuche wieder regelmäßiger zu friemeln. Nun aber back to topic.
Ich arbeite grob geschätzt seit 8 bis 9 Jahren mit PuTTY und ich in dieser Zeit gab es keinen Terminal Emulator, der PuTTY das Wasser reichen konnte. Trotz allem habe ich außer der “Lines of scrollback in the window” nie wirklich etwas konfiguriert. Es funktionierte einfach immer alles so, wie sollte und ich hatte nie etwas daran auszusetzen. Dachte ich, bis ich neulich über die Option “Disable application keypad mode” gestolpert bin.
Wer wie ich Zahlen, IPs etc. mit dem Nummernblock tippt und z.B. die /etc/hosts anpasst, dem wird aufgefallen sein, dass VIM komisch auf die Eingaben reagiert:
Scheint daran zu liegen, dass PuTTY im Application keypad mode Escape-Sequenzen mitsendet und dies VIM durcheinander bringt. Der Haken in der oben gezeigten Checkbox wirkt hier Wunder.
First world problems.
No related posts.
Die Zeiten kleiner Festplatten ist schon lange vorbei, schon vor einiger Zeit schrieb ich darueber, aber finde es nicht so recht im eigenen Blog wieder, deswegen nochmal ein eigener Post dazu. Wichtig ist, dass man mit parted und nicht mit fdisk arbeitet, weil man GPT benoetigt und fdisk das nich kann. Deswegen erstmal parted installieren wenn es noch nicht geschehen ist:
root@desktop:~# aptitude install parted
und dann die Partition anlegen:
root@desktop:~# parted /dev/vda GNU Parted 2.2 Using /dev/vda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt Warning: The existing disk label on /dev/vda will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? yes (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 5369GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags (parted) unit TB (parted) mkpart primary 0.00TB 5.37TB (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 5.37TB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 0.00TB 5.37TB 5.37TB ext4 primary (parted) quit Information: You may need to update /etc/fstab. root@desktop:~#
zum Schluss Dateisystem erzeugen und fstab anpassen...
user@desktop:~$ sudo su root@desktop:~$ cd /usr/lib/jvm/ root@desktop:~$ mv java-6-sun java-6-sun-old root@desktop:~$ chmod +x jre-6u30-linux-i586.bin root@desktop:~$ ./jre-6u30-linux-i586.bin root@desktop:~$ rm jre-6u30-linux-i586.bin root@desktop:~$ mv jre1.6.0_30/ java-6-sun-1.6.0.30 root@desktop:~$ ln -sf java-6-sun-1.6.0.30/ java-6-sun root@desktop:~$ ln -s /usr/lib/jvm/java-6-sun/lib/i386/libnpjp2.so /etc/alternatives/mozilla-javaplugin.so root@desktop:~$ ln -sf /etc/alternatives/mozilla-javaplugin.so /usr/lib/mozilla/plugins/libjavaplugin.so
Mit Google lassen sich sehr einfach Formulare erstellen. Informationen findet man in der Google Hilfe. Fuer Benachrichtigungen muss man im Formular -> Tools -> Benachrichtigungsregeln anpassen. Das mit den Benachrichtigungen ist nicht optimal, aber wer einfach mal ein Formular braucht und dies unklompliziert erstellen und z.B. in seine Webseite einbauen will, sollte sich das mal anschauen.
<iframe frameborder="0" height="400" marginheight="0" marginwidth="0" src="https://docs.google.com/spreadsheet/embeddedform?formkey=dEpsZjMweW1PdjFmbXRaWHNxRzhiLWc6MQ" width="760">Wird geladen...</iframe>
Unter linuxundich macht Christoph ein Weihnachtsgewinnspiel . Informationen dazu findet man unter http://linuxundich.de/de/allgemein/die-grose-linux-und-ich-weihnachtsverlosung-2011/.
Alle Kinder moegen rsync. Wer es noch etwas mehr moegen will, sollte die Option -b --backup-dir= nutzen.
rsync -avh --delete --progress --stats -b --backup-dir=/wtf/is/my/backup/ quelle/ zielserver:/ziel/
Dadurch werden Daten, welche durch neue ersetzt bzw. deleted werden sollen , vorher im backup Ordner abgelegt. Der Backup Ordner, inklusive Pfad, wird dabei automatisch angelegt, bietet also genug Spielraum fuer date&co.
New version of the plugin. Quite some fixes and changes. Thanks to Peter Glas for contacting me and walking through the issues. You can find the updated version of the script here: check_readynas
user@desktop:~$ VAR=foobar user@desktop:~$ echo $VAR foobar user@desktop:~$ echo ${VAR: -2} ar
Siehe auch:
Da ist er der Missing Link zwischen Kartenprojektionen und Psycho-Tests aus Zeitschriften. Dank einem der letzten xkcd Comics ist es nun für jeden, der des englischen mächtig ist, möglich anhand seiner Lieblings Kartenprojektion Rückschlüsse auf die eigene Person zu ziehen.
Ich denke ich bin irgendwo zwischen der Winkel-Tripel- und der Waterman-Butterfly-Projektion. Aber auch die Goode-Homolosine-Projektion hat was. Ist natürlich schlecht sich bei einem solchen Psycho-Test nicht entscheiden zu können, zeugt bestimmt von einer leichten Schizophrenie.
Comic und alt-Text sind von http://xkcd.com/und stehen unter einer Creative Commons Lizenz (CC BY-NC 2.5)
Die DB fuer den Blog von MyISAM auf InnoDB umgestellt (alter table tablename ENGINE=innodb;) Mal abwarten ob Probleme auftauchen.
Man muss sich darueber im klaren sein, dass sich durch die Umstellung einiges and der Dateistruktur aendert. Mysql legt die komeplette Datenbank nicht mehr in /var/lib/myql/datenbank ab, sondern splittet sie auf.
Ein einfaches kopieren der Datenbankdateien auf eine andere Maschine, ohne den Weg ueber einen Dump zu gehen, funktioniert dann nicht mehr. Wer das haben will muss
innodb_file_per_table=1
in seine /etc/mysql/my.cnf in die [mysqld] Sektion eintragen und erneut
alter table tablename ENGINE=innodb;
fuer die jeweiligen Tables ausfuehren. Ich muss zu geben, ich habe wenig Ahnung von Mysql und alle Tips, die ich dazu geben, sollten mit Vorbehalt uebernommen werden.
Links:
http://dev.mysql.com/doc/refman/5.1/en/innodb-multiple-tablespaces.html
http://highervisibilitywebsites.com/convert-your-mysql-database-myisam-innodb-and-get-ready-drupal-7-same-time
http://forums.cpanel.net/f43/innodb_file_per_table-converting-per-table-data-innodb-167942.html
Wer so was
2011-11-08 13:22|0|0|DB Error: insufficient permissions QUERY : DELETE FROM centreon_acl WHERE group_id NOT IN (SELECT DISTINCT acl_group_id FROM centreon.acl_groups WHERE acl_group_activate = '1')
in /usr/local/centreon/log/sql-error.log stehen hat sollte einfach mal dem ndouser die noetigen Rechte an der centreon DB geben. Laut Centreonforum sollte SELECT fuer den Table acl_groups reichen. Ich habe den User einfach kompletten Zugriff auf die DB gegeben und das Problem scheint behoben zu sein, jedenfalls erscheinen keine Errormeldungen mehr im Log.