Bildbearbeitung (Größen, Format) in Linux

Für die Bildbearbeitung in Linux gibt es das Programm „Imagemagick“.

sudo apt-get install imagemagick

Konvertieren von einem Bildformat in ein anderes Bildformat. Optional kann man die Qualität von 95% an geben.

convert -quality 95 source.png dest.jpg

Die Auflösung von Bildern kann man auch ändern auf einen Fix-Wert von 200×100 Pixeln. Mit einem Ausrufezeichen kann man die Werte erzwingen.

convert -resize 200×100! source.jpg dest.jpg

Will man nur den Horizont auf 200 Pixel oder die Vertikale auf 100 Pixel ändern, so kann man den jeweils anderen Wert weg lassen. Der jeweils andere Wert wird an den Seitenverhältnissen von dem Bild errechnet.

convert -resize 200 source.jpg dest.jpg
convert -resize ×100 source.jpg dest.jpg

Auch die Angabe von Prozent ist möglich.

convert -resize 50% source.jpg dest.jpg

Ein Bild zu drehen ist auch möglich.

convert -rotate 90 source.jpg dest.jpg

Es gibt auch Bilddefekte, welche man anwenden kann.

convert -charcoal 2 source.jpg dest.jpg

Will man viele Dateien umwandeln, kann man sich ein Shell Script erstellen.

for file in *.jpg; do convert $file -resize 50% low-$file; done

Update von MySQL image in Docker

Wir wollen in Docker ein MySQL container auf die letzte Verion updaten. Wichtig dafür ist, das unsere Daten nicht in dem Container gespeichert werden, sondern auf dem Host im Verzeichnis /my/data/

1. Letzte MySQL Version hinzufügen

docker pull mysql:latest

2. Container stoppen

docker stop mysql1

3. Container löschen

docker rm mysql1

4. Neuen Container erstellen

docker run --name=mysql1 --restart=always -e MYSQL_ROOT_PASSWORD=mypwd -v /my/data:/var/lib/mysql -d mysql

Will man sich mit dem Container verbinden, dann verwendet man…

docker exec -it mysql1 bash

…oder man öffnet das MySQL Kommando.

docker exec -it mysql1 mysql -u root -p'mypwd'

Backup aller Datenbanken erstellen.

docker exec mysql1 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > /home/user/all-databases.sql.gz

MySQL im Docker HUB

XML SOAP Request senden

Wer einen WebService verwendet, muß nicht immer gleich einen eigenen Client entwickeln. Es ist auch möglich SOAP Request mit Tools zu senden. In diesem Beispiel wird ein WebService zum Löschen von Nachrichten angesprochen.

Zu erst erstellen Datei mit dem XML SOAP Request.

vim soap_request.xml

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:removeNachricht xmlns:ns1="http://exposed.storage.service.de/"
<arg0>4860</arg0>
</ns1:removeNachricht>
</soap:Body>
</soap:Envelope>

Mit dem Tool curl senden wir einen HTTP Post Request, als HTTP Header wird die Methode „removeNachricht“ von dem WebService gesendet.

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: removeNachricht" -d @soap_request.xml -X POST http://localhost:7010/soa-infra/services/StorageService/StorageWebService

Wenn wir eine Liste von Nachrichten löschen wollen, können wir diese Shell Script verwenden. Die NachrichtenID werden in der Datei „list.txt“ gespeichert. Die SOAP Datei wird immer wieder kopiert und in der Datei die ID ersetzt.

#!/bin/sh
URL=http://localhost:7010/soa-infra/services/StorageService/StorageWebService
 
cat list.txt | while read ID
do
 echo "Delete Nachricht: ${ID}"
 cp soap_request.xml.org soap_request.xml
 sed -i s/##NACHRICHT_ID##/${ID}/g soap_request.xml
 curl \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: removeNachricht" \
  -d @soap_request.xml -X POST ${URL}
 sleep 2
done

Große Dateien teilen und übertragen

Wenn man eine große Datei über das Internet übertragen will, kann das lange dauern. Eine Unterbrechung der Netzwerkverbindung kann ein Problem dar stellen. Besser ist es, die Datei zu erst zu packen und in kleine Teile zu trennen. Dann kann man diese kleinen Dateien einzeln übertragen und wieder zusammen setzten.

0. 500MB Testdatei erstellen

dd if=/dev/urandom of=myfile.out bs=1M count=500

1. Packen und teilen

gzip -c myfile.out | split -b 20M - myfile.gz_

2. Übertragen

rsync -avzP myfile.gz_* -e ssh user@hostname:/tmp/

3. Zusammensetzen

cat myfile.gz_* | gunzip -c > myfile.out

In Windows kann man die Dateien zusammen kopieren.

copy /b file1 + file2 + file3 + file4 filetogether

Logrotate

Mit Hilfe von Logrotate werden die Log-Datien aus dem Verzeichnis /var/log/ gepackt.

Im Verzeichnis /etc/cron.daily/logrotate ist ein Script gespeichert, welches Logrotate jeden Tag startet. Die Einstellung für Logrotate liegen in der Konfiguration /etc/logrotate.conf gespeichert.

sudo vim /etc/logrotate.d/dpkg

/var/log/dpkg.log {
  monthly                   # Monatlich
  rotate 12                 # Behalte 12 Stück
  compress                  # Komprimiert
  delaycompress             # Komprimiert nach dem verschieben
  missingok                 # Es ist OK, wenn kein Log da ist.
  notifempty                # Leere Dateien werden nicht verschoben
  create 644 root root      # Rechte ändern
}

NetworkManager entfernen

Wenn man vom NetworkManager zurück zu Network wecheln will, sind drei Schritt aus zu führen.

sudo service NetworkManager stop
sudo service network start
sudo apt-get remove NetworkManager

Erstellen Sie auch die Konfiguration für Network.

sudo vim /etc/network/interfaces

auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet dhcp

NetworkManager ohne GUI verwalten

Wenn man den NetworkManager (NM) ohne eine GUI verwenden will, kann man das Programm nmcli verwenden.

nmcli device status
nmcli device show eth0
nmcli connection show
nmcli general

Es ist auch möglich die Verbindung zu trennen und zu ändern.

nmcli device [connect/disconnect] eth0

Die Einstellung werden gespeichert im Verzeichnis /etc/NetworkManager/system-connections/.

sudo vim /etc/NetworkManager/system-connections/Kabelnetzwerkverbindung

[connection]
id=Kabelnetzwerkverbindung
uuid=245e5-2e4f-25ef-4c55-56ede3
type=ethernet
permissions=
secondaries=
timestamp=1453713048
 
[ethernet]
duplex=full
mac-address=F0:DE:F1:XX:XX:XX
 
[ipv4]
method=auto
 
[ipv6]
ip6-privacy=0
method=auto