• Und wer ist…?
  • Holiday Berichte
    • Urlaub Schottland 2013
    • Urlaub Griechenland 2013
  • Services
  • Kontakt/GnuPG

KOKOLOR.ES

Hier geht's einfach mal um alles und nichts!

bash

Remote Befehl mit nohup ausführen

6. Juli 2017 by Sebastian Leave a Comment

Ich denke jeder kennt nohup und was man damit macht. Deshalb hier nur ganz kurz – Führt man z.B. etwas auf einer entfernten Maschine einen Befehl aus und loggt sich aus, wird das HUP Signal an den Prozess gesendet und in Folge dessen terminiert. Stellt man nun nohup vor den Befehl, wird das HUP Signal ignoiert.

Dieser Artikel soll eher für mich eine kleine Gedankenstütze sein, da ich kürzlich, remote, einen Befehl mit vorangestelltem nohup ausführen wollte, der es allerdings nicht tat. Und zwar führte ich ihn wie folgt aus:

ssh server-abc "nohup bash -c 'apt update && apt install foobar' &"

STDOUT und STDERR werden eigentlich standartmäßig nach nohup.out umgeleitet, laut manual. Laut Stackoverflow muss man aber alle I/O Stream bei remote nohup Kommandos umleiten. Folgendes funktionierte dann auch:

ssh server-abc "nohup bash -c 'apt update && apt install foobar' &>/dev/null &"
Posted in: IT, Linux, Opensource Tagged: bash, linux, nohup

Brothers brscan-skey nutzbar machen

1. August 2016 by Sebastian 13 Comments

Update 27.03.2021

Da es nun schon zwei Kommentare mit Nachfragen zu dem Thema gab, dachte ich mir das ich hier kurz ein Update Kommentar dazu verfasse. Es ist wohl letztes Jahr eine neue Version des brscan-skey Paketes erschienen, mit welchem meine Scripte zum Teil nicht mehr funktionieren. Hauptsächlich betrifft es wohl scantofile, wo nur noch ein leeres PDF raus fällt. Ich habe letztens erst die Linux Version auf dem Laptop meiner Mutter installiert, allerdings das Scankey Tool ignoriert, da sie es in den vergangenen 5 Jahren nicht einmal genutzt hat. Wenn ich Zeit und Lust habe werde ich mir die neue Version nochmal anschauen und die Skripte anpassen, allerdings kann ich nicht sagen wann das sein wird. Vielen Dank auf jeden Fall für die Kommentare von Peter und Michél, die mich darauf aufmerksam gemacht haben und an den Kommentator Wade, der sich offensichtlich sogar aktiv zu dem Thema mit Brother auseinander gesetzt hat/auseinander setzt.

Update

Die Scripts liegen mittlerweile auch auf Github. Diese haben auch schon ein paar Updates erhalten, unter anderem auch scan2mail.

Ausgangsituation

Meine Mutter hat seit ein paar Monaten einen neuen Laptop und da sie nicht so viel Ahnung von PC’s hat und quasi noch ein unbeschriebenes Blatt ist, bekam sie von mir Linux drauf, um genauer zu sein Linux Mint mit Cinnamon, womit sie auch wunderbar klar kommt. Leider konnte sie damals die Scanner Funkionalität des Druckers nicht nutzen, da mein Vater diesen über einen propritären „Druckserver“ ins Netzwerk gehangen hat, welcher natürlich nur unter Windows richtig funktionierte.
Nun hat sich mein Vater endlich einen neuen Drucker gekauft, wodurch der „Druckserver“ endlich entsorgt werden konnte. Bei dem neuen Drucker handelt es sich um einen Brother MFC-J470DW mit WLAN, welcher auch Linux Unterstützung mit sich bringt. Ich gehe jetzt hier nicht auf die Installation der Treiber und so ein, mir geht es primär um das Scankey-Tool (brscan-skey), welches ermöglicht das man die Scanbuttons am Drucker nutzen kann.

Scankey-Tool und Anpassungen

Das ganze Tool besteht aus einem Binary File and ein paar Shell Scripten, welche nach /opt/brother/scanner/brscan-skey installiert werden. Im Unterordner script/ findet man nach der Installation 4 Scripte, also für jeden Button einen. Da ich festellte das die Scans alle als .ppm Dateien gespeichert werden und meine Mutter damit natürlich nichts anfangen kann, schaute ich mir mal die einzelnen Scripte an. Ich würde nicht behaupten das das, was ich manchmal schreibe als gutes scripten/programmieren durchgeht, aber diese Scripte sehen aus, als ob die ein Azubi im ersten Lehrjahr geschrieben hat. Ich hatte dann den starken Wunsch das alles nochmal ordentlich zu machen, unter anderem mit Convertierung der Dateien. Folgendes kam dabei heraus: Neuere Versionen der Skripte findet ihr auf Github

scantox.sh

#!/bin/bash

scan_path=~/Dokumente/Scans
scan_path_tmp=$(mktemp -d)
#logfile=/tmp/scan_logfile.log
resolution=300
output_filename=scan_$(date +%Y%m%d%H%M%S)
output_file="$scan_path/$output_filename"
output_file_tmp="$scan_path_tmp/$output_filename%03d.tiff"

#exec &> $logfile

function checkscanpath() {
    if [[ ! -d $scan_path ]]; then
        mkdir -p $scan_path
    fi
}

function scantox() {
    scanimage --device-name "$device" --resolution $resolution -l 0 -t 0 \
-x 210.00 -y 295.00 --format=tiff --batch=$output_file_tmp
}

function convert2() {
    if [[ "$1" == "pic" ]]; then
        c=0
        for file in $(find $scan_path_tmp -type f); do
            convert $file -quality 90 $output_file-$c.jpg
            c=$[$c+1]
        done
    elif [[ "$1" == "file" ]]; then
        convert $scan_path_tmp/* $output_file.pdf
    fi
}

function finish() {
    if [[ -d $scan_path_tmp ]]; then
        rm -r $scan_path_tmp
    fi
    if which nemo > /dev/null; then
        nemo $scan_path &
    fi
}

scantoimage.sh

#! /bin/sh
set +o noclobber

device=$1
. /opt/brother/scanner/brscan-skey/script/scantox.sh

sleep  1

checkscanpath
scantox
convert2 pic
finish

scantofile.sh

#! /bin/sh
set +o noclobber

device=$1
. /opt/brother/scanner/brscan-skey/script/scantox.sh

sleep  1

checkscanpath
scantox
convert2 file
finish

Die Scipte für OCR und Mail werde ich wahrscheinlich auch noch anpassen und werden dann ergänzt. Wenn ihr diese Scripte hier verwenden wollt, beachtet das wenn ihr die Filenames ändert ihr auch die .cfg einen Ordner höher anpassen müsst.

Probleme, Bugs etc.

Das die Scripte des Scankey Tools ziemlich schlecht geschrieben sind steht ja schon weiter oben, aber es gibt noch ein paar weitere Bugs:

Mehrere Seiten scannen über Flachbett nicht möglich

Der Drucker hat sowohl einen normales Flachbett als auch einen Dokumenteneinzug zum scannen. Wenn man nun über das Flachbett scannt, fragt er nach der ersten Seite ob man noch eine Weitere scannen möchte. Bejaht man das, fängt er an, bricht dann aber nach etwa 1/5 ab und man bekommt die Fehlermeldung (sofern man es mitloggt):

scanimage: sane_start: Device busy

Selbst wenn man die Zeile händisch ausführt, mit der expliziten Angabe das er bitte als Quelle das Flachbett nutzen soll, bekommt man bei der zweiten Seite einen Fehler, auch wenn es diesmal ein anderer ist:

scanimage --device-name "$device" --source FlatBed --resolution 300 -l 0 -t 0 \
-x 210.00 -y 295.00 --format=tiff --batch=$output_file_tmp --batch-prompt
scanimage: sane_start: document feeder out of documents

Mir scheint es so als ob er bei der ersten Seite noch mitbekommt das er das Flachbett nutzen soll, danach aber auf den Standart umspringt, welche ADF(left align) ist.
Wenn man hingegegen von Anfang an den Dokumenteneinzug zum scannen nutzt, funktionieren mehrere Seite ohne Probleme. Der Nachteil ist da natürlich, wenn man Dokumente hat, wo die Vorder- und Rückseite bedruckt ist, denn diese muss man so manuell zusammenführen.

Wenn jemand auch dieses Problem hat und es sogar gelöst hat, würde ich mich sehr über einen entsprechenden Kommentar freuen.

brscan-skey –help

Da ich mir mal anschauen wollte was ich mit dem Consolentool brscan-skey so machen kann führte ich es mal mit -h und –help aus. Beides brachte das selbe Ergebnis und zwar die Versionsausgabe. Als ich mir dann das Script mal anschaute, sah ich auch wieso:

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
  if [ "$2" = "2" ];then
    --- gekürzt ---
    echo '   -h --help                :help'
  fi
  echo '   Copyright 2007-2012 Brother Industries, Ltd'
  exit 0
fi

Man muss also um die Help-Ausgabe zu bekommen -h 2 oder –help 2 eingeben. Wieso? Wusste der Entwickler nicht das -V geläufgier ist für die Versionsausgabe?

Versionsnummern

Das Paket kommt in der Version 0.2.4-1. Offenbar hatte der Entwickler vor dem Release keine Muse diese Versionsnummer überall anzupassen. So hat das Binaryfile noch die Version 0.2.4-0. Des Weiteren ist in der brscan-skey-0.2.4-1.sh als $BINVERSION ebenfalls noch die Version 0.2.4-0. Dieses Script ist dafür zuständig die Scripte unter script/ zu generieren, was zu einem weiteren Phänomen führt.

brscan-skey –reset

Führt man das nämlich aus, bekommt man die wunderschöne Fehlermeldung:

Can't open /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0.sh

Ja klar, weil die auch brscan-skey-0.2.4-1.sh heißt. Passt man nun den Namen des Scripts an funktioniert –reset auch, nur haben dann alle Scripte unter script/ plötzlich eine Versionsnummer tiefer. Grund dafür ist das es neben $BINVERSION noch die Variable $VERSION gibt, welche zumindest schonmal nicht statisch vergeben ist, allerdings auch nicht, wie man denkt durch Abfrage der Paketversion gesetzt wird, nein, man schaute sich die Versionsnummer des ausgeführten Scripts an und setzt sie danach.
Das verursacht jetzt keine Probleme, da die brscan-skey-0.2.4-0.cfg auch entsprechend angepasst wird, aber dennoch…

brscan-skey -l / –list

Das ist einfach – diese Option hat einfach keine Funktion. Also zumindest zeigt sie weder unter Ubuntu noch unter Debian irgendwas an.

Fazit

Es funktioniert und macht, mit ein paar Anpassungen, weitesgehend das was es soll, aber dieses ganze Paket schreit einem quasi die Lust des Entwicklers ins Gesicht. Ich frag mich dann immer warum Unternehmen sowas machen. Wenn sie keinen Bock haben Linux Pakete zu bauen, schön, dann sollen sie den Code für das Binary irgendwohin werfen und sagen „Da habter den Code, macht es selbst, wir haben da keinen Bock zu.“ Das würde denen doch nicht mal jemand übel nehmen…

Posted in: IT, Linux, Opensource Tagged: bash, brother, drucker, linux, mint, scanner, ubuntu

Dynamisches Bash dialog Menü

4. März 2016 by Sebastian Leave a Comment

Auf Arbeit muss ich eine kleine GUI, die mit dialog geschrieben ist, anpassen, über welche Kunden ggf. ein paar kleine Einstellungen tätigen können. Im Fall Netzwerkinterface konfigurieren, kam mir heute in den Sinn, dass es ja durchaus sein kann, das es mehrere Interface, gleichen Typs, also z.B. 2x WLAN, geben kann und ich das auch gern berücksichtigen würde. Wenn also mehr als zwei Interface auftauchen, soll ein entsprechendes Menü in dialog generiert werden, was ich wie folgt gelöst hab:

TPATH=$(mktemp -d)
aintf=$(cat /proc/net/dev | grep ^\s*wl.*:.*$ | awk -F":" '{printf"%s ", $1}')

if [ "$(echo $aintf | wc -w)" -gt "1" ]; then
        c=1
        for i in $aintf; do
                list_opt=("${list_opt[@]}" "$i" "Interface$c")
                c=$[c+1]
        done
        diacmd=(dialog --menu "Interface" 15 60 10)
        cmd=`echo "${diacmd[@]}" "${list_opt[@]}"`
        $cmd 2> $TPATH/dialog.tmp
        interf=`cat $TPATH/dialog.tmp`
else
        interf=${aintf[0]}
fi
Posted in: Arbeit, IT, Linux, Opensource Tagged: bash, linux

NTFS Partition mounten obwohl Partitionstabelle defekt ist

14. Oktober 2014 by Sebastian 3 Comments

Auf Arbeit kam mir eine Festplatte unter, worauf relativ wichtige Daten sind. Diese hat allerdings eine defekte Partitionstabelle, was irgendwie das billige USB Dock verursacht haben muss. Jedenfalls war ich da erstmal etwas ratlos wie ich an die Daten kommen sollte, da zeigte mir mein Kollege Dennis wie es in wenigen Schritten möglich ist.

Als erstes muss man raus finden mit welchen HEX Wert der NTFS Bootsektor beginnt. Dies hatten wir hier erstmal in Erfahrung gebracht. Eine NTFS Partition fängt also immer mit „EB 52 90“ an und so konnte man dann auf der Platte mit hexdump danach suchen:

head -n 1000 /dev/sdb | hexdump -C | egrep "eb 52 90"

was, in unserem Fall, folgende Ausgabe ergab:

00006000  eb 52 90 4e 54 46 53 20  20 20 20 00 10 01 00 00  |.R.NTFS    .....|
08005000  eb 52 90 4e 54 46 53 20  20 20 20 00 10 01 00 00  |.R.NTFS    .....|
08100000  eb 52 90 4e 54 46 53 20  20 20 20 00 10 01 00 00  |.R.NTFS    .....|

Es sind also 3 NTFS Partitionen auf der Platte. In dem Fall interessiert uns nur die letzte, denn die erste ist leer und die zweite kaputt. Es scheint sich hier um alte Partitionen zu handeln. Nun muss der HEX String noch in Byte umgewandelt werden:

python -c 'print int("8100000", 16)'

Ausgabe:

135266304

Mit diesem Wert als offset konnte nun die Partition wie folgt gemountet werden:

mount /dev/sdb /mnt -o ro,loop,offset=135266304

Wir haben sie jetzt mal read-only gemountet, nur um sicher zu gehen.

Posted in: Arbeit, IT, Linux, Opensource Tagged: bash, linux

Finde alle Videodateien im Ordner und dessen Unterordnern

13. März 2014 by Sebastian Leave a Comment

Nur mal ein kleiner Beitrag für mich, denn die Zeile werde ich sicher wieder vergessen, da ich es nicht so mit sed hab. Ich wollte heute einfach mal unsere Shares durchsuchen um ggf. illegale Videos zu finden und anschließend zu löschen.

find /path/to/share/ -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p' > /root/video_public.txt
Posted in: Arbeit, IT, Linux, Opensource Tagged: bash, linux, ubuntu

Screenshot von Terminal Output erstellen

14. August 2013 by Sebastian Leave a Comment

Ich musste heute eine Anleitung über ein Tool erstellen, worüber direkt an den Clients beim Kunden vor Ort Netzwerkeinstellungen geprüft und/oder vorgenommen werden können. Nun brauchte ich für meine Anleitung Screenshots, da aus vertrieblicher Sicht meine mit dem Handy erstellten Screenshots zu hässlich waren. Ich dachte für ne Technikeranleitung reicht es, aber da es eine offizielle sein soll, muss es nun mal schön aussehen. Nun stand ich vor dem Problem „Wie mach ich Screenshots von ner Konsole“, denn das Tools ist ein einfaches Bash Script was mit Hilfe des Pakets dialog lediglich Dialogfenster erzeugt. Kennt ihr von der Debian Expert Installation – diese schönen weißen/hellgrauen Boxen auf blauem Grund.

Naja nach bisschen Gesuche wurde ich dann auch fündig, neben den ganzen Knallern die schrieben „Mach doch mit cat“ …. Also nutzen kann man dafür das Tool fbcat. Mit diesem kann man aber nur .ppm Dateien erstellen, weshalb man sich gleich noch imagemagick mitinstallieren kann. Da beide nicht standardmäßig installiert sind, muss das getan werden:

sudo apt-get install fbcat imagemagick

Ich habe jetzt festgestellt das mit fbcat lediglich Screenshots von der aktiven TTY machen kann. Also ich hatte auf dem Client über TTY4 das Tool offen und bin parallel per SSH drauf. Screenshots macht man nun wie folgt:

sudo fbcat > image.ppm

Somit hab ich nun meinen Screenshot von der aktiven TTY. Diesen musste ich nun noch konvertieren mit Hilfe von imagemagick:

convert image.ppm out.png

Da ich nun mehrere Screenshots erstellt habe, musste ich auch mehrere convertieren, was ich folgt machte:

for i in $(find /root -name "*.ppm" | grep nst | cut -f3 -d"/"); do convert $i $i.png ; done

Mit den entstandenen Screenshots war der Vertrieb dann auch zufrieden und ich hatte es hinter mir. Dokumentieren und Anleitungen schreiben ist nicht so mein Favourite. :-D

Posted in: Arbeit, IT, Linux, Opensource Tagged: bash, precise, ubuntu

mdadm mit zabbix überwachen

26. Februar 2013 by Sebastian Leave a Comment

New Version

Ich habe heute für die Arbeit ein Script geschrieben um unsere mdadm RAID’s mit Zabbix zu überwachen. Ich freue mich natürlich über Tipps, da ich noch das Script schreiben übe. Ich hab also noch nicht so viel Erfahrung, aber ich entdecke langsam die praktische Seite daran. :-D

Jedenfalls ist das das Script:

#!/bin/bash

export PATH=/usr/bin:/bin:/usr/sbin/:/sbin/

disk=$1

case $2 in
        state)
               state=$(sudo mdadm --detail /dev/$disk | grep -i "State :" | cut -d ":" -f 2 | awk -F ' ' '{print $1 $2 $3}')

               if [ "$(echo $state | grep clean | wc -l)" -eq "1" ]; then
                      s1=1
               else
                      s1=0
               fi
               if [ "$(echo $state | grep degrade | wc -l)" -eq "1" ]; then
                      s2=2
               else
                      s2=0
               fi
               if [ "$(echo $state | grep recovering | wc -l)" -eq "1" ]; then
                      s3=4
               else
                      s3=0
               fi

               s4=$(echo $(($s1 + $s2 + $s3)))

               case $s4 in
                       "0" | "1")
                               echo clean
                       ;;
                       "2" | "3")
                                echo degrade
                       ;;
                       "4" | "5" | "6" | "7")
                                echo recovery
                       ;;
                       esac
        ;;
        mdstat)
                grep -A1 $disk /proc/mdstat | grep -o _ | wc -w
        ;;
esac

Kurze Erklärung zu state: Ich greppe mir da aus der Ausgabe von mdadm die Zeile State heraus wo der Status des RAID’s ausgegeben wird. Dies können drei Stadien sein – clean, degrade, recovering (auch alle gleichzeitig). Aus diesem Grund habe ich noch die Addition hinzugefügt um einen Status auszugeben. Ich gebe aber immer nur einen Status aus: Wenn nur clean, dann logischer Weise clean – wenn clean,degrade dann degrade, da ja die Information wichtig ist das etwas mit dem RAID nicht in Ordnung ist – wenn recovering enthalten ist, dann wird recovery ausgegeben.

Kurze Erkläung zu mdstat: Ist relativ simpel. Platten die OK sind werden in /proc/mdstat mit U angeben und fehlende mit _ , da ich wissen will wie viele ausgefallen sind greppe ich hier nach _ .

Im Anschluss muss das Script noch ausführbar gemacht und in /etc/zabbix/zabbix-agentd.conf folgende Zeile hinzufügen werden:

UserParameter=mdadm[*], sh /pfad/zu/mdadm_chk.sh $1 $2

Da man für mdadm root-Rechte benötigt muss man noch folgende Zeile in /etc/sudoers:

zabbix ALL=NOPASSWD:/pfad/zu/mdadm_chk.sh,/sbin/mdadm

Jetzt einmal den Agent neu starten und schon müsste es funktionieren. Items und Trigger hab ich wie folgt angelegt:

mdadm_item_zbx

mdadm_trigger_zbx

Posted in: Arbeit, IT, Linux, Netzwerk, Opensource Tagged: bash, linux, mdadm, precise, raid, ubuntu, zabbix

Social Shit

Fediverse PGP-Key XMPP Matrix Git Github

Kategorien

  • Allgemein
  • Android
  • Anime
  • Arbeit
  • Entertainment
  • Games
  • Handy
  • IT
  • Linux
  • Monitoring
  • Netzwerk
  • Opensource
  • Privates
  • QEK Junior
  • Rattis
  • Showtime Ost
  • Showtime West
  • Windows

Interessantes

  • Lainblog
  • 5222.de
  • chr.istoph's Blog
  • World of Edolas

Archive

  • Juni 2023
  • August 2019
  • Oktober 2018
  • März 2018
  • Dezember 2017
  • Juli 2017
  • Juni 2017
  • Mai 2017
  • März 2017
  • Februar 2017
  • Januar 2017
  • Dezember 2016
  • November 2016
  • September 2016
  • August 2016
  • Juli 2016
  • Juni 2016
  • Mai 2016
  • April 2016
  • März 2016
  • Februar 2016
  • Dezember 2015
  • November 2015
  • September 2015
  • August 2015
  • Juli 2015
  • Juni 2015
  • Mai 2015
  • April 2015
  • März 2015
  • Februar 2015
  • November 2014
  • Oktober 2014
  • August 2014
  • Juli 2014
  • Juni 2014
  • Mai 2014
  • April 2014
  • März 2014
  • Februar 2014
  • Dezember 2013
  • November 2013
  • Oktober 2013
  • September 2013
  • August 2013
  • Juli 2013
  • April 2013
  • März 2013
  • Februar 2013
  • Januar 2013
  • Dezember 2012
  • November 2012
  • September 2012
  • Juli 2012
  • Juni 2012
  • Mai 2012
  • Februar 2012
  • Januar 2012

Tags

android anime apt bash bugs debian freifunk freifunk-aachen gnome hardware htpc kernel linux lucid lxc mdadm mint monitoring mysql network nginx openwrt outdoor package pgp php postgres precise raid redmine squeeze telekom testing trusty ubuntu virtualization vserver wheezy windows xbmc xenial xorg xubuntu zabbix zarafa

Datenschutzerklärung | Impressum

Copyright © 2025 KOKOLOR.ES.

Omega WordPress Theme by ThemeHall