<< Neuere Einträge

SSH-Login ohne Kennwort in 3 Schritten

2010-11-27

Schritt 1: Generierung des Schlüsselpaares

you@localhost:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/you/.ssh/id_rsa): 
Created directory '/home/you/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/you/.ssh/id_rsa.
Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is:
27:e7:1f:0c:99:7d:3b:86:cb:39:91:55:5b:0d:e5:20 you@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|            E ooo|
|             . o+|
|               .+|
|           +  .. |
|        S * .o.  |
|         = ooo . |
|          . +.+  |
|           o.= . |
|            =.   |
+-----------------+

Schritt 2: Erzeugung von ~/.ssh auf Remote Host (optional)

you@localhost:~$ ssh remote_user@remote.host 'mkdir -p .ssh'

Schritt 3: Öffentlichen Schlüssel publizieren

you@localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remote_user@remote.host 'cat >> .ssh/authorized_keys'

<3 Relax NG

2010-09-30

Mir gefällt an Relax NG, dass es wesentlich lesbarer ist als das schwergewichtigere W3C Schema XML – library.rnc:

default namespace = "http://meingold.de/schema/any/library"

start = element library {
   element book {
      element title { xsd:string },
      element author { xsd:string },
      element isbn { xsd:string { pattern='[0-9]{3}-[0-9]{10}' } },
      element quantity { xsd:positiveInteger  }
   }* 
}

Wenn man jedoch auf W3C Schema XML angewiesen ist, dann kann mit dem Kommandozeilen-Tool Trang ein Relax NG Schema in ein W3C XML Schema umgewandelt werden.

RNC -> XSD

trang library.rnc library.xsd

Das generierte W3C Schema sieht dann, wie folgt, aus – library.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
              elementFormDefault="qualified" 
              targetNamespace="http://meingold.de/schema/any/library" 
              xmlns:library="http://meingold.de/schema/any/library">
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="library:book"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="library:title"/>
        <xs:element ref="library:author"/>
        <xs:element ref="library:isbn"/>
        <xs:element ref="library:quantity"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="title" type="xs:string"/>
  <xs:element name="author" type="xs:string"/>
  <xs:element name="isbn">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0-9]{3}-[0-9]{10}"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="quantity" type="xs:positiveInteger"/>
</xs:schema>

Und um zu zeigen, dass das generierte Schema funktioniert, kann gegen das folgende XML im nächsten Schritt validiert werden – library.xml:

<?xml version="1.0" encoding="UTF-8"?>
<library xmlns="http://meingold.de/schema/any/library">
  <book>
    <title>Do Androids Dream of Electric Sheep?</title>
    <author>Philip K. Dick</author>
    <isbn>978-0575079939</isbn>
    <quantity>8</quantity>
  </book>
  <book>
    <title>Brave New World</title>
    <author>Aldous Huxley</author>
    <isbn>978-0099477464</isbn>
    <quantity>5</quantity>
  </book>
  <book>
    <title>Last Chance to See</title>
    <author>Douglas Adams</author>
    <isbn>978-0099536796</isbn>
    <quantity>3</quantity>
  </book>
</library>

Mit dem generierte XML Schema und dem Kommandozeilen-Tool xmllint kann das obige XML validiert werden:

xmllint --valid --schema library.xsd library.xml

Der umgekehrte Schritt, aus W3C XML Schema ein Relax NG Schema zu generieren, ist meines Wissens nicht möglich, da Relax NG nicht sämtliche Ausdrucksmöglichkeiten abbilden kann, die von XML Schema angeboten werden.


Primärschlüssel automatisch inkremetieren

2010-08-29

Unter Oracle Datenbanken sind für eine Tabelle mit automatisch inkrementiertem Primärschlüssel die Tabelle selbst, eine Sequenz und ein Trigger anzulegen:

create table foo (
       my_key number,
       bar nchar(255),
       primary key (my_key));

create sequence foo_seq 
       start with 1 
       increment by 1 
       nomaxvalue; 

create trigger foo_trigger
       before insert on foo
       for each row
       begin
         select foo_seq.nextval into :new.my_key from dual;
       end;
/

Bei einer MySQL Datenbank reicht hierzu das Schlüsselwort auto_increment in der Tabellen-Definition aus:

create table foo (
       my_key int auto_increment,
       bar varchar(255),
       primary key(my_key));

Welches der beiden Beispiele lässt sich schneller schreiben bzw. lesen? ;-)


Cygwin reparieren

2010-08-17

Alle Jubeljahre muss ich auf Cygwin beziehungsweise Cygwin/X zurückgreifen, um unter Windows unixoide Arbeiten verrichten zu können.

Das entsprechende Setup dazu musste ich heute leider des öfteren erneut anstoßen, da ich aufgrund von Netzwerk- oder Paket-Verfügbarkeitsproblemen verschiedene Server zur Installation verwenden musste (Uni-Bochum, Uni-Dresden, Uni-Esslingen und ein weiterer).

Nach der Installation erhielt ich bei der Ausführung einer Shell (innerhalb von Emacs) die folgende Fehlermeldung:

vfork: resource temporarily unavailable

Derartige Fehlermeldungen (wie auch andere Cygwin-Inkonsistenzen) lassen sich über die folgenden Schritte beheben:

  1. Alle Cygwin-Fenster schließen. Des Weiteren über den Task-Manager von Windows sicherstellen, dass keine weiteren Prozesse von Cygwin mehr aktiv sind (z.B. der fensterlose X-Server). Sämtliche Prozesse zu beenden ist unabdingbar, da sich nachfolgende Schritte ansonsten nicht ausführen lassen.
  2. Folgendes Programm starten:

    c:\cygwin\bin\ash
    
  3. In der gestarteten Shell folgendes Kommando ausführen:

    /bin/rebaseall
    
  4. Falls mit den o.g. Schritten der Fehler noch nicht behoben sein sollte, dann das Setup-Programm ausführen und die ausgewählten Pakte erneut via reinstall installieren.


Welches Notebook für Linux?

2010-06-28

Welches Notebook ist für Linux am besten geeignet? Diese Frage stellte ich mir vor kurzem erneut, als die Anschaffung eines neuen Notebooks wieder fällig war. Hierzu gibt es zwar im Netz jede Menge Seiten, wie z.B.

http://www.linux-laptop.net
http://www.tuxmobil.org

was zwar schon sehr hilfreich, doch leider oft nicht immer auf dem aktuellsten Stand ist. Insbesondere wenn man sich ein modernes Gerät anschaffen möchte. Wenn man sich für einen leichtgewichtiges Netbook umsieht und ein Fan von Ubuntu ist, dann ist natürlich die Ubuntu-Seite allererste Wahl:

https://wiki.ubuntu.com/HardwareSupport/Machines/Netbooks

Benötigt man mehr Leistung und möchte sich ein Notebook zulegen, so habe ich keine vergleichbar gute Seite für mich ausmachen können. Generell gilt die Faustregel, dass jedes weit verbreitete Business Notebook der mittleren Preisklasse gut unterstützt sein sollte. Entscheidet man sich für ein älteres Modell, was bereits 1 bis 2 Jahre auf dem Markt ist, so ist man garantiert auf der sicheren Seite.

Da ich mir ein neueres Gerät zulegen wollte, konnte ich mich nicht auf derartige Faustregeln einlassen. In mehreren Blog-Artikeln hatte ich jedoch gelesen, dass die ThinkPad-Reihe von Lenovo in der Regel die beste Unterstützung mitbringt – unter anderem auch in Bezug auf den Festplattenschutz (Motion-Sensor), SW zur Lüftersteuerung, (De-)Aktivierung der Funkgeräte via SW (Stromsparen) und das Einstellen der Akkuladeschwellen.

Aus diesem Grund legte ich mir ein Lenovo ThinkPad Edge 15 zu. Doch einer der ersten Meldungen, die ich nach dem Booten von Ubuntu 10.04 erhielt, war leider die folgende:

thinkpad_acpi: Not yet supported ThinkPad detected!

Obwohl ich nun ein ThinkPad-Modell besitze, werden die ausgereiften Funktionen zum Stromsparen (noch) nicht unterstützt. Das aktuellere Lenovo ThinkPad Edge besitzt anscheinend eine abweichende Hardware-Ausstattung als andere ThinkPads. Also Achtung, ThinkPad ist nicht gleich ThinkPad. Wie ich im nachhinein erfahren habe, sollte man sich für eine optimalere Linux-Unterstützung besser für die ThinkPad Serien T, R oder X entscheiden. Ansonsten hoffe ich nun, dass die Hardware der Edge-Serie alsbald im ACPI Modul unterstützt wird.


>> Ältere Einträge