Zum Hauptinhalt springen
Chris’ wirre Gedankenwelt

EuroPython 2014 - Tag 4

Gestartet bin ich heute mit dem Vortrag The Shogun Machine Learning Toolbox von Heiko Strathmann . Ein Framework zum finden von bekannten Strukturen in Daten. Ein Beispiel ist das Auffinden von HIV in beliebiger DNA. Die Software ist in C++ geschrieben, bietet aber mittels swig Bindings für allerhand Sprachen. Es ist also egal in welcher Sprache man entwickelt, die zugrunde liegenden Algorithmen arbeiten immer gleich schnell. Shogun ist nicht als verteiltes System ausgelegt, sondern darauf auf dem Desktop zu laufen.

In The Return of "The Return of Peer to Peer Computing" hat Nicholas Tollervey , den letztjährigen Vortrag von Holger Krekel aufgegriffen. Dabei verglich er Politik mit Prgrammieren und hat Ideen gegeben, was Entwickler der vollständigen Überwachung entgegensetzen können.

Naomi Ceder hat in ihrem Talk Farewell and Welcome Home: Python in Two Genders über ihre Transition gesprochen. Vor, während und nach dieser Zeit hat sie sich aktiv in der Python-Community beteiligt. Sie erzählte von ihren Erfahrungen auch außerhalb der Community und womit sie lernen musste umzugehen.

Aus den Lightning Talks ist mir die network address manupulation library netaddr hängen geblieben. Außerdem ein 13 jähriges Mädchen, die einen souveränen Beitrag dazu gemacht hat, wie sie versucht Mädchen zwischen 13 und 18 Jahren von 90% Konsumenten und 10% Produzenten zu 50/50 zu bringen. Das Video der Lighning Talks ist bereits online . Ab 12:00.

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

EuroPython 2014 - Tag 3

Heute habe ich einen gemischten Tag gemacht. Ein paar Vorträge zu Programmierthemen wie gevent, jedi oder SQLAlchemy, dazu DevOps- und Plattformvorträge.

Besonders gut gefallen hat mir der Vortrag DevOps Risk Mitigation: Test Driven Infrastructure von Schlomo Schapiro . Schlomo zeigt wie die Deploymentchain bei ImmobilienScout24 funktioniert, wie, und vor allem dass sie alles mögliche Testen. Die Tests sind mittlerweile so komplett, dass sie sich soweit darauf verlassen können, und Code automatisch in production schieben. Dabei werden an allen Stellen RPM-Pakete eingesetzt. Nicht nur für Applikationenen selbst, sondern auch zum Verteilen der Konfigurationen.

Der Talk An HTTP request's journey through a platform-as-a-service von Giles Thomas beschreibt tatsächlich wie die ankommende Anfrage das richtige Backend finden und ggf. überhaupt erst einen Start der Applikation triggert. Ebenfalls Interessant zu sehen.

Ein Einblick in die Entwicklung hinter Jedi hat der Talk Identifying Bugs Before Runtime With Jedi von Dave Halter gegeben. Jedi kann nicht nur als sehr gute Autovervollständigung verwendet werden, sondern auch als sehr viel besserer lint-Ersatz dienen. Ich werde Jedi in der Zukunft ausprobieren und sehen ob es mir bei der Entwicklung hilft.

Der Abend ist mit interessanten Menschen und Gesprächen beim Conference-Dinner und anschließender Party ausgeklungen. Ein großes Dankeschön an die Community, die dieses angenehme Umfeld geschaffen hat.

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

EuroPython 2014 - Tag 2

Heute habe ich mich hauptsächlich um OpenStack gekümmert. Zuerst im Trainig Making your first contribution to OpenStack von Julie Pichon.Es gab einen schnellen Überblick über die Services in OpenStack. Danach wurden alle für eine Contribution notwendigen Schritte erklärt. Außerdem wurden alle nötigen Accounts angelegt und miteinander verknüpft. Nach einem Einblick in das Bugtracking auf Launchpad wurden potentielle Tickets gesucht und Patches eingereicht.

Slides und Etherpad zum Traning.

Nach dem Trainig habe ich den Vortrag Marconi - OpenStack Queuing and Notification Service gehört, das eine Alternative zu Amazon SQS und Amazon SNS in sich vereinen soll. In der nächsten Version von OpenStack sollen die Core Services über Marconi sprechen. Da Marconi an Keystone angebunden ist, kann es bestimmt auch als Service für Kunden angeboten werden.

Zudem gab es noch einige interessante nicht-Vortrag-Gespräche zum Thema Virtualisierung, Orchestrierung und Packaging (Nix again ;)).

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

EuroPython 2014 - Tag 1

Da heute wenig Talks waren blieb viel Zeit für "Networking". Viele interessante Leute aus dem Umfeld von NixOS gesprochen, einige davon von RhodeCode . Kurzum haben die das Ziel reproduzierbar ein System mit allen benötigten Bibliotheken zu erstellen. Schöne Features sind die eingebauten atomaren Installationen und der eingebaute Rollback. Schlägt die Installation eines Paketes fehl, wird komplett zurück gerollt. Es wird kein kaputtes/pflegebedürftiges System hinterlassen. Auch wenn die Installation geklappt hat, kann vom Admin manuell zurückgerollt werden. Z.B. weil die neue Version einer Spezifischen Software Probleme verursacht. Nur die Dokumentation läßt noch arg zu wünschen übrig. Daran wird aber aktuell gearbeitet. NixOS ist absolut einen Test wert. Außerdem ging es natürlich auch um Cloud Platformen, OpenStack und Docker .

Heute Abend habe ich mein Notebook schon mal für das morgige Training Making your first contribution to OpenStack vorbereitet. Also eine VM mit DevStack ausgestattet. Freue mich schon :)

Alles in allem ein sehr schöner Tag. Eine angenehme Veranstaltung mit netten Menschen. Super Organisation des EP14- und BCC -Teams.

 

Update aus einem Lightning-Talks

https://packaging.python.org/en/latest/

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

calibre ebook library manager / calibredb

For managing my ebooks, I started to use calibre , and it turns out, calibre is a very flexible tool.

I am able to run it on my raspberry pi as a quite nice web app. Have a look at calibre-server . It is possible to "talk" to the library database with a command line interface called calibredb . With this, it is really easy to import/export/search stuff without using the usual GUI. callibredb allows you to create entirely new database, as well. If you are using tmpfs for /tmp and your memory is limited, set TMPDIR before you start.

$ export TMPDIR=/BIG_DISK/tmp

$ calibredb add -r /home/mpd/new_ebooks/ /BIG_DISK/calibre_library/

As another quite nice feature, calibre is able to convert from different formats to another. It is easily possible to convert a pdf to mobi - for example Sage A. Weils more than great thesis ceph - and read it on the kindle.

And there is a lot more. Give it a try :)

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

gvfs-mount -u und bash completion

Per gvfs eingehängte Devices oder Server-Verbindungen bequem per CLI aushängen. Da gvfs auf file://, sftp://, etc. basiert, darf der Doppelpunkt nicht als Worttrenner werdendet werden:

_gumount() {

        COMPREPLY=()
        local opts cur
        _get_comp_words_by_ref -n : cur
        opts=$(gvfs-mount -l -i | grep default_location | sed 's#.*default_location=\([^:]\+\):\(.*\)#\1\\:\2#')
        if [[ ! $opts ]] ; then
                return 1
        fi

        COMPREPLY=( $(compgen -W "$opts" -- "$cur") )
        __ltrim_colon_completions "$cur"
        return 0
}
complete -F _gumount gumount

gmount() {
        if (($# != 1)) ; then
                cat <<EOF
Give me one device or network resource.
gmount /dev/sdc1
gmount sftp://leierkasten.local/root
EOF
                return 1
        fi
        opts=()
        if [[ -b $1 ]] ; then
                opts+=("-d")
        fi

        gvfs-mount "${opts[@]}" "$1"
}

Siehe auch: http://stackoverflow.com/questions/10528695/how-to-reset-comp-wordbreaks-without-effecting-other-completion-script/12495480

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

polkit-Regel um Usern poweroff zu erlauben

Auf meinem Arch Linux mpd-Server wollte ich dem User mpd erlauben den Rechner herunter zu fahren. Die einfachste Variante ist es, den Benutzer mpd einfach zur Gruppe wheel hinzuzufügen. Diese wird auch in polkit als Admingruppe anerkannt. Nun wollte ich mpd aber nur erlauben herunter zu fahren und nicht gleich Zugriff auf alle Adminfunktionalität zu geben.

Dazu muss eine Datei /etc/polkit-1/rules.d/mpd.rules angelegt werden:

polkit.addRule(function(action, subject) {

    if (action.id == 'org.freedesktop.login1.power-off' &&
        subject.isInGroup('mpd')
    ) {
        return polkit.Result.YES;
    }
});

Ich habe hiermit gleich der Gruppe mpd Berechtigungen zum poweroff gegeben. Mit subject.user == 'mpd', hätte dies auf nur den einen Benutzer begrenzt werden können.

Was passiert hier?

Wenn eine Action mit der id 'org.freedesktop.login1.power-off' kommt und der Benutzer sich in der Gruppe mpd befindet, gibt die Funktion polkit.Result.YES zurück. Damit weiß das fragende Programm, dass es die gewünschte Aktion durchführen darf.

Das Resultat ist also, dass mpd nur herunterfahren, aber nicht z.B. reboot, suspend oder hibernate darf. Außerdem ist ein Herunterfahren nur erlaubt wenn es keine weiteren Sessions auf dem Rechner gibt. org.freedesktop.login1.power-off-multiple-sessions ist die Aktion, nach der bei mehr als einem angemeldeten Benutzer gefragt wird.

In jedem nicht explizit erlaubten Kommando (z.B. reboot) wird nach dem root-Passwort gefragt.

[mpd@server ~]$ reboot 

==== AUTHENTICATING FOR org.freedesktop.login1.reboot ===
Authentication is required for rebooting the system.
Authenticating as: root
Password:

Ist der User root angemeldet wird poweroff unüberwindbar abgelehnt

[mpd@server ~]$ poweroff

User root is logged in on sshd.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.

Das ganze sieht auf den ersten Blick wie JavaScript aus, stellt sich raus... ist JavaScript:

$ man polkit

Rules files are written in the JavaScript[7] programming
language and interface with polkitd through the global polkit object
(of type Polkit).
Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

Python Links

Sehr ohne Context, ein paar Python Links, die ich in den letzten Tagen und Wochen interessant fand.

http://www.jeffknupp.com/blog/2014/06/18/improve-your-python-python-classes-and-object-oriented-programming/

pypy3 mit python 3.2.5 rausgekommen. http://morepypy.blogspot.de/2014/06/pypy3-231-fulcrum.html

Hilfsbibliothek um python 2 & 3 im selben Code zu unterstützen: https://pypi.python.org/pypi/six

Würde Python 2.8 bei der Portiereung auf 3 helfen? https://regebro.wordpress.com/2014/06/03/would-a-python-2-8-help-you-port-to-python-3/

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

ssh jump host without nc (netcat)

[UPDATE 23. Jun 2019]

I just realized... starting from OpenSSH 7.3, it is even easier by using ProxyJump...

Host server1 10.0.1.1

        Hostname 10.0.1.1
        ProxyJump user1@jumphost1.example.org:22,user2@jumphost2.example.org:2222

... or using -J

ssh -J user1@jumphost1.example.org:22 10.0.1.1

See Proxies and Jump Hosts

[/UPDATE]

[UPDATE 06. May 2016]

Carlos Lopes Pereira pointed me to the article SSH Agent Forwarding Is a Bug by @neerolyte. I also think this is a valid point, so removed the agent forwarding flags.

[/UPDATE]

Sometimes it makes sense to use ssh jump hosts to reach hosts in a DMZ. To avoid connecting those jump host manually and starting another ssh-connection on the jump host, we are using ProxyCommand, defined in ssh_config.

Historically, we are using nc on the jump host, to forward the connection to the target host.

Host server1 10.0.1.1

        Hostname 10.0.1.1
        ProxyCommand ssh -q -x IP_OF_JUMP_HOST 'nc %h 22'

Unfortunately, this cause a large number of orphaned nc-processes on the jump host. It is possible to get rid of those leftovers by using nc -w 1 %h 22.

But why using nc? Why installing another piece of software on the ssh jump hosts? ssh is capable to do this on its own, using ssh -W %h:22.

     -W host:port

             Requests that standard input and output on the client be forwarded
             to host on port over the secure channel.  Implies -N, -T,
             ExitOnForwardFailure and ClearAllForwardings and works with Protocol
             version 2 only.

Changing the ssh_config:

Host server1 10.0.1.1

        Hostname 10.0.1.1
        ProxyCommand ssh -q -x IP_OF_JUMP_HOST -W %h:22
Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.

Hinweis:Desktopumgebungen bringen eventuell schon Einstellungen für natural scrolling mit.

$ xmodmap -e "pointer = 1 2 3 5 4 7 6 8 9 10 11 12"

## Oder
$ xinput list
⎡ Virtual core pointer                       id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                 id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                 id=11   [slave  pointer  (2)]
...
$ xinput set-button-map 11 1 2 3 5 4 7 6 8 9 10 11 12

xmodmap setzt die Einstellung für alle pointer, während er bei xinput explizit angegeben werden muss. xinput eignet sich daher für den Fall, dass sich Mäuse unterschiedlich verhalten sollen. Z.B. soll ein Scrollrad wie gehabt scrollen, ein TouchPad aber natural.

Die Einstellungen lassen sich zur Laufzeit wieder zurücksetzen in dem 5, 4 und 7,6 (horizontal) wieder zurück getauscht werden:

$ xmodmap -e "pointer = 1 2 3 4 5 6 7 8 9 10 11 12"

# bzw
$ xinput set-button-map 11 1 2 3 4 5 6 7 8 9 10 11 12

Zum globalen persistieren für alle input pointer eigenet sich die 1. Variante mit xmodmap am besten. Einfach eine ~/.Xmodmap mit folgendem Inhalt anlegen:

$ cat .Xmodmap

pointer = 1 2 3 5 4 7 6 8 9 10 11 12

Um die Einstellungen für jede Maus einzeln zu persistieren ist etwas mehr Hirnschmalz nötig. Z.B. https://github.com/cemmanouilidis/naturalscrolling .

Autor
Chris Glaubitz
Configuring, coding, debugging computers for a living. Riding bikes for fun.