Seite wählen

NETWAYS Blog

powerline-shell

powerline-shell
Hi folks,
ich habe letztens bei meinem Kollegen Mr. Frog ein neues Bling-Bling entdeckt The Mighty Powerline-Shell die mir besonders gut gefallen hat, ich war so angefixt das Ich mir einbildete das auch haben zu müssen, gesagt getan.
Die Powerline-Shell ist richtig Gut, da Sie als Segmentiertes ’self contained‘ Python-Script folgende Features abdeckt.

  • Ihr seht egal ob Git, SVN, Mercurial o. Fossil immer was gerade Sache ist
  • wenn eure Pfade auf einer Zeile zu lang werden, dann werden Sie gekürzt ohne relevante Information zu verlieren
  • viel Buntes für den Kreativen Ops/Dev ( Colored Themes )
  • auch werden euch Rückgabe werte des letzten Befehls aus eurer Shell ungleich 0 zurückgegeben
  • wenn Ihr euch per SSH auf entfernte Systeme verbindet, dann wird auch dies durch ein Schloss Symbol kenntlich gemacht
  • wenn das aktuelle Verzeichnis nicht mit euren Rechten beschrieben werden darf, wird dies auch durch ein Schloss Symbol wiedergegeben
  • Sie kann auch den Title eures TerminalEmulator mit user@host:/path Einträgen umschreiben
  • zeigt auch Änderungen an der Umgebung an ( Virtual Environment )
  • die aktuelle Zeit ist nun auch mit am Start ( Segment wurde von mir eingeführt, da ich dieses Feature für mein Daily benötige )
  • zeigt auch laufende Hintergrund Jobs an ( Shell forks )
  • die Features sind leicht zu erweitern ( Segmente werden in Python geschrieben )

Die Powerline-Shell ist auch sehr benutzerfreundlich in etwa 3 Schritten eingerichtet.

cd ~ && mkdir git && cd git
git clone https://github.com/powerline/fonts.git powerline-shell-fonts
git clone 
./powerline-shell-fonts/install.sh
./powerline-shell/install.py
vi ~/.bashrc

Noch fix den Prompt auf die Powerline-Shell umbiegen. 😉

function _update_ps1() {
	export PS1="$(~/powerline-shell.py $? 2>> /dev/null)"
}
export PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"

Und einen der neu installierten Fonts mit dem ‚Powerline‘ Suffix wählen, fertig.
Hier noch Bilder „weil Bilder mehr als tausend Worte …“ naja ihr wisst schon.
github-lenrico-powerline-shell
Links:

https://github.com/Lokaltog/powerline-fonts
 

Hollywood auf der Bash

In diesem Blogpost möchte ich euch zeigen wie Ihr relativ einfach und ohne großen Aufwand auf der Shell eigene Kassenschlager à la Hollywood produzieren könnt. Dafür benötigte Tools stehen auf den gängigen Linux-Distributionen bereits über die Standard Utilities (util-linux bzw. util-linux-ng) zur Verfügung.
Den Großteil der Zeit eines Filmregisseurs beansprucht natürlich die aufwändige und oft kräftezehrende Produktion der einzelnen Filmszenen, wir benutzen hierzu unsere virtuelle Kamera namens script.
Script steht eigentlich für Typescript und lässt sich z.B. mit „maschinengeschriebenes Schriftstück“ übersetzen. Genau das produzieren wir jetzt! Script möchte von uns dazu lediglich den Namen der Zieldatei haben, also:

# script recordfile
Script wurde gestartet, die Datei ist recordfile

oder alternativ:

# script -f recordfile
Script wurde gestartet, die Datei ist recordfile

Nun kann die wilde Bash-Show starten und wenn wirklich keine neuen Ideen mehr nachkommen lässt sich die Aufnahme mit [Strg] + [d] beenden, es erscheint folgende Ausgabe:

# exit
Script wurde beendet, die Datei ist recordfile

Die Wiedergabe der Datei recordfile kann nun beispielsweise mit dem altbekannten cat erfolgen. Da uns diese Methode vermutlich nicht allzu viele begeisterte Zuseher einbringen wird, erweitern wir die Aufnahme um einen sog. Timingaufruf, das könnte so aussehen:

# script -t 2> time.file record.file

Natürlich muss auch hier die „virtuelle Kamera“ am Ende wieder mit  [Strg] + [d] beendet werden. Bei der Wiedergabe unterstützt uns nun scriptreplay, das die Sequenzen deutlich massentauglicher darstellt:

# scriptreplay time.file record.file

Zugegeben – unsere Zuschauerzahlen werden sich wohl noch nicht (gleich) mit denen der großen Hollywood-Blockbuster vergleichen lassen, aber was nicht ist kann ja noch werden. In diesem Sinne: Klappe… und Action!

Markus Waldmüller
Markus Waldmüller
Head of Strategic Projects

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Senior Manager Services gelandet. Seit September 2023 kümmert er sich bei der NETWAYS Gruppe um strategische Projekte. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Weekly Snap: Foreman & OpenNebula, Bash Aliases & Linux Tag 2014

weekly snap12 – 16 May offered tips for configuration in the cloud and making Bash more convenient, plus a couple of presentations from Linux Tag.
Thilo started by introducing our Foreman–OpenNebula integration in a Youtube video while Matthias shared his shortcut aliases for Bash.
Markus, Bernd and Dirk followed with a few photos from Linux Tag 2014 and slides from their presentations on Icinga, Logstash and Foreman.

Weekly Snap: Gammu & Jitsi, Logstash & Bash

weekly snap20 – 24 January was packed with guides and tools, from Gammu and Jitsi to Bash prompts and Logstash.
Eva started the week at 78 days to the OSDC and recommended Justin Clift’s ‘Tutorial & Demonstration of Failover from EC2 to OpenStack using Aeolus’.
Ronny then introduced Jitsi (aka SIP Communicator) as an all-in-one open source video call and chat client as Christoph showed how to send SMS on Linux using Gammu.
Meanwhile, Michael shared his colour coded bash prompts to show Git branches, and Thomas offered a 15 min quick start guide to Logstash, starting a new series on the log management tool.

Bash Prompt mit Git Branch Anzeige

Obwohl es da draußen die eine oder andere IDE gibt, die einem beim Entwickeln unter die Arme greift, bin ich doch sehr oft in der Shell in GIT Repositories unterwegs – sowohl privat als auch in der Arbeit auf Debian Stable und Testing sowie für den Paketbau in den diversen CentOS, OpenSUSE, etc VMs. Nachdem ich zudem noch ein fauler Mensch bin, der sich beim 10ten Mal Befehl eintippen oder in der History (Strg+R) suchen dann einen Bash Alias schreibt, geht mir der „in welchem Git Branch bin ich eigentlich grade“ Befehl

$ git branch

ziemlich auf den Keks. Vor allem inmitten eines Rebase/Merge, wo ich dann auch noch ein ‚git status‘ bemühen muss. Das sind Dinge, die ich sofort auf der Shell sehen möchte. Und dann auch noch farblich so hervorgehoben, dass mans kontrastreich erkennen kann.
Über die Jahre hinweg bastelt man dann dahin mit diversen sed Orgien auf git branch Befehle, bis man dann endlich die ultimative Lösung findet: Das Debian Paket ‚bash-completion‘ bietet diese Funktionalität bereits an, und liefert in der Variable $(__git_ps1) den benötigten Output, welcher Branch bzw. welcher Status.

# apt-get install bash-completion

Auf CentOS und Konsorten gibts das Paket (noch) nicht, man kann sich aber mit folgendem Trick behelfen (muss für alle Benutzer durchgeführt werden):

# curl https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git
# vim ~/.bashrc
source ~/.bash_git
# . ~/.bashrc

Nachdem das ja zu einfach wäre, muss man sich dann auch noch mit den Eigenheiten der Bash auseinandersetzen, was Terminalformatierung betrifft. Ich gehe mal nicht davon aus, dass das dem geneigten Leser Freude bereitet, und hängs mal mit an.
Ich verfolge dabei bestimmte Grundprinzipien, die jeder für sich selbst anpassen kann.

  • Eine Zeile für alles, inkl aktuellem Pfad (für Copypaste). Meine native Auflösung ist mind. 1680×1050, bevorzugt 1920×1080 mit entsprechender gnome-terminal Breite.
  • user@hostname sowie hostname als Root Benutzer.
  • Der root Benutzer wird rot dargestellt, der Benutzer hingegen grün (so visualisiere ich u.a. , warum das blöde rm nicht geht 😉 )
  • Das abschliessende Zeichen ist # (root) sowie $ (normaler Benutzer)
  • In Git Repositories wird $(__git_ps1) als (branchname) (dunkelgrün) angezeigt

Folgendes in die .bashrc eintragen und danach sourcen:

# =========================================================
# COLOR PROMPTS WITH GIT BRANCH
# =========================================================
function myPrompt() {
        local GREEN_BOLD="\[\033[01;32m\]"
        local RED_BOLD="\[\033[01;31m\]"
        local BLUE_BOLD="\[\033[01;34m\]"
        local GREEND="\[\033[02;32m\]"
        local REDD="\[\033[02;32m\]"
        local DEFAULT="\[\033[00m\]"
        # \h ... hostname
        # \w ... workdir
        # \$? ... RC
        # \u ... user
        # \$(__git_ps1) ... git branch/action if available
        local USER_BOLD=$GREEN_BOLD
        local USERD=$GREEND
        local USERAT="\u@\h"
        local USERHASH="\$"
        if [ `/usr/bin/whoami` = 'root' ]
        then
                USER_BOLD=$RED_BOLD
                USERD=$REDD
                USERAT="\h"
                USERHASH="#"
        fi
        PS1="$USER_BOLD$USERAT$DEFAULT $BLUE_BOLD\w$DEFAULT"
        PS1=$PS1"$DEFAULT$GREEND\$(__git_ps1)$BLUE_BOLD $USERHASH $DEFAULT"
        # window title
        case "$TERM" in
                xterm*|rxvt*)
                        PS1="\[\e]0;\h: \w (\u)\a\]$PS1"
                        ;;
        esac
}
# set git colored prompt based on uid
myPrompt

Für den Icinga 2 Entwickler sieht das dann so aus
git_bash_promt_user
während man als Root Benutzer das praktischerweise bei unterschiedlichen Konfigurationstests ebenso sieht.
git_bash_promt_root