Kategorien
Allgemein

Cronjobs unter Android einrichten

Anforderungen

  • Das Android Gerät muß für diese Anleitung gerooted sein
  • Busybox muss auf dem Android Gerät installiert sein
  • das Android Gerät muss als Init-System init.d verwenden

Creating cronjob

Erstelle im Verzeichnis /data/crontab/ eine Datei mit dem Dateinamen “root“. Diese Datei wird die Cronjobs für den Unix-Benutzer Root enthalten. Schreibe alle deine Cronjobs in diese Datei, mache die Datei anschließend ausführbar.

mkdir -pv /data/crontab
touch /data/crontab/root
chmod +x /data/crontab/root

Führe nun die folgenden Befehle aus um zum Benutzer root zu wechseln und den Cron-Daemon die Cronjobs prüfen zu lassen:

su -
crond -b -c /data/cronjob

Jetzt kannst Du prüfen ob der Cron-Daemon erfolgreich gestartet wurde:

top|grep crond

Um den Cron-Daemon crond bereits beim Starten des Android Gerät mit starten zu lassen lege eine weitere Datei im Verzeichnis /system/etc/init.d mit dem folgenden und dem folgenden Inhalt an.

mkdir -pv /system/etc/init.d
cat > /system/etc/init.d/crond << "EOF"
crond -b -c /data/crond
EOF

cronjob Beispiel

Der folgende Beispiel-Cronjob startet das Gerät jede Stunde zur dreiundfünfzigsten Minute neu. (Ein wirklich minimales Beispiel, nichts was Du wirklich möchtest):

53 * * * * reboot

Eine Anleitung wie die Zeitangaben für den Cron-Daemon aufgebaut sein müssen findest Du zum unter anderem in der Wikipedia, einen kompfortabelen Editor auf der Seite crontab-generator.org.

Fehlerbehebung

Wenn es beim Einrichten einen Feler wegen eines  “read only file system” gibt, kann das Dateisystem über den folgenden Befehl beschreibbar neu gemounted werden:

mount -o rw,remount /dev/stl12 /system

Nach dem Anlegen der Cronjobs kannst Du über den folgenden Befehl das Dateisystem wieder nur lesbar Mounten:

mount -o ro,remount /dev/stl12 /system
Kategorien
Allgemein

Zufällige MAC-Adresse erzeugen

Manchmal kann es hilfreich sein, eine zufällige MAC Adresse zu generieren, beispielsweise für einen Cronjob der eine Netzwerkkarte abschaltet, eine neue MAC-Adresse vergibt und die Verbindung dann eine neue Verbindung herstellt.

Mit folgender Linux-Shell Zeile lässt sich eine solche MAC Adresse generieren.

echo -n 00-01-02; dd bs=1 count=3 if=/dev/random 2>/dev/null|hexdump -v -e '/1 "-%02X"'

Im ersten Teil werden die ersten 3 Byte der Mac-Adresse ausgegeben, diese geben den Hersteller der Netzwerkkarte an. Ich gebe in meinem Beispiel an, das es sich um eine 3COM Netzwerkkarte handelt.
Im zweiten Teil werden 3 Byte Zufallsdaten auf /dev/random entnommen und anschließend werden im Dritten Teil, mittels Hexdump, diese 3 Byte in deren Hexadezimalentsprechung umgewandelt.

Folgend eine kleine Liste mit MAC Adressen verbreiteter Hersteller:

00-01-02-xx-xx-xx 3COM
00-07-E9-xx-xx-xx Acer
00-0A-95-xx-xx-xx Apple
00-15-F2-xx-xx-xx Asus
00-24-fe-xx-xx-xx AVM
00-60-2F-xx-xx-xx Cisco
00-50-8B-xx-xx-xx Compaq
00-11-0A-xx-xx-xx HP
AC-E2-15-xx-xx-xx Huawei
00-07-E9-xx-xx-xx Intel
00-1F-3C-xx-xx-xx Intel
00-1D-92-xx-xx-xx Micro-Star
DC-3E-F8-xx-xx-xx Nokia
B8-27-EB-xx-xx-xx RaspberryPi
90-18-7C-xx-xx-xx Samsung
6C-23-B9-xx-xx-xx Sony
Kategorien
Allgemein Linux security

RETTET TrueCrypt…

Da TrueCrypt auf der offiziellen Internet Seite eine Anleitung zur Umstellung auf unsicherere Software, wie zum Beispiel “BitLocker”, gestellt hat und aus Archiven verschwindet hier ein Spiegel der letzten Aktuellen Version! Bewahrt es gut auf!

Ich hoffe es finden sich Entwickler die TrueCrypt weiterführen!!!

Die Checksummen der Dateien (Bitte mit den Dateien und Checksummen aus Drittquellen vergleichen!)
md5sum:

  • bb355096348383987447151eecd6dc0e truecrypt-7.1a-linux-x64.tar.gz
  • 09355fb2e43cf51697a15421816899be truecrypt-7.1a-linux-x86.tar.gz
  • 89affdc42966ae5739f673ba5fb4b7c5 truecrypt_7.1a_mac_os_x.dmg
  • 102d9652681db11c813610882332ae48 truecrypt-7.1a-source.tar.gz
  • 7a23ac83a0856c352025a6f7c9cc1526 truecrypt_setup_7.1a.exe

sha1sum:

  • 086cf24fad36c2c99a6ac32774833c74091acc4d truecrypt-7.1a-linux-x64.tar.gz
  • 0e77b220dbbc6f14101f3f913966f2c818b0f588 truecrypt-7.1a-linux-x86.tar.gz
  • 16e6d7675d63fba9bb75a9983397e3fb610459a1 truecrypt_7.1a_mac_os_x.dmg
  • d43e0dbe05c04e316447d87413c4f74c68f5de24 truecrypt-7.1a-source.tar.gz
  • 7689d038c76bd1df695d295c026961e50e4a62ea truecrypt_setup_7.1a.exe

STELLT AUCH IHR SPIEGEL DES QUELLCODES!

Kategorien
Allgemein

Multidomain Zertifikat erstellen

Mit openssl ist es wirklich einfach ein eigenes SSL Zertifikat und CSRs zu erstellen. Für Multi Domain Zertifikate muss jedoch auf konfigurations-Dateien zurückgegriffen werden.
Auch diese konfiguratios-Dateien sind nicht besonders kompliziert.

Eine Beispiel Konfigurationsdatei:

# OpenSSL konfiguration zum erstellen eines neuen Key mit CSR für x509v3
# multidomain Zertifikat
#
# openssl req -config bla.cnf -new | tee csr.pem
# oder
# openssl req -config bla.cnf -new -out csr.pem
[ req ]
default_bits = 4096
default_md = sha512
default_keyfile = key.pem
prompt = no
encrypt_key = no

# base request
distinguished_name = req_distinguished_name

# extensions
req_extensions = v3_req

# distinguished_name
[ req_distinguished_name ]
countryName = "DE" # C=
stateOrProvinceName = "Berlin" # ST=
localityName = "Firmenname" # L=
postalCode = "13189" # L/postalcode=
streetAddress = "Strasse 91" # L/street=
organizationName = "Firma" # O=
organizationalUnitName = "IT Department" # OU=
commonName = "example.com" # CN=
emailAddress = "webmaster@example.com" # CN/emailAddress=

# Erweiterte Einstellungen
[ v3_req ]
# In der alternativen Namenerweiterung sind verschiedene Werte erlaubt:
# http://www.openssl.org/docs/apps/x509v3_config.html
subjectAltName = DNS:www.example.com,DNS:www2.example.com # multidomain certificate

# vim:ft=config

In diesem Beispiel werden als Domain “example.com”, “www.example.com” und “www2.example.com” validiert. Selbstverständlich könnten auch andere Domains angegeben sein.

$ openssl req -config bla.cnf -new -out csr.pem
Generating a 4096 bit RSA private key
..........................................................................++
.................................................................++
writing new private key to 'key.pem'
-----

Bei diesem Aufruf wird der Private Schlüssel key.pem und der CRS (Zertifikatsanfrage)csr.pem erstellt.

Diese Anleitung ist durch Lets Encrypt eigentlich überflüssig geworden. Um lokal genutzte Zertifikate und Testumgebungen zu unterstützen bleibt diese Anleitung erhalten.

Kategorien
Allgemein

shortip.de – IP-Adressen ermitteln

Short IP Dienst:
http://www.shortip.de/

Manchmal ist es notwendig die von außen gesehene IP-Adresse der eigenen Verbindung, oder der eines Servers zu ermitteln. Leider sind alle Dienste die dies anbieten “zu” gesprächig und liefern schlecht auszuwertende Informationen zurück.

Aus diesem Grund, –> shortip.de <–

Ich liefere nur die IP-Adresse die der Server sieht und auch nur in den Format das Ihr wünscht!

Fehlt ein Format? Schreibe einen Kommentar! Aktuell unterstützt shortip.de die folgenden Formate:

  • Text
  • http Header
  • json
  • xml

 

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
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