BITFOX® | LÖSUNGEN | SERVICE | LOGIN | BLOG | KONTAKT
Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Linux werden angezeigt. Alle Posts anzeigen

Montag, 23. August 2021

gpsd und CentOS7


Irgendwie flog nach dem Umzug hier ein kleiner USB-Stick mit der Aufschrift "U-blox7 G-7020" von "U-blox" auf dem Schreibtisch herum. Na was könnte das sein..? 
Zeit das große Oracle mal zu befragen.

AH - jah... das ist doch mein GPS-Stick, den ich gesucht habe... :-) 


 Na komm - dann mache ich "mal eben" wieder Zeit im lokalen Heimnetz. Mal eben die Phux-Ärmel hochkrempeln und den alten Artikel von mir rausgesucht...
 
https://blog.bitfox.com/2015/06/hands-on-wir-bauen-uns-unter-centos.html

Los gehts.. bestimmt dauert das nur zwei Minuten...?!

.....natürlich dauerte es keine 2 Minuten...

Freitag, 9. April 2021

Linux-Quiz:
Böse Fallen mit find

Auf den letzten Beitrag mit dem "Find" und den "Ein-/Ausgabekanälen" auf der Bash kamen einige Rückmeldungen; das würde Spaß machen und da solle ich mir doch noch mal was einfallen lassen.

Einen "bösen lehrreichen Klassiker" hätte ich aber vielleicht noch.

Was ist richtig und warum? :-)
Nicht googlen - und bitte NICHT EINFACH AUSPROBIEREN -
das könnte ggf. schief gehen und die Daten sind weg....  :-)
find /somewhere/ -type f -name foo -exec rm -f {} \; 2>&1 >/dev/null find /somewhere/ -type f -name foo -exec rm -f {} + &>/dev/null find /somewhere/ -delete -name foo -type f &>/dev/null

Samstag, 27. März 2021

Linux-Quiz:
Datenkanäle auf der Bash-Shell


Auf der Arbeit nervte ein Cronjob und löste immer wieder Fehler-Mails aus. "Kein Ding."
crontab -e ... "Alles klar, da fehlt was."
Am nächsten Tag: Wieder eMails.
crontab -e ... Hmh... "Wieso...?!" ...und eine Nacht überlegen...
Autsch! Gemein! KLAR! DER ist guuuuuut! :-)
crontab -e ...."Jetzt aber!"
Ruhe.

Wer also einem Linux-Admin einmal eine wirklich gemeine Alltagsfrage stellen möchte, für den habe ich da was:
find /does/not/exist -name foo -exec bar {}\; -print 2>&1 >/dev/null find /does/not/exist -name foo -exec bar {}\; >/dev/null 2>&1 find /does/not/exist -name foo -exec bar {}\; -print &>/dev/null
Was davon ist richtig - und vor allem: Warum?
Nicht googeln - nicht ausprobieren - versucht's mal aus dem Stehgreif zu beantworten. :-)

Sonntag, 21. Februar 2021

DNS und Root-Adressen updaten


Sonntags um 03:00 Uhr - das eigene Monitoring klingelt:
Internet gibt es nur noch so halb und alles alles an Maschinerie benimmt sich sehr sehr eigenartig.

5 Minuten später ist das Problem erkannt:
Der hauseigene mini-DNSrelay hat versagt und ich schwenke erst einmal voll um auf die Fritzbox bzw. Telekom. Doch was war passiert?

Aus unerklärlichen Gründen hatte sich beim Update der DNS-Rootserer-Einträge die /var/named/named.ca "aufgelöst" und somit konnten keine DNS-Rootserver mehr gefunden werden; was natürlich die entsprechenden Folgen hatte.
Hrm....

Also - ein neues Update-Script für die Ermittlung der DNS-Rootserver....! :-)

#!/bin/bash # # update-dns-roots # Script zum Aktualisieren der DNS-Root-Adressen # # 2021-02-21 Oliver Lenz # # contab -> # 0 10 1 * * /root/bin/update-dns-roots.bash >/dev/null 2>&1 || echo "Probleme in update-dns-roots.bash" # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin destination="69.58.179.79" # ftp.rs.internic.net dt=$(date "+%Y%m%d%H%M%S") filter="FILTER:$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" errorlevel=255 echo "Setup Firewall for ftp-Communication with ${destination}" modprobe ip_conntrack modprobe ip_conntrack_ftp iptables -A OUTPUT -p tcp --sport 1024:65535 -d ${destination} --dport 20 -m state --state ESTABLISHED -j ACCEPT -m comment --comment "${filter}" iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 -d ${destination} --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "${filter}" iptables -A OUTPUT -p tcp --sport 1024:65535 -d ${destination} --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT -m comment --comment "${filter}" iptables -A INPUT -p tcp -s ${destination} --sport 20 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT -m comment --comment "${filter}" iptables -A INPUT -p tcp -m tcp -m multiport -s ${destination} --sports 21,1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT -m comment --comment "${filter}" echo "Getting ca-File from ${destination}" wget -q --timeout=4 --tries=3 --waitretry=2 --user=ftp --password=ftp ftp://69.58.179.79/domain/db.cache -O /var/named/named.ca.tmp &>/dev/null if [ "$?" == "0" ]; then if cmp -s /var/named/named.ca /var/named/named.ca.tmp; then echo "No changes." rm -f /var/named/named.ca.tmp else cp -f /var/named/named.ca /var/named/named.ca.${dt} mv -f /var/named/named.ca.tmp /var/named/named.ca /usr/bin/systemctl restart named-chroot.service echo "Update ca-file successfully." fi errorlevel=0 else echo "Problems getting new ca-file via /root/bin/update-dns-roots.bash" errorlevel=1 fi echo "Remove Firewall-Rules for ftp-Communication with ${destination}." while read rule; do echo "${rule}" | xargs iptables done< <( iptables-save | grep " --comment \"${filter}\"" | sed "s/-A /-D /g" ) exit ${errorlevel}
Update: 2022-01-16 Typo in der Dateiausleitung nach /dev/null in der wget-zeile.

Dienstag, 2. Februar 2021

Windows 10 und seine Updates:
Wenn hinter einem Proxy der Windows-Client unerklärlich "stirbt"

Irgendwie wurden zu Hause in den letzten Tagen einige Windows-10-Clients immer langsamer. Hmh. Was ist denn da los?
Der Taskmanager zeigte an, dass "Windows Update" 90% der CPU-Ressourcen verbrauchen würde -
und ein Blick auf den Netzwerkadapter zeigte ebenfalls, dass da was "im Busch" war:
Der Client versuchte ohne Rücksicht auf Verluste Netzwerkverbindungen zur Außenwelt aufzubauen.

Virenbefall? Hier hätte der Client zumindest ein wenig Probleme durch den authentifizierenden Proxy.


Also schaute ich in das Log des Proxies, wohin die Verbindungen gehen sollten und das Problem wurde sichtbar: Windows Update kann nicht mit authentifizierenden Proxies arbeiten!
Der Client versuchte gar tausende Anfragen nach Microsoft aufzubauen, die vom Proxy gedropped wurden; entsprechend wurden die Ressourcen des Gerätes verschwendet und der Client lief so im wahrsten Sinne des Wortes "heiß".

Und nun?

Pest oder Cholera?
Schalte ich den Update-Service des Clients ab,
oder schalte ich die Authentifizierung des Proxies ab?
Oder installiere ich nun extra einen WSUS-Server für das Update von einigen Windows-Clients....?
Das kann alles nicht die Lösung sein.


Mit einem gehörigen Knirschen habe ich folgende Zeilen in die Squid-Konfiguration eingetragen:

acl windowsupdates dstdom_regex -i (.*\.|)microsoft.com
http_access allow windowsupdates

...Magenschmerzen...!
Jetzt kann ein jeder hinaus auf ein Ziel bei Microsoft, ohne eine Authentifizierung.
......aber der Client läuft nun wieder schnell.... *hust*

Donnerstag, 28. Januar 2021

rpm-Pakete und Versionen

Das BSI warnt grade vor alten sudo-Versionen auf unixoiden Betriebssystemen:
Einfache Benutzer können Root-Zugriff erlangen, sogar wenn diese Benutzer nicht einmal in der /etc/sudoers erwähnt sind. Auch Accounts ohne Shell bzw. lediglich hinterlegtem Kontext sind somit gefährlich.
"Also - mal eben schauen", wie "neu" das sudo auf der Maschine ist.

rpm -qi $( rpm -qf "/bin/sudo" )

Aber geht's noch schöner? Klar - etwas CommandLine-Zauber... :-)

f="/bin/sudo" ; rpm -qf "${f}"  --qf '%{name} %{version}-%{release}%{arch} from '; env TZ=Europe/Berlin date -d "@$( rpm -qf "${f}" --qf '%{buildtime}' )" "+%Y-%m-%d %H:%M:%S %Z"

Nachtrag: %{buldtime:date} Zeigt bereits einen Datumsstring, welcher jedoch nicht wirklich ansehnlich ist.

Sonntag, 15. November 2020

BASH und JSON-Strings
Ein Erfahrungsbericht...

 ....so oder ähnlich könnte es nun heissen.
Das Problem war eigentlich, nur "mal eben" einen JSON-String ohne zusätzliche Tools "menschlich lesbar" anzuzeigen.
"Da muss doch schon mal wer was ordentliches gemacht haben?"

Nach ca. 2 Stunden suchen hatte ich jedoch immer noch nichts wirklich funktionierendes gefunden, was einen JSON-String "ordentlich" menschlich visualisiert - 
oder auch ggf. aus einem JSON-String einen Variablen-Bereich einfach wieder heraus gibt.

Na dann... bau ich da mal halt selbst - 

Auf geht's :-)

#!/bin/bash # # Funktionen zum Umgang mit JSON-Strings. # # 2020-11-13 Oliver Lenz    Initial # function parse_jsonvar_raw() { # Parse einen JSON-String in menschlich lesbare form. # # $1 JSON-String # $2 Tabulatorenweite (default:4) (optional) # $3 Filtere die Ausgabe anhand eines Variablennamens (optional), z.B. "value.name" # local buchstabe="" letzter_buchstabe="" zeile="" local in_gaensefuesschen=0 umbruch="" local variablenname="" variablenstack=() local ebene=0 anschlag=0 local tabbreite=4 filter="" zurueck=0 if [ $# -gt 1 ]; then [[ "${2}" =~ (^[0-9]*$) ]] && tabbreite=$2 || filter=".${2}" fi [ $# -gt 2 ] && filter=".${3}" function vartest() { local voller_variablenname="" i=0 s [ -n "${variablenname}" ] && variablennamenstack[${ebene}]="${variablenname}" voller_variablenname="" for((i=0;i<=${ebene};i++)){ s="${variablennamenstack[$i]#\"}" s="${s%\"}" voller_variablenname="${voller_variablenname}.${s}" } # printf "%-60s" "${voller_variablenname}" if [[ -z "${filter}" || "${filter}" == "${voller_variablenname}" || "${voller_variablenname:0:$((${#filter}+1))}" == "${filter}." ]]; then [ "${filter}" == "${voller_variablenname}" ] && zurueck=$ebene # korrektur bei Filter (( i=$anschlag-$zurueck*tabbreite )) [ ${i} -gt 0 ] && printf "%${i}s" " " [ -n "${zeile}" ] && echo "${zeile}" fi variablenname="" zeile="" } while read -n1 buchstabe; do if [ "${in_gaensefuesschen}" == "1" ]; then [ "${letzter_buchstabe}" != "\\" ] && [ "${buchstabe}" == "\"" ] && in_gaensefuesschen="0" elif [ "${letzter_buchstabe}" != "\\" ] && [ "${buchstabe}" == "\"" ]; then in_gaensefuesschen="1" else case "${buchstabe}" in '{' | '[' | '(' | ',' ) umbruch="nach_buchstaben";; '}' | ']' | ')' ) umbruch="vor_buchstaben";; ':') variablenname="${zeile}";; ' ') buchstabe="";; esac fi [ "${umbruch}" == "vor_buchstaben" ] && vartest && (( ebene-- )) zeile="${zeile}${buchstabe}" [ "${umbruch}" == "vor_buchstaben" ] && (( anschlag=ebene*tabbreite )) if [ "${umbruch}" == "nach_buchstaben" ]; then vartest [ "${buchstabe}" != "," ] && (( ebene++ )) (( anschlag=ebene*tabbreite )) fi letzer_buchstabe="${buchstabe}" umbruch="" done<<<"${1}" [ -n "${zeile}" ] && vartest } function parse_jsonvar(){ ausgabe="$( parse_jsonvar_raw "${1}" "${2}" "${3}" )" [ -n "${ausgabe}" ] && echo "${ausgabe%,}" } # json_str='value:{"name":"Hello World","myNumArray":{"index0":"Hello","varname":"value","some":"thing"}}' # parse_jsonvar "${json_str}" # parse_jsonvar "${json_str}" 8 # parse_jsonvar "${json_str}" 4 "value" # parse_jsonvar "${json_str}" 4 "value.name" # parse_jsonvar "${json_str}" 4 "value.myNumArray"

Geht doch... :-)

Donnerstag, 12. November 2020

Arrays bzw. Stacks mit der BASH-Shell

Wer Scripte in der BASH-Shell schreibt, der hat hin und wieder sehr unangenehme Erfahrungen mit Arrays:  Ist man hier nicht sehr genau in der Syntax, gehen Einträge verloren, oder man erhält Null-Einträge.

Anbei eine Idee, wie man das Problem mit üblichen Funktionen wie

  "push" (etwas auf den Stack legen),  
  "pop" (das letzte Element vom Stack zeigen und löschen),
  "delete_from_stack" (ein gezieltes Element vom Stack löschen) und
  "print_stack" (gebe einen Stack aus)

lösen kann.

Viel Spaß damit. :-)

Donnerstag, 8. Oktober 2020

BASH und die Zeitzone

Sehr  (un)gern stellt man oft fest, dass die Shell auf der man grade arbeitet in einer ganz anderen Zeitzone lebt, als von der man aus arbeitet.
Das Remote-System auf dem ich grade eingelogged bin, arbeitet z.B. in UTC.

$ date "+%c"

Wed Oct  7 23:26:47 UTC 2020


Da kann man als Europäer mal gar nichts mit anfangen.
Wie kommt man nun also an die Uhrzeit zu Hause?


Mittwoch, 23. September 2020

Monitoring mit Check_MK:
Wenn die Abfrage mal zu häufig kommt....

Bash...oder auch: Die Magie von "date".

Wer mit einem Bash-Script einen Checkpunkt für ein Monitoring-System wie z.B. Check_MK schreibt, der kennt wahrscheinlich das Problem:
Manchmal übertreibt ein Monitoring-System und ruft seinen Check von Remote so oft auf, dass die Ressourcen des zu überwachenden Clients schlichtweg zu ausgelastet sind.
Das Monitoring hilft also nicht mehr, sondern bringt den zu überwachenden Client zu Fall.

Man kann jedoch die Ausgaben eines Scriptes sehr einfach (selbst) Cachen und sollte das auch selbst übernehmen, denn die Caching-Mechanismen solcher Monitoring-Systeme sind auch gern mal etwas unberechenbar...

Wer z.B. wie gewohnt und brav nach Dokumentation in Check_MK mehrzeilige Ausgaben in /usr/lib/check_mk_agent/local/${CACHE_ZEITINDEX}/mein_check.bash  hinterlegt, der wird feststellen, dass diese nicht (mehr) funktionieren: Das Ergebnis wird einfach verschluckt und nicht angezeigt.
Mehrzeilige Ausgaben funktionieren anscheinend also nur noch in /usr/lib/check_mk_agent/local/ , wo jedoch dann kein Caching stattfindet und man den Client ggf. überlastet.

Ein Teufelskreis. :-) Was nun tun?
Ein kleines "if" mit "date" und die Ausgabe mit "tee" bringt hier einen Ausweg.

Hands on...!

Freitag, 7. August 2020

Wenn das Backup mal verstopft ist....

 ....ja was ist denn schon dabei? 

Da war er wieder, der klassische Moment auf der Console:

Man möchte "mal eben" ein CentOS-System neu aufsetzen und vorsichtshalber die Konfigurationsdateien etc. sichern - man weiß ja nie so recht, ob man doch noch was braucht....

Doch die Backupsoftware sagt "nein" und "Fehler",
für ein dd-image fehlt ein zweiter Speicherort mit Platz
und man weiß grade lokal ohnehin kaum aus dem Stehgreif, was man einpacken sollte.

Na dann.... bist du nicht willig.... dann nehme halt ein wenig Commandline-KungFu...

Donnerstag, 28. Februar 2019

Sag mal Olli: Du liegst doch krank zu Hause...
Wie kopiere ich denn meine Mails von einem Server auf den anderen?

Prima - was zu tun - wenn auch nur einen Moment -
das ist besser als von der Couch aus den Fernseher anzustarren.

Da gibt es das schöne Tool "imapsync", welches in den meisten Linux-Distributionen vorhanden ist.

Also - mal eben Bloggen und erklären, wie schnell das geht.

Sonntag, 17. Februar 2019

Wochenende - "Mal eben" -
authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'

 
authentication unavailable:
no polkit agent available
to authenticate action 'org.libvirt.unix.manage'
Da war des wieder... "Mal eben" die virtuelle Maschine mit einem Job füttern, welchen die verarbeiten kann -
und dann schnell raus an die Luft. ...."mal eben"....

Also "mal eben" vom Mac auf die "Virtualisierungsmaschine" eingelogged -
den virt-manager aufrufen - und...
da war es dann auch, das besagte Fenster:
"authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'"

OOoooouhkay...

Sonntag, 11. November 2018

"Mal eben" eine Platte mit "dd" wegschieben...


"Mal eben" ein Platte mit einem Linux und USB3.0-Festplatten-Adaptern von links nach rechts kopieren - und man merkt, dass die USB-Performance irgendwo im Keller hängt.... dd nimmt einfach keine Fahrt auf und die interrupts machen einen Wahnsinnig....

Klar - man könnte jetzt der Ursache löblich auf den Grund gehen, hier scheinen tatsächlich das Mainboard und der verbaute USB3.0-Controller ein Problem zu haben, oder der Kernel zappelt mit dem Speichermanagement/Schreibcache, aber wie behelfe ich mir so lange - ohne nun lange auch noch diese Baustelle aufräumen zu müssen...?

Mittwoch, 4. April 2018

"Ping oder nicht Ping? Das ist hier die Firewall"

Oder auch: Komm wir schließen "mal eben" eine "1&1-TVBOX Version 1.0" bzw. das "Mediacenter" an.
....oder auch nicht.
Es begab sich mal wieder, dass ich "mal eben" was tun wollte: Wir stellen zu Hause den Telefonanschluss auf 1&1 um und haben uns im Vorhinein schon einmal die Geräte wie das Modem und die Media-Box via eBay besorgt, weil wir keine 3 Euro im Monat "Miete" bezahlen wollten -
und die "alte" Fritz!Box 7490 war für den Hausgebrauch einfach "oversized".

Also mal eben die alten Daten aus der "alten" großen Fritzbox speichern, in die "neue" kleine Fritzbox laden.... das wird bestimmt lus... mo.. hups - wow - läuft! 
Kabel an den Router: Läuft auch. Wahnsinn.

Komm - ich klemme nur noch mal eben die "Mediabox" an - die wird zwar dann sagen "1&1 ist noch nicht da, lieber Kunde du musst noch Gelduld haben" - aber ist mir dann egal. Dann sind wenigstens die Geräte angeschlossen.

Und so nahm der Abend seinen lauf....

Sonntag, 2. April 2017

SSH-Hostkeys auf Linux neu generieren

Wie generiert man eigentlich neue Keys für den Host -
insbesondere, wenn diese fehlen oder defekt sind?
Ganz einfach via ssh-keygen.

Samstag, 1. April 2017

cron und der Absender

Wer seine automatischen eMails seiner Server filtert,  der benötigt eindeutige Absendernamen.
Grade bei "cron" kann das schon einmal wichtig werden.
Doch wie setzt man den Absender?
Ein Blick in die Dokumentation von Cron am Ende der Welt hilft:
Man kann hier so einig Variablen senden....

Donnerstag, 2. März 2017

fail2ban start: ERROR NOK: ("Failed to initialize any backend for Jail 'sshd'",)

Jaja.. da war es wieder.... "mal eben"....
"mail eben" das bekannte "fail2ban" auf "CentOS 6" installieren um ein Jail für sshd zu erzeugen.
...oder auch nicht.
Da nervt doch auf einmal fail2ban herum, es könne die Anbindung an die Logfiles nicht mehr herstellen:

fail2ban start: ERROR  NOK: ("Failed to initialize any backend for Jail 'sshd'",)

....mhrm... mal etwas grübeln, mal etwas suchen -
GEFUNDEN!

Sonntag, 6. November 2016

Virtuelle Netzwerkadapter - CentOS6 und CentOS7

"Mal eben".... ein paar virtuelle Netzerinterfaces unter CentOS 7 anlegen... joah - schon 1000x gemacht..... klar - mach ich...
mhrm...
öh??
was zum Fuchs.....???
neh....
wohl doch nicht :-)

Dienstag, 1. November 2016

Virtualisierter Router -
und die Lehre daraus...


Ja "mal eben" einen Router mit VLANs bauen -
"mal eben" natürlich als virtuelle Maschine -
"mal eben" mal noch die IPta...... *POFF* ......eeeehm...
und weg war er.

Und nun?
.....mit "virsh" kann man eine virtuelle Maschine auf dem Prompt steuern - insbesondere, wenn auf der Virtualisierungsmaschine keine graphische Oberfläche installiert ist.
Dort findet sich sogar in der Hilfe ein Hinweis auf eine Console, wie man es von Sun/Oracle VDOMs kennt. Das ist doch DIE Rettung, die probieren wir doch gleich mal.
Doch.. irgendwie... kommt da nichts...?






Mit viel Mühe habe ich dann einmal die Maschine wieder mit "nbd" gemountet, repariert - und mir die Sache mit der "Notfall-Console" angesehen. Das "Problem" ist recht simpel:
Die hat bei CentOS6 und CentOS7 niemand per "default" aktiviert... Also ganz großes Kino.....
Hätte mir das nicht jemand vorher sagen können....?
Das wollen wir dann doch mal gleich ändern und uns für die nächste virtuelle Maschine merken...
Aktuelles