SSH-Login ohne Passwort

Ziel ist das (sichere) Anmelden per SSH von Host A (Benutzer a) an Host B (Benutzer b), allerdings ohne Passwort. Zuerst den SSH-Schlüssel erstellen (auf Rechner A):

a@A: $ ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"
a@A: $ ssh-add -l

Sollte auf Host B noch kein Verzeichnis ~/.ssh vorhanden sein, dies erstellen:

a@A: $ ssh b@B mkdir .ssh

Den gerade erstellten öffentlichen Schlüssel nach Host B kopieren:

a@A: $ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'

Nun sollte eine Anmeldung ohne Passwort möglich sein:

a@A: $ ssh b@B

Weiterführende Links:

DNS-Server in CentOS eintragen

Die Installation von CentOS ist abgeschlossen, jedoch kennt das System keine Domains – lediglich per IP sind Server ansprechbar. Nach kurzer Recherche wird klar: es ist kein DNS-Server eingetragen. Dies wird nun durch Editieren der Datei /etc/resolve.conf nachgeholt:

$ sudo nano /etc/resolv.conf

Normalerweise sollte „search localhost“ (oder ähnliches) bereits vorhanden sein. Darunter fügen wir „nameserver 10.0.0.1“ ein (natürlich die richtige IP *lol*), speichern und schließen die Datei. Schon funktioniert ein ping per Domain:

$ ping ibse-fehse.de

Eine englische Anleitung ist unter techicorner.com zu finden.

Powerline-Adapter von Devolo und TP-Link miteinander verbinden

Entgegen dem Artikel auf tutsi.de können die dlan-Powerline-Adapter von Devolo und TP-Link ohne Zurücksetzen des (hoffentlich vorhandenen) Passworts miteinander vorhanden werden.

Folgendes Szenario: zwei Adapter Devolo dlan 500 AVplus – mittlerweile sechs Jahre im Einsatz – davon brach der Router-nahe Adapter seit kurzem bei höherem und andauerndem Durchsatz die Verbindung ab. Da die Devolo-Adapter „nur“ eine 100MBit-Ethernet-Buchse haben und auch nicht mehr Stand der Technik sind, viel die Entscheidung auf zwei TP-Link TL-PA8010P (AV1200).

Zur Installation: Die Devolo Cockpit Software starten, zu sehen sind die zwei installierten Devolo-Adapter. Nun auf Hinzufügen klicken und im erscheinenden Popup das neue dlan-Gerät durch Eingabe der Security-ID hinzufügen.

Neues dlan-Gerät per Devolo Cockpit hinzufügenDie Security-ID der TP-Link-Adapter befindet sich auf deren Rückseite und nennt sich Password (Schema XXXX-XXXX-XXXX-XXXX). Den ersten Adapter in eine Wandsteckdose stecken und im Cockpit die Security-ID eingeben und mit OK bestätigen. Nach Klick auf Aktualisieren sollte dieser Adapter nun in der Grafik erscheinen. Mit allen anderen Adaptern ebenso verfahren.

Wenn alle Adapter hinzugefügt sind, kann bei Bedarf noch das Kennwort für alle Adapter geändert werden (Kennwort ändern im Cockpit).

Wie tutsi.de (s.o.) beschreibt, kann man danach auch mit der TP-Link-Software arbeiten. Diese ist in meinen Augen auch sinnvoller, da dort auch die Beschreibungen aller Adapter geändert werden können, was im Devolo Cockpit meiner Erfahrung nach nicht möglich ist.

Working with VIM

Vor diesem Editor habe ich mich lange Zeit gesträubt: VIM (vi improved). Die Einarbeitung ist doch etwas schwierig, da die Benutzung sehr auf Tastatur ausgelegt ist. Doch wenn die grundsätzlichen Befehle (und vor Allem die zugrundelegende Logik) bekannt ist, gelingt ein sehr flüssiges Arbeiten. Hauptsächlich arbeite ich ungern mit der Maus und gern im Terminal/Konsole. Folgend nun einige Tutorials bzw. nützliche Plugins.

VIM arbeitet in mehreren Modi, deren wichtigste sind: Normal-Modus (ansehen, ersetzen), Einfügemodus (bearbeiten), Visueller Modus (selektieren) Command-line-Modus (Angabe von Ex-Kommandos). Hinzugefügt werden kann Text grundsätzlich nur im Einfügemodus (zu Erreichen durch i [Bearbeiten vor dem Cursor] oder a [hinter dem Cursor] oder o [unter dem Cursor]).

Eines der wichtigsten Editierfunktionen ist sicherlich das Kopieren oder Verschieben von Text. Durch v (zeichenweise) oder V (zeilenweise) in den visuellen Modus wechseln und den gewünschten Text mit den Cursortasten markieren.

yy => copy current line
y => copy selected text („v“)
d => cut/delete selected text („v“)
p => paste

Weitere Infos dazu finden sich auf vim.wikia.com, tech-recipes.com oder alvinalexander.com.

Cut & Paste

Dateien aus der Betriebssystem-Zwischenablage lassen sich folgendermaßen einfügen:

  1. :set paste autoindent verhindern
  2. i in Einfüge-Modus wechseln
  3. rechte Maustaste -> Einfügen

Um Texte aus VIM in andere Programme zu kopieren, muss VIM mit der Option clipboard installiert/kompiliert sein. Dies ist standardmäßig nicht der Fall.

Darstellung von Dateien

VIM bietet auch die Möglichkeit, mehrere Dateien per Splitscreen parallel zu öffnen:

:vsp filename
cmd+w cmd+w => switch between files/viewports
cmd+w q => close active window/file

Plugins

Erst Plugins machen VIM zu einem richtig praktischen Editor, fast zu einer IDE. Anfangs hab ich es mit vim-pathogen probiert, später bin ich zu spf13 gewechselt. Ersteres baut auf Git-Submodule, zweiteres auf Vundle (und ist standardmäßig umfangreicher). Die meiner Meinung nach nützlichsten Plugins sind:

  • NERDTree (zur Darstellng eines Dateibaums)
  • Undotree
  • crtlp (Liste verwendeter Dateien)
  • Fugitive (Git-Integration)
  • Tagbar
  • Airline (eine bessere Statusleiste)
  • AutoClose
  • sessionman (Verwalten von Projekten/Sessions)

Eine passende Übersicht findet sich auf vim.wikia.com. Dort wird zum Beispiel auch netrw zur FTP-Integration genannt.

Installation von spf13:

$ curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh

Tagbar

Für Tagbar muss ctags auf dem System vorhanden/installiert sein. Hier eine kurze Installationsanleitung:

  1. download ctags (http://ctags.sourceforge.net/)
  2. install ctags:
$ cd path/to/ctags/
$ ./configure
$ make
$ sudo make install
$ make clean

3.  start vim & tagbar: `:TagbarOpen` or `:TagbarToggle`

Autovervollständigung

Prüfen auf Verfügbarkeit einer Autovervollständigung:

$ vim
:echo has("lua")
=> if_lua disabled -> neocomplete funktioniert nicht!
$ echo UnBundle \'neocomplete\' >> ~/.vimrc.bundles.local

Literatur

Passende und zu empfehlende (Einstiegs-)Literatur:
„vim 7 GE-PACKT“, Reinhard Wobst, mitp, ISBN 978-3-8266-1781-2

Cheatsheet

Hier ein kurzer Cheatsheet (spf13):

spf13 <leader> is: ,

<leader>e                         open NERDTree with current file
<leader>fc                        Find merge conflict markers
<leader>ff                         display all lines with keyword under cursor and ask which one to jump to
<leader>fu                        ctrl-p funky / list recently modified lines
<leader>gs                       :Gstatus         works like ‚git status‘
<leader>gd                      :Gdiff                works like ‚git diff‘
<leader>gc                      :Gcommit       works like ‚git commit‘
<leader>gl                       :Glog                 works like ‚git log‘
<leader>gp                      :Gpush            works like ‚git push‘
<leader>gr                       :Gedit              ??
<leader>gw                     :Gwrite           works like ‚git add %‘ if working-copy is active window
<leader>ge                      :Gread             works like ‚git co %‘ if working-copy is active window
<leader>ru                      list recently used files <silent> <D-r>
<leader>sc                      close session
<leader>sl                       list sessions
<leader>ss                      save session
<leader>tt                       toggle tagbar
<leader>u                        toggle undo-tree

<C-p>                                 list files

:vim /pattern/gj path
>                                          Suche in path nach pattern
>                                          Option `g`: alle Vorkommen
>                                          Option `j`: unterbinde Öffnen des ersten Suchergebnisses (der ersten Datei)
:cn                                      nächstes Suchergebnis (Datei) öffnen
:cp                                      vorheriges Suchergebnis (Datei) öffnen
:cw                                     Suchergebnisse auflisten

:!echo #                           prints current filename
:!CMD                              execute Shell-Command
:pwd                                  prints current directory

:let @/ = „“                     clear search-highlighting by clearing search-string
:noh                                  clear search-highlighting

 

Install Epson Perfection V10 for Ubuntu

Dieser Artikel beschreibt die Installation des Flachbettscanners Epson Perfection V10 an einem PC mit Ubuntu 14.04 per USB. SANE und abhängige Pakete sollten installiert und der Scanner eingeschaltet sein. Mit $ sudo sane-find-scanner sollte der Scanner gelistet werden – wenn nicht, werden obige Anforderungen nicht erfüllt.

Nun werden wir die Scan-Treiber und die Anwendung „Image Scan! for Linux“ herunterladen und installieren:
Unter download.ebz.epson.net finden wir die notwendigen Pakete (Data & Core). Für ein 64bit-System sind folgende Dateien nötig:

  • iscan-data_1.36.0-1_all.deb
  • iscan_2.30.1-1~usb0.1.ltdl7_amd64.deb
  • iscan-plugin-gt-s600_2.1.2-1_amd64.deb

Zur Installation wechsle ich ins Download-Verzeichnis und installiere in der Reihenfolge Data-Package, Core-Package, Plugin-Package:

$ cd ~/Downloads/
$ sudo apt-get install xsltproc
$ sudo dpkg --install iscan-data_1.36.0-1_all.deb
$ sudo dpkg -i iscan_2.30.1-1~usb0.1.ltdl7_amd64.deb
$ sudo dpkg -i iscan-plugin-gt-s600_2.1.2-1_amd64.deb

Das Paket xsltproc ist eine benötigte Abhängigkeit von iscan-data. Nun sollte bereits mit $ iscan die Epson-Anwendung starten und funktionieren. Mit der Option, den Drucker als Ausgabemedium zu verwenden, sind nun auch simple Kopien möglich.

Eine ähnliche Anleitung in englisch findet sich unter nybergh.net.

Nachtrag 20.11.2015: Die Links zu den Downloads haben sich geändert: support.epson.net bzw. die allgemeine Suche. Entsprechend zu den angepassten Treibern gibt es eine aktualisierte Installations-Anleitung.

WordPress auf anderen Server umziehen

In der Firma lief das interne Wiki auf einer WordPress-Installation auf einem älteren Mac. Dieser Rechner sollte ausgetauscht werden und WP musste somit umziehen (MAMP als Webserver bleibt).

    1. Datenbank komplett sichern (in diesem Fall tar-Archiv des MySQL-Verzeichnisses, da Datenbank-Server nicht starten konnte/wollte)
      1. $ cd /Applications/MAMP/db/mysql/
      2. $ tar -czpf wiki-db.tar.gz wp_wiki/
    2. Sicherung des kompletten WP-Verzeichnisses wp_wiki
      1. $ cd /Applications/MAMP/htdocs/
      2. $ tar -czpf wiki.tar.gz wp_wiki/
    3. Kopie auf neuem Server / Rechner aufspielen (tar-Archive übertragen und in jeweiligen Verzeichnissen ablegen)
      1. $ cd /Applications/MAMP/db/mysql/
      2. $ tar -xzf wiki-db.tar.gz => Verzeichnis wp_wiki wird erstellt, sollte vorher leer sein bzw. garnicht existieren
      3. $ rm wiki-db.tar.gz
      4. $ cd /Applications/MAMP/htdocs/
      5. $ tar -xzf wiki.tar.gz => Verzeichnis wp_wiki wird erstellt, sollte vorher leer sein bzw. garnicht existieren
      6. Datenbank anpassen
        1. ALTER DATABASE `wp_wiki` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
        2. UPDATE wp_option SET option_value = REPLACE(option_value, ‚http://<OLD-IP>:8888/wp_wiki‘, ‚http://<NEW-IP>:8888/wp_wiki‘) WHERE option_value LIKE ‚%http://<OLD-IP>:8888/wp_wiki%‘; /* home, siteurl, theme_mods_twentyfourteen */
        3. UPDATE wp_posts SET guid = REPLACE(guid, ‚http://<OLD-IP>:8888/wp_wiki‘, ‚http://<NEW-IP>:8888/wp_wiki‘) WHERE guid LIKE ‚http://<OLD-IP>:8888/wp_wiki%‘;
        4. UPDATE wp_posts SET post_content = REPLACE(post_content, ‚http://<OLD-IP>:8888/wp_wiki‘, ‚http://<NEW-IP>:8888/wp_wiki‘) WHERE post_content LIKE ‚%http://<OLD-IP>:8888/wp_wiki%‘;

Sollte die Anmeldung wegen des fehlenden Passwortes nicht gelingen, kann dieses natürlich auch zurückgesetzt werden. Zwar gibt es die Möglichkeit per „Passwort vergessen“-Funktion, hier dennoch die Variante per SQL:

 UPDATE wp_users SET user_pass = MD5('geheim') WHERE user_login = 'admin';

Während der nächsten (erfolgreichen) Anmeldung wird das Passwort dann durch eine stärkere Verschlüsselung ersetzt (MD5 gilt als nicht mehr sicher, die Ersetzung erfolgt durch einen WordPress-eigenen Algorithmus).

Weitere Informationen gibt es auf blogs-optimieren.de.

Update Mac OS X auf 10.10 Yosemite

OS X 10.10 Yosemite gibt es nun bereits seit Oktober 2014, aber bisher gab es bei mir noch keinen Aktualisierungsbedarf. Doch nicht alle Software lässt sich unter OS X 10.7 installieren, so z.B. die aktuellen Versionen von XCode (6.3.2) oder „Android Studio“ (1.2.1). Somit musste das Update doch angegangen werden.

Das Herunterladen von Yosemite per App Store lief gut an, zwar mussten 5,6 GB an Daten geladen werden, doch was soll’s. Danach Installation gestartet und eine halbe Stunde später war es geschafft. Die Anmeldung verlief problemlos und die meisten Applikationen hatten die OS-Aktualisierung auch überstanden. Soweit alles prima 😉

Kleinere Anpassungen, z.B. der Monitore, mussten noch durchgeführt werden, aber sonst lief OS X 10.10 doch recht flüssig.

Beim Öffnen einer PDF-Datei dann allerdings ein erster Schreck: „Um „Acrobat“ öffnen zu können, muss die alte Java SE 6-Runtime-Version installiert werden.“. Außer dieser Meldung nur ein Verweis zu „weiteren Informationen“, einer Support-Website von Apple. Auf dieser war allerdings neben Text, welcher das Problem beschrieb, nichts zu lesen. Dieses Verhalten wird auch im Macuser-Forum beschrieben. Dort findet sich dann auch der richtige Link, unter welchem die geforderte Java-Version zu finden ist. Nach einer erfolgten Installation funktioniert Acrobat Reader 10 wieder.

Edit 17.06.2015:
Doch auch an anderen Stellen scheint die Haptik nicht so recht gelungen: Mal verschiebt sich das Dock aus unerklärlichen Gründen spontan auf einen anderen Monitor (und lässt sich natürlich nicht zurück bewegen), der Terminal-Editor Nano kommt per Standardeinstellung plötzlich nicht mehr mit dem Nummernblock klar (ein Alias mit der Option -K behebt das Problem), der Finder scheint desöfteren Schwierigkeiten mit dem Netzwerk (bzw. Windows-Servern und deren Freigaben) zu haben (kann keine Verbindung herstellen), neue Programmfenster öffnen sich unwillkürlich auf verschiedenen Monitoren. Alles Dinge, die unter OS X 10.7 unproblematisch und wesentlich benutzerfreundlicher waren.

MAMP aktualisieren

MAMP (My Apache – MySQL – PHP) ist eine lokale Serverumgebung, nicht nur für Apples Mac-Betriebssystem OS X. Zum Aktualisieren dieser Software, bspw. um eine aktuellere PHP-Version zu nutzen, einfach zur Projekt-Website navigieren und dort das entsprechende Paket herunterladen. Zur Überprüfung der Authentizität (aus Sicherheitsgründen) kann die SHA-1-Prüfsumme verglichen werden:

$ openssl sha1 /Users/<USER>/Downloads/MAMP_MAMP_PRO_3.2.1.pkg

Die erhaltene Zeichenfolge sollte mit der auf der Website genannten übereinstimmen.

Anschließend die pkg-Datei ausführen und den Wizard durchlaufen. Eine bestehende MAMP-Installation wird im Laufe der Installation komplett übernommen, d.h. dass alle Projekte (htdocs, db) und Einstellungen in das neue MAMP-Verzeichnis kopiert werden. „Neues Verzeichnis“ deswegen, weil das MAMP-Update eigentlich eine Installation plus die Migration aller enthaltenen Projekte vom bestehenden Server enthält:

  1. Umbenennen des bestehenden MAMP-Verzeichnisses (in der Form MAMP_2015-06-16_08-26-14), sodass eine vollständige Sicherung verbleibt
  2. Installation neue MAMP-Version
  3. Migration (Kopie) des alten htdocs-Verzeichnisses

Das Update ist dann bereits durch. Nun sollte nach Ausführen der Datei /Applications/MAMP/MAMP.app der Webserver starten. Das App-Icon nun noch im Dock belassen, et voila.

Grund für das MAMP-Update bei mir war die Aktualisierung von OS X 10.7 auf 10.10 . Nach dem OS-Update startete Apache nicht mehr (MAMP 3.0.5). Die Versionshistorie von MAMP 3.2.1 deutete bereits auf dieses Verhalten hin: „Problem mit httpd.conf behoben, welches den Start von Apache verhindert hat“.

Anzumerken ist noch, dass die Konfigurations-Dateien des Apache (MAMP/conf/apache/) nicht übernommen werden. Nach Angleich der Dateien, sprich Übernahme der Aliase (Directory-Direktiven) und z.B. Aktivierung der httpd-vhosts.conf ist das alte Verhalten aber wieder hergestellt.

App-Dev mit Cordova

Aufgabe ist, eine App für Smartphone bzw. Tablet zu erstellen. Erste Hürde ist die Entscheidung für eine native Anwendung oder für eine Webapp. Der Unterschied zwischen diesen beiden Typen ist, dass eine native App speziell für ein Betriebssystem entwickelt wird (in der entsprechenden Programmiersprache: Objective-C für iOS, C/C++ für Android), eine Webapp aber in den bekannten Internettechnologien HTML5, CSS, Javascript. Letztere muss am Ende lediglich für das entsprechende Endgerät gepackt werden (wofür Programme wie PhoneGap eingesetzt werden können), kann aber auch ohne Anfassen in jedem HTML5-fähigen Browser benützt werden.

Die Entscheidung ist letzlich pro Webapp gefallen, auf Grund des geringeren Entwicklungsaufwandes für eine möglichst breite Palette an Endgeräten.

Grundlage für die hier durchgeführten Schritte bildet der Leitfaden auf cordova.apache.org. Apache Cordova ist ein Open-Source-mobile-Entwicklung-Framework.

$ sudo npm install -g cordova
$ cd <path>/
$ cordova create -d app de.ibsefehse.app myApp
    -d                  => verbose (Detail-Informationen zeigen)
    app                 => Verzeichnis (wird neu erstellt und sollte noch nicht vorhanden sein)
    de.ibsefehse.app    => project-identifier
    myApp               => Applications display title
$ cd app/
$ cordova platform ls
$ cordova platform add ios

An dieser Stelle hakt es zum ersten Mal: die entsprechenden SDK (Software Development Kit) müssen natürlich auf der lokalen Maschine vorhanden und installiert sein. Also geht’s auf die Suche …

Da der MAC noch unter OS X 10.7 läuft, können XCode (die SDK für iOS benötigt mindestens OS X 10.10) bzw. Android Studio (benötigt mindestens OS X 10.8.5) nicht installiert werden. Vielleicht funktioniert ja die alleinige Installation der Android-SDK-Tools (ohne IDE):

  1. Installing the Android SDK
  2. Stand-Alone SDK Tools
  3. zip-Datei entpacken und irgendwo ins home-Directory verschieben, z.B. ~/Development/android-sdk/
$ cd ~/Development/android-sdk/tools/
$ ./android update sdk --no-ui
    => mehrere Lizenzen abnicken und warten
$ cd <path>/app/
$ cordova platform add android

Die umzuwandelnde Website muss nun unter <path>/app/www/ vorhanden sein und wird danach mittels $ cordova prepare android an die jeweiligen Plattformen angepasst. Der Befehl $ cordova compile android schlägt unterdessen fehl, da ich die PATH-Variable noch nicht angepasst habe: android-sdk/platform-tools/ und android-sdk/tools/ müssen hinzugefügt werden (vgl. Post vom 10.06.2015). Doch auch danach stimmt die OS X-Version nicht und der Build-Prozess bricht ab.

Nach dem Update auf OS X 10.10 installiere ich Android Studio in voller Schönheit (IDE + SDK).

$ cordova build

Dabei wird Gradle heruntergeladen, eine Build-Umgebung, die das Erstellen und Ausführen von Android-Anwendungen per Kommandozeile erlaubt. Im Verlaufe des Build-Prozesses kommt es allerdings zum Fehler: „No installed build tool found. Please install the Android build tools version 19.1.0 or higher.“ Warum die vom Android-SDK mitgebrachten Build-Tools nicht eingebunden werden, bleibt schleierhaft.

Ein anderer Weg – Erstellen per Android-SDK:

$ cd website/
$ android create project --target 20 --name myApp --path /Applications/MAMP/htdocs/website/app/ --activity MyActivity --package de.ibsefehse.app
Die Angabe für --target erhält man durch "$ android list targets".

Nach dem Erstellen der apk-Datei (im Unterverzeichnis platforms/android/build/outputs/apk/) kann die App per $ adb install platforms/android/build/outputs/apk/myApp-debug.apk auf dem emulierten Device installiert und danach per $ cordova emulate android gestartet werden. Nach einem Neustart des Macs führt der Befehl „cordova build“ dann übrigens auch zum Erfolg 🙂

Letztenendes bleibt die Erkenntnis, dass nach erfolgter installation aller Abhängigkeiten (SDK, OS) das Erstellen einer Web-App kein allzugroßes Problem mehr darstellt. Mit einigen wenigen Terminal-Befehlen steht die Web-App als native App bereit:

$ cordova create myApp de.ibsefehse.app myApp
=> Quellcode im Unterverzeichnis www/ bearbeiten
$ cordova platform add android
$ cordova build
$ android avd => Device starten
$ cordova build android

Das Web und ich