Kategori Linux

localen git Server via ssh forwarden

Mittwoch, Dezember 13th, 2017


Folgendes Problem: auf eine ententen Server möchten wir auf ein Git Repository zugreifen auf dies der Server eigentlich keinen Zugriff hat, da der Git Server in einem Lokalen Netz steht. Der Rechner von dem ich dieser Operation ausführen möchte, kann all Server erreichen.

Somit habe ich mich per SSH mit Port Fortging auf den Server verbunden:

ssh -A -R 2222:git.local:22 server.tld

Hier wird mit der Option -R der Port 2222 auf dem entfernten Server bereit gestellt und auf den „git.local“ Server mit dem Port 22 weitergeleitet. Mit der Option -A habe ich zusätzlich SSH Agent Forwading eingegeben. Somit wird nicht einmal ein SSH Key auf dem Server benötigt.

Als nächstes habe ich in der .git/config die URL des Repositories angepasst.

...
url = git@[localhost:2222]:gitreponame
...

Eigentlich sollte die IP oder der DNS Name des Git Servers stehen. Dies habe ich durch localhost ersetzt. Leider ist der Port 22 natürlich belegt, somit habe ich diesen ebenfalls umgebogen. Dies geht nur mit den Eckige Klammern [localhost:2222].

Der vim Mausmodus unter Debian 9

Freitag, November 17th, 2017

Unter Debian 9 Stretch hat vim eine neue default Einstellung bekommen, den Mouse Modus. Möchte man Texte per Maus kopieren bzw in die Zeichenablage legen dies nicht mehr.

Ich habe mir zum editieren der vim Konfiguration Datei folgenden Einzeiler geschrieben, den ich einmalig ausführen muss:

sed -i 's/^  set mouse=/"  set mouse=/' /usr/share/vim/vim80/defaults.vim

Was macht er im Detail:
In der /usr/share/vim/vim80/defaults.vim muss unter folgender Sektion der set mouse Parameter auskommentiert werden.

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
if has('mouse')
"  set mouse=r
endif

[UPDATE]
beim Updaten von vim wird die vom Paket mitgebrachte defaults.vim mit einem merge conflict behandelt. Des wegen ist die oben eingeführte Varianten nicht sinnvoll. Alternativ kann man die /etc/vim/vimrc.local oder ~/.vimrc erstellen oder anpassen:

$ cat /etc/vim/vimrc.local

" https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837761#76
"
runtime! defaults.vim

let g:skip_defaults_vim = 1

set mouse&

Ein einfaches touch ~/.vimrc reicht aber auch. Achtung dann werden die anderen Default Einstellungen ebenfalls nicht geladen.

Quelle: blog.bricart.de

systemd KillMode und systemd-run

Sonntag, Oktober 8th, 2017

Für eine Video Projekt habe ich ein Script das in einer Schleife ein Einminütiges Video erstellt und dieses danach verarbeitet. Damit man die Erstellung sauber beenden kann, habe ich beim Starten eine Datei angelegt und zum beenden wird diese Datei wieder gelöscht. In der schleife wird immer abgefragt ob diese noch Existiert:

#!/bin/bash
touch run
trap "rm run" 0 15
while [ -f run ]; do
  ffmpeg ...
  ./verarbeitung.sh &
done

So kann man das Skript sehr gut von „außen“ steuern. Ein weiteres Script zum verarbeiten, das sich ebenfalls in der schleife befindet, habe ich geforkt.

Nun habe ich das Script auf einen systemd Service umgestellt, bei dem ich auf zwei Probleme gestosen bin.
1. Systemd beendet das Script und alle hiervon aufgerufenen Programme ebenfalls mit Signal 15. Das bedeutet das, dass Video erstellen und verarbeiten umgehend unterbrochen werden.
2. Das „verarbeitung.sh“ Script ist eigentlich vollkommen unabhängig und es muss nicht auf dessen Beendigung gewartet werden.

Lösung:
Im SystemD Services habe ich den Kill Mode auf Mixed umgestellt. Das Sendet nur noch an eigentliche Script ein Signal 15. Hier tiggert dann der trap und löscht die Datei zum Beenden der Schleife.

[Service]
KillMode=mixed

Den fork habe ich mit mit systemd-run in eine eigene Unit verfrachtet. Somit kann die Verarbeitung abgeschlossen werden und SystemD kann den Dienst als beendet erklären.

systemd-run --unit "verarbeitung-$(date +%y%m%d-%H%M%S)" ./verarbeitung.sh

Einführung in Docker

Freitag, August 25th, 2017

Hier eine Kurzzusammenfassung wie man mit Docker sein erstes Projekt starten kann und worauf man achten sollte.

Installation:
Die Installation ist mittlerweile trivila einfach:

apt install docker.io

Wenn man docker als System Benutzer ausführen möchte. muss dieser in der Gruppe docker sein.

usermod -aG docker user

Das Dockerfile:
Das Dockerfile beschreibt was gemacht werden soll. Fangen wir langsam an und setzen eine Instanz mit einem Webserver mit PHP Unterstützung auf:

FROM ubuntu:trusty

RUN apt-get update && apt-get install -y mariadb-client apache2 libapache2-mod-php5 php5-mysql && apt-get clean

Im Detail: Die „FROM“ Zeile beschreibt das zugrunde liegende Image. In unserem fall ist das Ubuntu in der Version 14:04. Die liste der Images findet man hier: hub.docker.com

Die Zeile RUN beschreibt was beim Prozesse des bauen eines Docker Container gemacht werden soll. An dieser stelle habe ich alle apt befehle hintereinander geschrieben, da Docker für jedes einen eigenen Layer erzeugt. Dies hat vor und Nachteile.

Dann starten wird das ganze doch mal:

Mit „docker build“ wird das Image gebaut. Mit der Option -t geben wird dem ganzen noch einen beliebigen Namen und der Punkt besagt das das Dockerfile aus dem aktuellen Verzeichnis verwendet werden soll.

docker build -t myubuntu .

Nach dem Bauen können wir den Container Starten. Zunächst habe ich mit der Option „-v“ das Verzeichnis in dem wir uns gerade befinden im den Container an die Stelle /var/www/html gemountet. Mit der Option -i und -t mit dem bekommen wir im zusammen Spiel mit dem abschließenden Aufruf von /bin/bash einen Interaktiven zugriff auf den Container. Die „–rm“ Option löscht nach beenden der Interaktiven Shell auch den gesamten Container. Dies würde Docker sonst nicht machen und es würde sehr viel Datenmüll entstehen. Da wir dem ganzen einen Namen gegeben haben müssen wir nicht umständlich nach nach der beim Bauen des Container erzeugten ID suchen sondern könne einfach loslegen:

docker run -v `pwd`:/var/www/html -i -t --rm myubuntu /bin/bash

In diesem Container ist nun noch nichts gestartet. Nach dem Starten des Webservers mittels /etc/init.d/apache2 start kann mit einem Webbrowser die Seite angezeigt werden. Hierfür sucht man sich die Aktuelle IP herraus: ip a und gibt diese im Webbrowser an.

MySQL Passwort reset

Dienstag, Juli 18th, 2017

immer wieder toll, dass sich im laufe eines Produkt zyklusses das zurücksetzen eines Passwort immer wieder ändere muss. Hier das Beispiel wie es unter Ubuntu 16.04 noch funktioniert:

Zunächst um welche Version handelt es sich:
mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Dann muss die Datenbank angehalten werden:
systemctl stop mysql

Unter Ubuntu existiert der /var/run/mysqld Ordner nicht der für das Starten des mysql Prozesses ohne Berechtigungen nötig ist:
mkdir /var/run/mysqld
chwon mysql: /var/run/mysqld
mysqld_safe --skip-grant-tables --skip-networking &

Dann kann man sich in die DB einloggen und das Passwort zurück setzen:
mysql -u root
use mysql;
UPDATE user SET authentication_string = PASSWORD('neues_passwort') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

Zum Schluss muss der mysql Prozess wieder beendet werden und der ganz normale Dienst kann wieder gestartet werden:
kill `cat /var/run/mysqld/mysqld.pid`
systemctl start mysql