Kategorien
CL-35B2 Linux

Serielle Konsole (TTL) zur NAS: CL-35B2

CL-35B2 Board Gehäuse-seitig
CL-35B2 Board Gehäuse-seitig

Nach dem Erwerb einer CL-35B2 NAS habe ich es auf Anhieb geschafft mich aus dem Linux auszusperren. ☺
Ich hatte via rpm -e nas-* die NAS Spezifischen Pakete deinstalliert und versäumt die Netzwerk Konfiguration zu Prüfen. (rpm weisst bei der Deinstallation auf die Umbenennung der Netzwerkkonfiguration hin)

Glücklicherweise bietet dieser Router eine sehr gut erreichbare TTL Schnittstelle.:

Die TTL Konsole ist der Anschluss oben rechts, dieser ist mit CON8 bezeichnet.
Die Pinbelegung ist, vom Kontakt 1 (mit dem kleinen Weißen Pfeil!!!) rechts zum Kontakt 4 (Links, Richtung Boardmitte) angegeben:

CL-35B2 Board mit selbst gebasteltem RS232 Wandler...
CL-35B2 Board mit selbst gelötetem RS232 Wandler…

 

Kategorien
Forensik Linux security

Verzeichnisstruktur mit nur “bestimmten” Dateien kopieren

Die Verzeichnisse in denen ich meine Bildarchive verwalte wurden mit der Zeit von verschiedenen Archiv Programmen mit unglaublichen mengen an .sqlite und .xml und .txt und ähnlichem aufgefüllt die ich für meine Backups nicht benötige. Die Metadaten werden von den meisten Bildverwaltungen ohnehin zusätzlich in die exif Daten der Bilder geschrieben.

Da ich zum zusammenkopieren meiner “Backup-Zeile” eine ganze Weile herumprobieren musste habe ich diesen Blogbeitrag verfasst.?

Einzeiler zum kopieren einer Verzeichnisstruktur und aller “.jpg” Dateien:

rsync -aP --partial --size-only --include "*/" --include "*.jpg" --exclude "*" /media/sdkarte/ /media/Bildarchive2013

rsync – Programm zur Synchronisation von Daten

-a fasst die folgenden Optionen zusammen:

  • -r lässt rsync rekursiv arbeiten
  • -l kopiert symbolische Links
  • -p behält Rechte bei
  • -t behält Zeiten bei,
  • -g behält Gruppenrechte bei
  • -D behält Gerätedateien bei (nur wenn root rsync startet)

-P macht rsync gesprächig und gibt den fortschritt der Syncroisierung aus
–partial unfolständige Dateien beibehalten und fortsetzen
–size-only nur die Dateigröße prüfen
–include mit in der Sicherung durchführen
–exclude nicht mit in der Sicherung zufügen ausser ausrücklich includiert

Die Kamera nimmt die Bilder und auch zusätzliche GPS Informationen in Ordner auf, die dem Jahr-Monat-Tag entspricht. Die GPS und Richtungs Informationen die die Kamera in zusätzlichen Dateien aufnimmt brauche ich nicht im Archive und lasse sie auf diese weise einfach aus.

Kategorien
Linux

Multifile Tar Archive

GNU Tar selbst bietet leider keine Möglichkeit die Tar-Datei in auf mehrere Dateien aufzuteilen. Der Linux Befehls split bietet die Möglichkeit dieses Manko zu beheben.

Tar Datei in vielen (kleinen) Dateien erzeugen:

tar -czf /dev/stdout /home | split -d -b "Größe der Ausgabedatei in Bytes" - Ausgabedatei

Wenn als “Größe der Ausgabedatei in Bytes” einer der folgenden Werte eingesetzt wird, wird das tar-Archive in entsprechend kleine Teile aufgespalten.:
1 Megabyte – 1048576
1,44 Megabyte – 1474560
10 Megabyte – 10485760
1 Gigabyte – 1073741824

Die Dateien können wie folgt wieder entpackt werden:

cat $(FILE_NAME_PREFIX)* >> /dev/stdout | tar -xzf /dev/stdin
Kategorien
Allgemein Linux Video

DVD to x264 und AAC…

Meist stammen die eigenen Lokalen .mkv Videos von der eigenen DVD Sammlung und sind, da das Video im mpeg2 Format vorliegt, vier bis acht Gigabyte groß. Auch wird, zumindest von meinem XBMC, auf dem Raspberry Pi, MPEG2 nicht Hardware beschleunigt wiedergegeben. (einen Lizenzschlüssel das er es doch kann gibt es auf raspberrypi.com)

Um dies zu beheben können wir die Video-Spur der .mkv Dateien mit hilfe von x264 in ein moderneres Format umwandeln.

1.) Benötigte Software

für das “rippen” brauchen wir:

zum Transcodieren brauchen wir:

1.) Daten von DVD extrahiert

copy from DVD
decss

2.) Transcodieren

2.1.) Audio

Zuerst die Audio Spuren in das PCM Wave format wandeln:

mplayer -novideo -ao pcm:file=middle.wav input.mkv

Anschließend die entstandene wav Datei mit AAC komprimieren:

neroAacEnc -q 0.3 -lc -if middle.wav -of ouput.mp4

2.2.) Video

Beim Entfernen der Schwarzen Balken muss man leider Höhe und Breite “MOD16” festlegen. Die Höhe als auch die Breite müssen ohne rest durch 16 teilbar sein.

x264 --preset slow --level 4.1 --deblock 0:0 --keyint 300 --min-keyint 30 --crf 18 --tune film --video-filter crop:0,20,0,10 -o output.mkv input.mkv

–preset slow
–level 4.1
–deblock 0:0 deblocking Filter anschalten
–keyint 300 maximaler Abstand zwischen zwei Key-Frames – 10*FPS
–min-keyint 30 minimaler Abstand zwischen zwei Key-Frames – 1*FPS
–crf 18 Qualität
–tune film voreinstellungen für “Film” nutzen
–video-filter crop:0,20,0,10 rand links,oben,rechts,unten abschneiden
-o output.mkv Ausgabedatei
Optional
–no-interlaced fals das Quellvideo nicht Interlaced ist

3.) Audio und Video zusammenfügen

mkvmerge

Kategorien
IPTables Linux security

IP Filter…

Um Dienste von dem Zugriff durch bestimmte IP-Adressen zu sperren oder bestimmte IP Ports zu verbieten bietet sich ein IPTables Block an.

iptables -N block-enemy
iptables -A block-enemy -j DROP

Ziel-Port in die Blockliste aufnehmen

iptables -I INPUT 1 -p tcp --dport 3306 -j block-enemy
iptables -I INPUT 1 -p tcp --dport 8080 -j block-enemy

Eine IP-Adresse in die Liste Aufnehmen:

iptables -I INPUT 1 -p tcp --source 190.17.238.139 -j block-enemy

Eine Anwendung (MySQL Standartport) die Liste Aufnehmen:

iptables -I INPUT 1 -p tcp --dport 3306 -j block-enemy

Entfernen lässt sich der Inhalt des Blocks wieder mit:

iptables --flush block-enemy
Kategorien
Linux Raspberry Pi

Raspberry Pi – Systeminformationen auslesen

Auch beim Raspberry Pi ist es wichtig im Bild zu bleiben und die Systeminformationen zur aktuellen Konfiguration zu erfahren.
Wenn ein Codec käuflich erworben wurde, ist dieser auch aktuell aktiv?

Wie hoch ist der aktuelle CPU Takt:
vcgencmd measure_clock arm

Wie ist der Core getaktet?
vcgencmd measure_clock core

Welche CPU-Spannungen liegen an?
vcgencmd measure_volts core

Wie ist aktuell die CPU Temperatur:
vcgencmd measure_temp

Ausgabe der aktuellen Firmaware Version:
vcgencmd version

Ist ein bestimmter Codec aktiv?:
vcgencmd codec_enabled H264
vcgencmd codec_enabled MPG2
vcgencmd codec_enabled WVC1

Kategorien
Allgemein

mkv Videos trimmen (Anfang und Ende schneiden)

Mit dem Tool mkvmerge aus dem Paket MKV-Tolnix ist es auch möglich Videos zu trimmen, also das Ende oder den Anfag des Videos zu entfernen.

Im mkvmerge wird zu dieses Zweck die Option –split verwendt, bei der mittels angegebenem Parameter parts das Anfang und das Ende der verbleibenden Videoschnipsel angegeben wird.

mkvmerge mit_Intro.mkv --split parts:00:01:20-01:47:45 -o ohne_Intro.mkv

In dem angegebenen Beispiel wird aus der Datei namens mit_Intro.mkv eine neue Datei ohne_Intro.mkv erstellt welche den Zeitraum ab einer Minute, 20 Sekunden bis eine Stunde, 47 minuten, 45 Sekunden enthält. Alles nach 0:01:20 und vor 1:47:45 ist in der Datei ohne_Intro.mkv enthalten.

Das Zeitformat von –split parts: ist HH:MM:SS
HH Zweistellig Stunde
MM Zweistellig Minute
SS Zweistellig Sekunde

 

Kategorien
Allgemein

RetroShare auf Raspberry Pi Kompilieren

Anleitung zur Einrichtung von RetroShare auf einem Raspberry Pi. Ich gehe in dieser Anleitung von einem frisch mit Raspbian Jessie Lite bespielten SD-Karte aus.

1.) Voraussetzungen Schaffen

Als erstes müssen Im Bibliotheken und Werkzeuge Installiert werden, die Retroshare zum Übersetzen benötigt.:

apt-get install -y libqt4-dev g++ libgpgme11-dev libgpg-error-dev \
libupnp-dev libssl-dev libgnome-keyring-dev libbz2-dev libxss-dev git

Als nächstes Retroshare via GIT “auschecken”

git clone <span class="skimlinks-unlinked">https://github.com/RetroShare/RetroShare.git</span>

2.) RetroShare übersetzten

Sowie in die Verzeichnisse gehen und Compillieren

cd retroshare/libbitdht/src/
qmake
make clean
make -j2
cd ../../libretroshare/src/
qmake
make clean
make -j2
cd ../../openpgpsdk/src/
qmake
make clean
make -j2
cd ../../retroshare-nogui/src
qmake
make clean
make -j2
cd ../../retroshare-nogui/src
qmake
make clean
make -j2

Als nächstes einen Benutzer für das Retroshare anlegen und den Schlüssel aus der “Windows-Version” kopieren.

adduser --disabled-password --disabled-login retroshare
su retroshare
mkdir ~/.retroshare/pgp -p

Via WinSCP die Dateien aus C:\RetroShare\Data\pgp\ nach /home/retroshare/.retroshare/pgp/ kopieren.

Die Rechte der Dateien sichern!

chown retroshare:retroshare ~/.retroshare/pgp -R
chmod 600 ~/.retroshare/pgp/*

Schwierigkeit: bevor wir RetroShare über retroshare-nogui starten können brauchen wir ein Funktionierendes Profil. Da die Retroshare Profile ausschließlich über RetroShare-GUI angelegt werden können benötigen wir einen X-Server. Sollte der Raspberry Pi über HDMI An einen Monitor angeschlossen sein kann, bei laufendem X-Server RetroShare-GUI gestartet werden und ein Profil erzeugt werden.

Wenn der Raspberry Pi über keine Grafische Oberfläche Handelt kann beispielsweise über Xming und PuTTY die

/usr/src/retroshare/retroshare-nogui/src/retroshare-nogui

Zuerst Xming herunterladen und entpacken.
http://www.scrc.umanitoba.ca/doc/tutorial/T19_3a_xmingputty.htm

Anschließend im Verzeichnis Xming die Datei Start Xming+PuTTY.bat starten. Xming läuft jetzt auf dem Computer.

in der SSH Server konfiguration /etc/ssh/sshd_config X11 tunneling einschalten:

# X11 tunneling options
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

Anschließend mit Putty die Verbindung

Host Name (or IP address)
retroshare@angststalt.de

Connection => SSH => X11 => |X| Enable X11 forwarding
Connection => SSH => Tunnels =>

export DISPLAY=127.0.0.1:0.0

Kategorien
Allgemein

Bash: “for” Schleifen

Wie nutze ich eine “for” schleife in der Shell. Wie erstelle ich endlose schleifen?

Eine for Schleife erlaubt es Bash-Code wiederholt auszuführen. Eine Schleife ist eine Kontrollstruktur, die wiederholt einen Anweisungs-Block (den Schleifenrumpf oder Schleifenkörper) so lange, wie eine Laufbedingung gültig ist oder eine Abbruchbedingung eintritt abarbeitet.
Schleifen, deren Laufbedingung immer erfüllt ist oder ihre Abbruchbedingung niemals erreichen (oder keine Abbruchbedingung haben) sind Endlosschleifen.

Die Zähl-Schleife:

!/bin/bash
for i in 1 2 3 4 5
 do
 echo "Schleifendurchlauf $i"
done

Bei dieser Schleifenvariante können auch andere Werte als Zahlen angegeben werden.

Seit Bash Version 3.x gibt es einen eingebauten “range” Support:

!/bin/bash
for i in {1..5} # die beiden Punke gehören dazu!
 do
 echo "Schleifendurchlauf $i"
done

In der Bash Version 3.x kann leider noch nicht mit schritt weiten Umgehen, zum Glück gibt es den Linux Befehl “seq”.:

!/bin/bash
for i in $(seq 1 2 20)
 do
 echo "Schleifendurchlauf $i"
done

Ab Bash Version 4.0+ können auch die Schrittweiten angegeben werden, was bedeutend schneller ist als der Aufruf des externen Programms “seq”. Die Syntax lautet hier: {START..ENDE..SCHRITTWEITE}

!/bin/bash
echo "Bash Version ${BASH_VERSION}"
for i in {0..10..2}
 do
 echo "Schleifendurchlauf $i"
done

Eine weitere Art der for Schleife ist ein gemeinsames Erbe mit der Programmiersprache C Bestehend aus einer Initialisierung (EXP1), eines Zustands-Tests (EXP2), und eines Zähler Ausdrucks (EXP3).

for (( EXP1; EXP2; EXP3 ))
 do
 # Wiederholt auszuführender Script-teil
done

Ein einfaches Beispiel für diese Art der Schleife welches bis 5 Zählt sieht dann ungefähr wie folgt aus.:

!/bin/bash
for (( c=1; c<=5; c++ ))
 do
 echo "Nummer $c …"
done

Und letztendlich die Endlosschleife

In der Endlosschleife werden einfach die 3 Parameter leer gelassen, somit wird die (leere) Abbruchbedingung nie erreicht.

!/bin/bash
for (( ; ; ))
 do
 echo "Unedliche Schleife! [CTRL]+[C] zum Abbruch"
done

Bedingter Abbruch mit ‘break’

Eine Schleife kann auch mit dem Befehl ‘break’ innerhalb der Schleife unterbrochen werden. Ein verlassen mit “break” ist aus for, while und until Schleifen möglich. Das ganze muss dann so aussehen:

for I in 1 2 3 4 5
 do
  statements1 #Executed for all values of ''I'', up to a disaster-condition if any.
  statements2
  if (abbruch-bedingung)
   then
    break #Verlasse die Schleife
  fi
  statements3 #Solange die "abbruch-Bedingung nicht erreicht ist
done

Das folgende Shell Script will alle Dateien im Verzeichnis ‘/etc’ ausgeben, jedoch abbrechen wenn die Datei ‘/etc/resolv.conf’ erreicht wird.

#!/bin/bash
for file in /etc/*
 do
  if [ "${file}" == "/etc/resolv.conf" ]
   then
    countNameservers=$(grep -c nameserver /etc/resolv.conf)
    echo "Total ${countNameservers} nameservers defined in ${file}"
    break
  fi
done

Vorzeitige Fortsetzung der Schleife mit Hilfe der continue-Anweisung

Um den nächsten Durchlauf der umschließenden for, while und until Schleife vorzeitig fortzusetzen wird die Anweisung ‘continue’ verwendet.

for I in 1 2 3 4 5
 do
  statements1
  statements2
  if (Bedingung)
   then
    continue #Hier aus der Schleife aussteigen und statements3 auslassen
  fi
  statements3
done

Beispielscript, welches von allen Dateien eine Kopie mit dem Namen *.bak anlegt, wenn am Dateiname bereits .bak enthalten ist wird die Datei übersprungen.

#!/bin/bash
FILES="$@"
for f in $FILES
 do
  # wenn die .bak Kopie exists, nächste Datei
  if [ -f ${f}.bak ]
   then
    echo "Skiping $f file..."
     continue # Nächste Datei lesen, überspringe cp
  fi
  # Das wir hierher gelangt sind bedeutet es gibt noch keine .bak Datei
  /bin/cp $f $f.bak
done
Kategorien
Allgemein

HTTP Protokoll Grundlagen für Anfänger

Wie funktioniert das Internet-Protokoll HTTP?

Ganz einfach: der Client (Webbrowser) sendet eine Anfrage (GET), das Protokoll über das angefragt wird und zwei leerzeilen. Anschließend bekommt der Browser vom Server die Seite ausgeliefert:

als Browser

Auf der Linux-Shell kann eine solche Abfrage mittels Netcat (nc) und echo nachgebildet werden:

echo -e "GET / HTTP/1.1\r\nHost: www.heise.de\r\n\r\n" | nc www.heise.de 80

Die Anfrage “GET / HTTP/1.1”, die Mitteilung zu welcher Domain die Anfrage gehört (host:) und zwei Zeilenumbrüche (\r\n) werden mittels Netcat an Port 80 des Servers www.heise.de gesandt.

als Server

Auch ein HTTP-Server lässt sich auf der Linux Schell auf die gleiche weise “simulieren”:

echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080

Beim Aufruf der Seite in einem Browser erscheint der Text “Linux, da bin ich” und auf der Shell erfolgt die Ausgabe des Anfrage Headers.
Der Aufruf der Seite im Firefox

GET / HTTP/1.1
Host: 85.214.55.47:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Alternativ kann der Abruf der Seite auch über den Vorangegangenen Befehl erfolgen. Die Anfrage wird von Netcat jedoch nicht geprüft, so das Du bei der Anfrage auch beliebige Zeichen in die Abfrage schreiben kannst.:

metzger@linux:~$ echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080 &
[1] 1465
metzger@linux:~$ echo -e "GET / HTTP/1.1\r\nHost: meins\r\n\r\n"|nc localhost 8080
GET / HTTP/1.1
Host: meins


HTTP/1.1 200 OK
Content-Type: text/html

Linux, da bin ich
[1]+ Fertig echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich" | nc -l 8080

Allerdings ist der Aufruf der “Seite” auf diese Weise nur ein einziges mal möglich!

Um einen wiederholten Abruf zu ermöglichen kannst Du das Netcat in eine Endlosschleife legen.:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080; done