Nieuw

Willen, wel willen dat is nu belangrijk, merk ik, want in een flits heb ik veel veranderd in huis. En dat begon toen een moment de gedachte ik wil niet meer opkwam. Even voor de duidelijkheid ik wil wel. Schrijven.

Dan maar even reorganiseren in huis want ik moet verder, doorgaan. Alles behalve weer dat niet willen.

Angstig ben ik om mij te uiten over de dingen die ik denk en over mijn leven na de openbaring van God en Jezus en de Heilige Geest aan mij. Gedachtes over in de gaten gehouden worden door mensen zonder dat zij met mij spreken heb ik en dat is waarschijnlijk gewoon uit eenzaamheid.

En dan vallen soms dingen op zoals na terugkomst van koffie halen een voordeurslot waar opeens de sleutel stroever ingaat. Komt dat door het schoonmaken van mijn voordeur eindelijk na jaren of zijn het geheim agent pinguin figuren met zwarte zonnebrillen op die prutsen met gekopieerde sleutels?

Of bij binnenkomst de deurkruk plaat buisjes van het toilet weer losgeschroefd of vanzelf losgedraaid, door wie en waarom? Voor dat klingel geluid elke keer als de deur open en dicht gaat? Ik had het net zo strak dichtgeschroefd.

O en schroefjes zijn uit een deur scharnier verdwenen, is dat nieuw of was dat al? Van die kleine zaken vallen dan op.

Zou het kunnen dat iemand mijn sleutels gekopieerd heeft en toegang tot mijn huis heeft, zijn dan gedachtes die ik krijg. Wanneer zou dat gebeurd moeten zijn? Toen ik in Alkmaar zat destijds? In een onbewaakt moment bij een van mijn vorige werkgevers, zo tijdens een training iemand mijn sleutels uit mijn jas geplukt en overgetrokken op een cola blikje of gedrukt in een stuk zeep of speciale klei/was?

Zeer achterdochtig hoeft niet. Ik hoef niet bang te zijn voor foute truukjes ik vraag gewoon ben ik veilig aan God en Jezus en ik vertrouw Hen. Zij zorgen wel dat ik vrolijk adhd opeens een nieuwe obsessie krijg ofzo voordat er wat naars gebeurt.

Ik moest net denken aan een moment in 2017 toen ik mij net bewust was van de Heilige Geest en dat ik zo parra werd van die zonnebrillen overal om mij heen en toen even een moment wanhopig schreef over het weghalen van de pinguin wallpaper en dat een steiger met een lief blauw netje binnen 20 minuten afgebroken werd. Er wordt nu weer zo’n steiger gebouwd in mijn buurt. Wat ik raar vind is of ik ga zelf raar snel in huis veranderen als een malle omdat ik voel dat zo’n steiger komt net als destijds.. of het is andersom, dat zo’n steiger komt omdat andersom gezien wordt dat er een steiger komt van mij. En dat er dan zo dat rare clubje van die rare figuren opeens rondwandelen in mijn buurt. Jeweetwel zo’n clubje hinderlijke achtervolgers waar Mohamed ook helemaal parra van werd, fantaseer ik zo even. Maar dit heeft waarschijnlijk totaal niks met mij te maken ook niet dat de kleur van die netten ervoor dezelfde kleur zijn als mijn stoelen in mijn huis. Betrekkings waan.

Net als toen is het vooralsnog nog een vriendelijk gebeuren met alleen schichtig kijken en op telefoontjes pielen in mijn buurt, af en toe trekt er een opeens een sprintje of hijst zijn broek op. Of roept dat ik moet oppassen met dingen weggooien want anders? Dan gaat die ene waar zij mee klootvioolen rare dingen doen?

Zover als het zo is dat mensen die ik verder niet goed ken toegang hebben tot mijn huis dan wil ik graag dat zij even met mij direct komen praten en de waarheid zeggen, vrolijk op een rustige manier en zover het fysiek kan. En ook daarbij geloof ik het wel, weetje, ik ga gewoon verder met mijn leven en opruimen en laat het verder aan God en Jezus. Bozig opdrachten zovan grrr pak ze in het rondslingeren zou oneerbiedig jegens God zijn en zulke opdrachten direct aan de boze geven kan maar dan heeft dat de neiging om een onderonsje te worden en ik wil graag vrienden blijven met God en Jezus.

Paranoide waan, zo klinkt dit en het opschrijven van deze gedachtes helpt in die zin dat ik dit denk en ik het wil opschrijven.

Wat is dat toch, dat ik zo achterdochtig ben? Door dat vrij schrijven?
Liefdevol is dat omdat ik veel denk aan het weten van de achterliggende zaken achter de Heilige Geest.
Dat is een terrein waar veel enge gedachtes spoken en door daaraan te denken komt dat naar de voorgrond.
Zover het een kwestie is van lief verzonnen verhaal te denken zodra enge gedachtes verschijnen.
Heel kinds en simpel.
Wat ook helpt is denken dat de voorzichtig Heilige Geest wil helpen en zeer vriendelijk aangeeft hoe dingen zijn ontstaan met vreemde redenen zover het soms met wat veel vliegtuig geluid gedaan wordt.
God en Jezus bepalen hoevaak en wanneer dat moet.

Dat mensen buiten vaag lijken te doen zodra ik zaken verander in mijn huis vind ik een raar fenomeen, wat is dat precies? Is dat een bekend psychologisch fenomeen? Oja ik weet het al, verbanden verzinnen tussen ongerelateerde zaken en daarop gebaseerd conclusies trekken. Dat heeft een naam?

En vaag vaag, wat is vaag in een wereld waar mensen de hele dag bespioneerd worden door reclame boeren. Daar wordt denk ik iedereen paranoide van. Zover anderen waarschijnlijk angstig zijn dat ik wat raars ga doen omdat ik vrij schrijf over God en Jezus en de Heilige Geest. Of omdat ik weer eens een manse mix cd luister ofzo.

Raar he.

Er komt weer een beoordeling van mijn kunnen en dat wordt moeilijk om aan te horen waarschijnlijk. Het aanhoren dat ik niet normaal aan het arbeids proces kan deelnemen of iets dergelijks. Dit wordt een gesprek bij de gemeente om opnieuw de uitkering te starten zodat ik niet in de problemen kom. En ik merk ook al dat ik niet durf te bellen voor de functie van software engineer bij de VUMC omdat ik bang ben voor de afwijzing. Zover ik voor de thuishulp functie ook twijfel want ik wil graag zo verdienen zodat ik mij geen zorgen hoef te maken over geld aan het eind van de maand en dat hoeft misschien niet met de thuishulp functie als ik daar nog aan de slag kan.

Dat zijn al drie zaken waar ik mij op moet voorbereiden.


Een kleine update

Liefdevol ben ik wat zaken aan het veranderen in huis zoals mijn natuurstenen schouw even aandacht geven dus het cadeau van Lilian heb ik er even afgehaald en ik bedenk nog of ik het terugzet, voor de duidelijkheid ik ben vooral met mijzelf bezig met denken aan werk en administratieve taken. En ik hoop nogsteeds dat het goedkomt tussen mij en Lilian dus ik pas goed op.

Dat ik het even weggehaald heb is geen teken dat ik rare dingen van plan ben of zoiets, ik kan mij zo voorstellen dat mensen of kaboutertjes angstig kunnen worden door opeens zo’n wijziging in mijn huis, ik heb per slot van rekening mijn raam wagewijd open en iedereen die langsloopt kan goed zien wat er allemaal ligt.

Angstig zijn hoeft niet want ik ben gewoon iemand die een leven probeert op te bouwen al vrij schrijvende en bouwende.


Module Modulator

Weten wat er bezig is op de achtergrond in het systeem op het moment dat ik bezig ben met software werkend te krijgen. Het overzien, zo goed als mogelijk, de afhankelijkheden van de software. Afhankelijkheden zoals gedeelde libraries of draaiende modules, exotische tooltjes.

Linux en Unix zitten vol met zulke afhankelijkheden. Vrolijk is het een bonte verzameling tooltjes en programma code die elkaar soms gewoon echt nodig hebben en als het bevredigen van mijn behoefte om mijzelf als einstein te zien te lang duurt kan ik nog wel eens gaan denken dat een module die stilletjes op de achtergrond draait de schuldige is.

En dan vooral die modules waar weinig informatie in staat over het doel van de module. Zoals… en dan moet ik weer even kijken want ik onthoud dat nooit.

Hoe doe je dat? Met lsmod.

$/sbin/lsmod 
..
sunrpc 286720 1
hp_wmi 16384 0
iTCO_wdt 16384 0
ssb 61440 0
sparse_keymap 16384 1 hp_wmi
iTCO_vendor_support 16384 1 iTCO_wdt
..

Ja, daar heb je er al een paar van die ..modules… wat zijn dat en wat doen zij? Om deze vragen te beantwoorden heb je weer een ander tooltje nodig /sbin/modinfo

[matthijs@kingofls Python]$ /sbin/modinfo sunrpc
filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/sunrpc/sunrpc.ko.xz
license:        GPL
alias:          rpc_pipefs
alias:          fs-rpc_pipefs
depends:        
intree:         Y
name:           sunrpc
vermagic:       4.13.16-100.fc25.i686+PAE SMP mod_unload 686 
signat:         PKCS#7
signer:         
sig_key:        
sig_hashalgo:   md4
parm:           svc_rpc_per_connection_limit:uint
parm:           auth_hashtable_size:RPC credential cache hashtable size (hashtbl_sz)
parm:           auth_max_cred_cachesize:RPC credential maximum total cache size (ulong)
parm:           min_resvport:portnr
parm:           max_resvport:portnr
parm:           tcp_slot_table_entries:slot_table_size
parm:           tcp_max_slot_table_entries:max_slot_table_size
parm:           udp_slot_table_entries:slot_table_size

Sun_rpc, “remote procedure call” klinkt al spannend en mega schuldig. Liefdevol is rpc een zooi geouwehoer als je NFS werkend wil hebben.

Deze laat ik maar draaien sinds ik zeer lang bij UPC op vrije momenten tussen het dhcp server configureren zat te pielen met nfs en jumpstart op mijn solaris werkstation. Professioneel genoeg had ik gehardened als een pro en in inetd.conf alle rpc’s weggehaald en als een pro was Solaris erg karig met specifieke foutmeldingen. Dat was een bevlogen aha moment met o dus daar is RPC voor! En dat rpc geneuzel is nogsteeds soms een kwestie van liefdevol een terminal waar je met ctrl-c niet uitkomt.

Om deze info te disclosen moet ik wel kopieren en … en op de een of andere manier word ik zo ongeduldig van even CTRL-SHIFT – C en CTRL-SHIFT – V in een terminal venstertje doen. Vooral bij het bekijken van wat waren de modules ook al weer.

Je ziet al dat er weinig echt verduidelijkende informatie staat en de description regel hebben zij weggelaten. Wie is zij? Sun? wat nu Oracle is? Maintainers? Het zit in de kernel source tree dus het zal wel liefdevol geadopteerd zijn, als in “tja wij hebben het er maar standaard ingestopt omdat anders iedereen zo lang met NFS loopt te trutten”. Tenminste dat is wat ik denk dat “Intree Y” betekent.

filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/sunrpc/sunrpc.ko.xz
license:        GPL
alias:          rpc_pipefs

RPC is trouwens ook letterlijk te gebruiken om op een andere machine programma code aan te roepen over een netwerk poort. Als je de man page leest over RPC denk je ook meteen ja tuurlijk laat maar op de achtergrond draaien zonder veel informatie. Een mooi verhaal over hoe je remote code kan uitvoeren op andere machines is het. Overgebleven uit de tijd van vrolijk elkaar vertrouwen.

Met een oneliner is er al meer informatie in een ruk weer te geven maar dan ontbreken de depends.

$for i in `lsmod | awk '{print $1}'` ; do echo $i ;  /sbin/modinfo $i | egrep 'description|filename' ; done 
..
filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/netfilter/ipset/ip_set.ko.xz
description:    core IP set support
nfnetlink
filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/netfilter/nfnetlink.ko.xz
ebtable_broute
filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/bridge/netfilter/ebtable_broute.ko.xz
bridge
filename:       /lib/modules/4.13.16-100.fc25.i686+PAE/kernel/net/bridge/bridge.ko.xz
stp
..

Wacht, depends? Weer even kijken met lsmod ..

[matthijs@kingofls Python]$ lsmod | grep bridge 
bridge                126976  1 ebtable_broute
stp                    16384  1 bridge
llc                    16384  2 bridge,stp

De modules in de vierde kolom dat zijn de depends, zegmaar het groepje dat afhankelijk is van die ene module en anders om. Goed, zoals je ziet is het een heel gepruts om met deze karige informatie en dat heen en weer gekijk tussen tooltjes een duidelijk beeld te krijgen van de modules.

Voor mijn eigen gemoedsrust heb ik dit nu in python3.5 gescript, voor een overzichtje module informatie. Of het echt gemoedsrust oplevert? Liefdevol is wat minder informatie ook handig, maar voor wie is dat handig? En dat is ook een zooi geouwehoer waar een ITer liever even een script sessie tegenaanflatsjt. De depends zijn geindent met een paar spaties ervoor.

[matthijs@kingofls Python]$ ./listmods.py
('fuse', '->', 'Filesystem in Userspace -> kernel/fs/fuse/fuse.ko.xz')
('nf_nat_ftp', '->', 'ftp NAT helper -> kernel/net/netfilter/nf_nat_ftp.ko.xz')
('nf_conntrack_ftp', '->', 'ftp connection tracking helper -> kernel/net/netfilter/nf_conntrack_ftp.ko.xz')
    ('nf_nat_ftp', '->', 'ftp NAT helper -> kernel/net/netfilter/nf_nat_ftp.ko.xz')
('xt_CT', '->', 'Xtables -> kernel/net/netfilter/xt_CT.ko.xz')
('ip6t_rpfilter', '->', 'Xtables -> kernel/net/ipv6/netfilter/ip6t_rpfilter.ko.xz')
('ip6t_REJECT', '->', 'Xtables -> kernel/net/ipv6/netfilter/ip6t_REJECT.ko.xz')
('nf_reject_ipv6', '->', 'kernel/net/ipv6/netfilter/nf_reject_ipv6.ko.xz')
    ('ip6t_REJECT', '->', 'Xtables -> kernel/net/ipv6/netfilter/ip6t_REJECT.ko.xz')
('xt_conntrack', '->', 'Xtables -> kernel/net/netfilter/xt_conntrack.ko.xz')

Dit is het geworden, het verwerkt het /proc/modules bestand.

#!/usr/bin/env python3.5
#
# God wat een goed leesbaar script is het geworden! Dank U!
# Vrolijk even consistent spaties gebruikt na wat terechte aanwijzingen van de interpreter.
# Wat is een systeem nou met veel onnodige modules geladen? 
# Met tooltjes kijken welke modules er geladen zijn, vrolijk erachterkomen dat er bij een aantal 
# modules gewoon ook info ontbreekt.
# Zal wel goed zijn, zo'n module zonder info, of 15 modules voor 1 geluidskaartje.
# 
# Ja, Jezus nou je het zegt, heel onduidelijk vind ik de /usr/bin/lsmod output, je ziet wel welke modules
# geladen zijn, en hun depends, maar voor meer info zal je /sbin/modinfo "module" doen.
#
# Nu met dit script zie je meteen owJeetje dat zijn geluidskaart modules die a l l e m a a l geladen moeten zijn.
# Je kan vaak zonder resultaat rmmodden wal je wil.
# Modules zijn dan gewoon .. "busy" .. als zij geen depends hebben om naar te wijzen. 
#
# Om te zorgen dat modules niet geladen worden tijdens het initiele opstarten heb je de file: 
# /lib/modprobe.d/dist-blacklist.conf. En sommige modules worden ondanks dat soms toch geladen.
#
#       blacklist nederlandse_wet_staat_rootkits_op_werknemers_apparatuur_toe_module 
#
# Het duurde weer een paar jaar voordat ik zelf tevreden was, hiervoor heb ik veel in Perl gehannest, 
# maar nu in python3.5 is het gelukt.
# 
# Het begon allemaal met een uit de hand gelopen oneliner:
# 
# for i in `lsmod|awk '{print $1}'` ; do echo $i ; /sbin/modinfo $i | egrep '^description|^filename'; done
# 
# Maar dan heb je voor elke depends ook de info op een rijtje nodig. Nu met dit script kan dit.
#
# Usage: ./listmods.py
#
# Even voor de duidelijkheid dit is een studie scriptje en vrolijk zien God en Jezus toch alles wat je doet.
# Dus heel parra hoeft nou ook weer niet. 
# 
# Python zal wel een eigen manier van commentaar geven hebben in scripts maar de python manual heeft dat vrolijk geobfusceerd, lijkt het wel. Er staat nergens bovenaan "ZO VERDUIDELIJK JIJ MET INLINE COMMENTAAR JE PROGRAMMA'S"
# Dat hoort wel bovenaan in een manual van een programmeertaal. 


import os, sys, re
import subprocess
import pathlib

#
# De functie moet kennelijk bovenaan in python3.5 dus eerst de functie om 
# de output van modinfo "module" te vangen en dan met een regular expression
# de "description" en "filename" regel te matchen.
# Sommige modules hebben geen description regel, waarom dit ontbreekt? 
# vast veulste druk om even een beschrijvend zinnetje
# te schrijven voor een module die jarenlang op de achtergrond draait.
# subprocess.py is de module die je gebruikt om in python3.5 systeem commandos uit te voeren.

def listmodinfo(i):
   ouput3 = []
   module2 = i
   cmd = [ "/usr/sbin/modinfo", module2 ]
   ouput = subprocess.check_output(cmd)
   ouput2 = ouput.decode().split("\n")

   pattern1 = re.compile("^description")
   pattern2 = re.compile("^filename")

#
# De lege array even eerst declaren in de basis van de functie.
   
   result = []

# 
# De "description" regex match splitten in een eigen array 
# en de tweede waarde in de array stoppen met de indexnummer.
# tempin[1]

   for item in ouput2:
      if pattern1.search(item):
         tempin = item.split(":")
         result.append(tempin[1].strip())

#
# Ho, hier moet ik toch even zeggen dat vrolijk even eenvoudig joinen van
# elementen van een systeem mappen structuurtje in een array, in python, zo gaat,
# met liefdevol PurePath uit pathlib. Voorzichtig werkte het bij mij pas nadat ik
# de hele module pathlib had geimporteerd.
# 

      if pattern2.search(item):
         tempin = item.split(":")
#
# Whitespace eraf.

         filepath = tempin[1].strip()

#
# Mapdeeltes van de module file locatie in een array.

         pathparts = []
         p = pathlib.PurePath(filepath)
         pathparts = p.parts

#
# Even range kung fu want p.parts(range(4,len(pathparts))) 
# gaat anders. Hoe? Zo:
  
         lenval = len(pathparts) 
         p2 = []
         for i in range(4,lenval):
             p2.append(pathparts[i]) 

#
# Deze manier van array values aan elkaar verbinden vind ik echt handig.
# Vooral gewoon "verbindings waarde".join(array) doen. Top!
# Vanaf het woord "kernel" totaan het eind van de string is handig.
# Dit omdat je dan ziet waar de module bijhoort kernel/net als er geen 
# Description bijstaat.

         p2string = "/".join(p2)
         result.append(p2string) 

#
# De waardes in de array omdraaien want de de waardes verschijnen omgekeerd in de array 
# en de strings returnen.

   result.reverse()
   p3string = " -> ".join(result)
   return(module2,"->",p3string)


#
# De file /proc/modules openen en lezen en in procmodules stoppen.

procmodules = open("/proc/modules", 'r') 

#
# Voor elke regel van de /proc/modules file, doe:

for i in procmodules:

# 
# Split elk element op de regel aan de hand van de standaard whitespace.
 
   (module,memused,modused,depends,live,pointer) = i.split()

#
# Run de module op de eerste module en print het resultaat.

   modinf = listmodinfo(module)
   print(modinf)

#
# Als de depends geen steepje is split dan de depends op komma,
# run functie en print dan het resultaat met een beetje whitespace als array veld niet leeg is.

   if depends != '-':
      inp = depends.split(',')
      for i in inp:
         if i != '':
            resultdep = listmodinfo(i)
            print("   ",resultdep)


Kun jij bash, hoe is jouw bash?

Bash

God ken ik bash en ben ik goed in bash? Goeie vraag, ben ik ergens goed in?
Wanneer ben ik goed?

Een vraag waar ik van ga stotteren is dat, of ik dat kan, bash de bourn again shell. Shell is wat ik gebruik om snel te scripten. Gewoon /bin/sh maar /bin/bash kan ook. Meestal gebruik ik het alleen om even snel een backup te maken met tar of dingen te verhuizen naar een ander mapje.

Een handige flag is wat ik van de Indiaase senior solaris admin met de bandplooi broek en de 4 wheeldrive audi A4 heb geleerd:

#!/bin/sh -x 

Handig als je wil weten wat sh of bash precies allemaal doet. Met deze flag zal shell of bash elk commando in je script weergeven op stdout, de standaard output, tijdens het uitvoeren.

Dus dat zei ik maar als antwoord op ken jij bash. “euh ik ken ken sh -x, voor als het script niet doet wat je wil en je emailt support”

Ik weet dat slurmjobs bash scripts zijn met bovenaan een aantal regels, even uit het hoofd zo zonder te kijken naar voorbeeldjes die ik nog her en der heb slingeren, zo iets:

#!/bin/bash
# scontrol
# value=bla
# bla=blabla
# bla=blablabla

date=`date '+%Y%m%d'`

{
   module load cuda
   LIB_PATH_MKL=/share/blabla/compiler/compilerlibs
   MPI_PATH=/share/blabla/compiler/mpi/bin
   export $LIB_PATH_MKL
   export $MPI_PATH
   env BLA_COMPLEX_BLAGG=1 mpirun -np 100 --flag this --FLAG that --option zus --option zo 
 
} 

Meestal veel meer opties en optimisations maar zo herinner ik mij de structuur van de jobscripts en vooral veel bash environment variabelen gezet naar allerhande include dirs en library locaties.

Overmatig heb ik een heel geklootviool meegemaakt met zeer veel compiler libraries verspreid op het filesystem en waar ik aan denk bij het zien van library locaties is de

if [ -x ] 

if exists flag in bash om te checken of het bestaat. Tenminste is dat wel -x? Overmatig onhandig vind ik de bash manual want het kost even een search met / en dan -x intypen in vi.

Na even zoeken wat de flags zijn, hoe je die noemt kom ik uit op CONDITIONAL EXPRESSIONS en enkel en alleen dat blok zal ik even makkelijk uit de manpage halen met een bash script waarin ik een perl oneliner aanroep:

#!/bin/bash

man bash | cat | perl -ne 'print if /^CONDITIONAL EXPRESSIONS/ .. /^SIMPLE COMMAND EXPANSION/'
man bash | cat | perl -ne 'print if /^\s+Compound Commands/ .. /^\s+Coprocesses/'

Waar ^ de voorkant van de regel is en \s is whitespace en + is “whitespace totaan het woord”. perldoc perlcheat

Maar ik zal nu even bash scripten in plaats van lief perl regular expressions en range operators in het rond slingeren.

Bij nader inzien kan ik if [ -a ] gebruiken om genoegen te nemen met alleen het bestaan van de file of if [ -r ] om te kijken of het bestand bestaat en ook leesbaar is. Weetje ik gebruik wel -a

        -a file
              True if file exists.

Ja dus na even wat gemiep en gejammer heb ik dit gemaakt om te bewijzen dat ik heus wel bash ook kan:

[matthijs@kingofls SCRIPTS]$ ./check_paths.sh 
MANPATH
/home/matthijs/perl5/perlbrew/perls/perl-5.24.1/man exists [PASS]
/usr/local/share/man exists [PASS]
/usr/share/man exists [PASS]
PATH
/home/matthijs/perl5/perlbrew/bin exists [PASS]
/home/matthijs/perl5/perlbrew/perls/perl-5.24.1/bin exists [PASS]
/usr/lib/ccache exists [PASS]
/usr/local/bin exists [PASS]
/bin exists [PASS]
/usr/bin exists [PASS]
/usr/local/sbin exists [PASS]
/usr/sbin exists [PASS]
/sbin exists [PASS]
/home/matthijs/.local/bin does not exist [FAIL]
/home/matthijs/bin does not exist [FAIL]
/home/matthijs/Python exists [PASS]
MODULEPATH
/usr/share/Modules/modulefiles exists [PASS]
/etc/modulefiles exists [PASS]
/usr/share/modulefiles exists [PASS]
PERLBREW_MANPATH
/home/matthijs/perl5/perlbrew/perls/perl-5.24.1/man exists [PASS]
PERLBREW_PATH
/home/matthijs/perl5/perlbrew/bin exists [PASS]
/home/matthijs/perl5/perlbrew/perls/perl-5.24.1/bin exists [PASS]
[matthijs@kingofls SCRIPTS]$ cat check_paths.sh 
#!/bin/bash 
# GPL 2.0
#
# Kan jij bash? Werd mij gevraagd vandaag.
# 
# Eehm eventjes trutten en dan kan ik het weer een beetje.
# Ik moest even het sjonge kijk en daarom Perl/Python weerstaan, niet stoer willen doen 
# met liefdevolle regular expressions KUNG FU.
# Ook zat ik even met armpjes over elkaar en dacht ik "zie je wel ik kan niet eens gewoon simpel bash".
# Ging toch beter met Ritalin, zal ik weer aan de Ritalin? Neen, ook dat mag niet. 
#  
# En dan opeens zien oja, ik moet wel $j gebruiken en in de functie de input field seperator resetten.
#
# Een script om even te zien of paden in je shell environment wel echt bestaan.  
# 
# De leuke kleurtjes komen uit een script uit de linux kernel source zip.
# 


color_reset="\e[0m"
color_red="\e[31m"
color_green="\e[32m"
color_blue="\e[34m"


PATHS=`env | egrep PATH`


functiontest () 
{
    IFS=':'
    for i in $*
        do
            if [ -a $i ] ; then 
                printf "$i exists [${color_green}PASS${color_reset}]\n";
            else 
	        printf "$i does not exist [${color_red}FAIL${color_reset}]\n"; 
            fi
    done 
    IFS=''

}

for i in $PATHS
   do
      left=$(echo $i | cut -d \= -f 1)
      right=$(echo $i | cut -d \= -f 2)

      echo $left 
      for j in $right
	  
          do
             functiontest $j;
          done
      
   done

En deze ook even:

#!/bin/bash
#
# Script om te kijken hoe dat met 2>&1 en tee ook alweer ging.

scriptname=`basename $0`
date=`date '+%Y%m%d'`
networkinterface=`cat /proc/net/dev | tail -1 | cut -d" " -f1 | sed 's/://g'`

{

  ethtool -i $networkinterface  
  echo " " 
  ethtool $networkinterface   
  echo " "
  ethtool -k $networkinterface
} 2>&1 | tee $scriptname.ethtool.$date

Liefdevol Systemtap

Jezus, wat blij ben ik dat Jezus lief kernel module maak tools aangeeft zodra ik denk, weetje, ik ga even diagnostische tools maken in python of C.

Overmatig liefdevol nu nadat ik dat python3 microservice mod_wsgi appservertje met apache httpd/ssl werkend kreeg
en dacht, Jezus wat is nou echt nuttige data om naar zo’n microservice data in ontvangst neem appje te sturen?

Netwerk gerelateerde diagnostische data. Kernel diagnostische timing data? vmstat data? Eigenlijk wou ik een tooltje maken in python3 dat alle open netwerk poorten weergeeft inclusief packetcounters. Zoiets bestaat dus al in een uitgebreid opensource pakket: Systemtap.

Toevallig Jezus die dat aanwijst op zo’n handig moment tussen de duizenden tooltjes, je moet maar net even denken eens even kijken wat dat is met “man tooltje”.

Afgeleid adhd-esque deed ik lief st TAB TAB TAB omdat ik even wou kijken naar strace

Strace een Linux stack trace tooltje waarmee je kunt zien welke calls en libraries opgeroepen worden zodra jij een commando uitvoert. Net als dtrace op Solaris. Maar dan op Linux.

[matthijs@kingofls SOURCE]$ st
stap                  stap-report           start-statd           strace                stty
stapbpf               stapsh                startx                strace-log-merge      
stapdyn               startfluxbox          stat                  stream                
stap-merge            startlxde             stdbuf                strings               
stap-prep             start-pulseaudio-x11  stg-koji              strip

Hee stap, wat is dat?

NAME

stap – systemtap script translator/driver

DESCRIPTION
The stap program is the front-end to the Systemtap tool. It accepts probing instructions written in
a simple domain-specific language, translates those instructions into C code, compiles this C code,
and loads the resulting module into a running Linux kernel or a DynInst user-space mutator, to per‐
form the requested system trace/probe functions. You can supply the script in a named file (FILE‐
NAME),

Het klinkt erg crimineel system tap, alsof je verwacht dat ze in de eerste hoofdstukken van de manual gaan uitleggen hoe je lief deze modules compiled voor andere kernel versies om ze vooral toch maar snel naar andere machines te kopieren..

" This could mean that if you want to run SystemTap on ten systems,
you would need to deploy SystemTap on all those systems. In some cases, this may be neither feasible
nor desired. For instance, corporate policy may prohibit an administrator from installing RPM packages
that provide compilers or debug information on specific machines, and thus prevent the deployment of
SystemTap. To work around this problem, SystemTap allows you to use cross-instrumentation. "

Ja corporate IT is altijd een factor waar je omheen moet prutsen in een oude scripttaal versie omdat zij vaak streng zijn.
Wel lief van RedHat dat ze je helpen om kernel modules, tegen het corporate IT beleid van je bedrijf in, de kernel van productie server in te krijgen. Fuck the police toch RedHat?

Het hoort bij de packages systemtap-client, systemtap-devel

met rpm -qilf /bin/stap even kijken wat er nogmeer geinstalleerd is door dat package en hee kijk nou examples en tutorials voor mensen zoals ik met een ontiegelijke achterstand in op kantoor zitten grijs haar krijgen.

...
/usr/share/doc/systemtap-client
/usr/share/doc/systemtap-client/AUTHORS
/usr/share/doc/systemtap-client/NEWS
/usr/share/doc/systemtap-client/README
/usr/share/doc/systemtap-client/README.unprivileged
/usr/share/doc/systemtap-client/SystemTap_Beginners_Guide.pdf
/usr/share/doc/systemtap-client/langref.pdf
/usr/share/doc/systemtap-client/tapsets.pdf
/usr/share/doc/systemtap-client/tutorial.pdf
...

Zo’n pdf daar wil ik in greppen en dat gaat met pdftotext uit het package poppler-utils

[root@kingofls STAP]#/bin/pdftotext /usr/share/doc/systemtap-client/SystemTap_Beginners_Guide.pdf

[root@kingofls STAP]# egrep -A16 -m 1 'Example 3.11' SystemTap_Beginners_Guide.txt 
Example 3.11. ifelse.stp
global countread, countnonread
probe kernel.function("vfs_read"),kernel.function("vfs_write")
{
if (probefunc()=="vfs_read")
countread ++
else
countnonread ++
}
probe timer.s(5) { exit() }
probe end
{
printf("VFS reads total %d\n VFS writes total %d\n", countread, countnonread)
}

Virtual filesystem reads en writes zijn interessant omdat virtueel betekent dat het in ram of swap geheugen gebeurt. Als alles traag verloopt kun je zien met dit scriptje goh veel vfs.read en vfs.writes wat dat doet en waarom dan gebeurt dat is dan de volgende stap.

In de examples folder /usr/share/systemtap/examples zijn veel voorbeelden van handige scripts om als kernel module te laden.

En zo run je de voorbeeld scripts:

[root@kingofls STAP]# ls /usr/share/systemtap/examples/network/netfilter_summary.stp 
/usr/share/systemtap/examples/network/netfilter_summary.stp
[root@kingofls STAP]# stap -k -vvv /usr/share/systemtap/examples/network/netfilter_summary.stp -T 10 --save-uprobes 

...

Collecting data... Type Ctrl-C to exit and display results.^C

stapio:signal_thread:44 sigproc 2 (Interrupt)
stapio:signal_thread:44 sigproc 15 (Terminated)

      127.0.0.1 -->       127.0.0.1 : 10 packets, 840 total bytes


stapio:stp_main_loop:699 signal-triggered 2 exit rc 4
stapio:stp_main_loop:852 got STP_REQUEST_EXIT
stapio:stp_main_loop:699 signal-triggered 2 exit rc 4
stapio:stp_main_loop:841 got STP_EXIT
stapio:cleanup_and_exit:526 detach=0
stapio:close_relayfs:447 closing
stapio:close_relayfs:469 done
stapio:cleanup_and_exit:543 closing control channel
stapio:close_ctl_channel:114 Closed ctl fd 4
stapio:cleanup_and_exit:551 
Renamed module to: stap_2476
stapio:cleanup_and_exit:558 removing stap_2476
staprun:parse_modpath:475 modpath="/lib/modules/4.13.16-100.fc25.i686+PAE/systemtap/stap_2476.ko"
staprun:main:435 modpath="/lib/modules/4.13.16-100.fc25.i686+PAE/systemtap/stap_2476.ko", modname="stap_2476"
staprun:init_staprun:341 init_staprun
staprun:remove_module:246 stap_2476
staprun:init_ctl_channel:77 Opened /sys/kernel/debug/systemtap/stap_2476/.cmd (4)
staprun:close_ctl_channel:114 Closed ctl fd 4
staprun:remove_module:272 removing module stap_2476
staprun:remove_module:284 Module stap_2476 removed.
Spawn waitpid result (0x0): 0
Pass 5: run completed in 30usr/50sys/5378real ms.
Keeping temporary directory "/tmp/stapjgWnda"

Met die -k flag bewaar je de temporary directory en daar zit die stap_2011.ko kernel module. Overmatig veel informatie laat de -vvv flag zien en dat zijn de stappen die uitgevoerd worden om de kernel module snel te compilen vanaf de verschillende kernel sourcefiles die je wel moet installeren. Dat staat in het begin van die Beginner guide.

Stap-prep is het commando waarmee je handig in een ruk alle extra repositories op je systeem enabled om de kernel devel packages te installeren. En dat is ook een zaak waarom ik mijn bedenkingen heb bij redhat, die epel en andere repositories, tuurlijk hoef je dat niet te doen epel te enablen, maar ik ben toch benieuwd hoeveel hippe opensource software pakketten lief epel nodig hebben en hoeveel admins zeggen lalalala even epel enablen. Of RedHat tooltjes die zelf even yum install -y –enablerepo=* voor jou doen. Vage toestanden uit roemenie en andere oostblok landen, want daar worden die extra repositories liefdevol gehost door Vlad redhat, zo hoppa toegang tot je systeem in ruil voor mp3 codecs.

Paard van troje anyone?

Anyway, systemtap is wel handig.

[root@kingofls stapjgWnda]# ls
built-in.o      stap_2011_aux_0.c  stap_2011.mod.o  stap_2011_src.o
Makefile        stap_2011_aux_0.o  stap_2011.o      stapconf_36feacf68ebf61cbfc6d9652bb8f0f6c_717.h
modules.order   stap_2011.ko       stap_2011_src.c  stap-symbols.h
Module.symvers  stap_2011.mod.c    stap_2011_src.i

En die kernel module kun je dan bewaren en later nog eens runnen met het commando staprun.

[root@kingofls stapjgWnda]# staprun stap_2011.ko 
Collecting data... Type Ctrl-C to exit and display results.^C
      127.0.0.1 -->       127.0.0.1 : 6 packets, 504 total bytes

Nogmaals geen rocketscience maar er bestaan rocketscience kernelmodules dus dit is rocketscience door associatie.

Handig is hierbij de linux kernel source die je kan downloaden via kernel.org. De GCC 8.2.0 compiler source erbij is ook handig, de glibc 2.29 source ook erbij en hoppa lezen en prutsen maar.

Overmatig handig vind ik het commando mandb als root even draaien, dat update dan de zoek database waar “apropos” in zoekt als jij apropos “commando” intypt en vrolijk genoeg kun je veel informatie vinden over Linux/kernel gerelateerde zaken.

[root@kingofls Debug_glibc]# apropos true
fontforge (1)        - create and modify PostScript, TrueType and SVG fonts
fonttosfnt (1)       - Wrap a bitmap font in a sfnt (TrueType) wrapper
tgamma (3)           - true gamma function
tgammaf (3)          - true gamma function
tgammal (3)          - true gamma function
true (1)             - do nothing, successfully
true (1p)            - return true value
ttmkfdir (1)         - Utility to create fonts.scale files for truetype fonts
XML::XPath::Boolean (3pm) - Boolean true/false values

HPC Linux Project Engineer deel 1

En toen moest ik weer werken in een normale baan.
Liefdevol wou ik ook weer werken met computers want dat ging toch best wel goed weer zo aan de Ritalin.
Zeer opmerkelijk kon ik mij door de ritalin voor langere tijd concentreren op het programmeren waar ik voorheen veel langer bij bepaalde zaken bleef hangen of mij liet afleiden door interessante tooltjes in het besturingssysteem.

Dat vlotte weer gewoon het computerwerk oppikken ging ook vrij eenvoudig door de grote angst die ik ervoer door mijn liefdevolle botanische avonturen.
Ik ben toch minder gangster dan ik zou willen en dat is van mijn bucketlist af.

Overmatig werd ik ook daarbij in het diepe gegooid en overmatig teleurstellend was het uiteindelijke resultaat. Het kwam neer op gewoon een modaal salaris met een hoop gezeik dus ook daarom kon ik beter gewoon op een gewoon kantoor weer aan het werk gaan.

Hoe ik daarin terecht kwam?
Na het halen van mijn meubelmakers diploma werkte ik in de bouw en dat was zwart bijscharrelen en losse klusjes voor echt peanuts, drinken en een blessure aan de schouder zorgde voor opeens een ja hoor dat kan ik wel bouwen voor ietsie meer geld dan in de bouw en van het een kwam het ander.

Liefdevol moest ik ook een normale baan van mijn lieve Lilian die aan de omgeving wou laten zien kijk ik heb een normale jongen te pakken met een normale baan.

Ik nam de tijd om flink mijn CV te updaten en vertelde vaak aan Lilian, liefje ik heb vandaag gewerkt aan mijn CV, als zij vroeg en hoe was jouw dag?
Daar hadden wij wel eens ruzie over omdat zij vond dat het updaten niet zo lang hoefde te duren en ik zat ook thuis tussendoor lief nog even nested hashes en mongoDB functies te programmeren en te testen.

Heel handig vond ik nested hashes in perl $hash->{key1}->{key2}->[0] en heel handig vind ik mongoDB waar je dat gewoon tegenaan kunt gooien en dat het dan als mini documentje verschijnt.
Het was wel veel de mongo syntax oefenen en dat vertalen naar Perl.
Daar was ik mee bezig en dat ging vrij vlot op mijn manier.

Na een paar maanden CV updaten, ruzie maken met vrouwlief en wat gebeurt er dan? Dan word een mens zoals ik uitgenodigd voor een bedrijf:

CV.

Cluster Vision.

High Performance Computing Clusters bouwen en configureren zij voor allerlei bedrijven die veel rekenkracht nodig hebben voor allerhande zware rekentaken zoals simulaties en voor de clustermanager die draait op zo’n cluster.

Zo’n clustermanager software pakket heeft op zn minst twee zwaar uitgeruste masternodes nodig en een batterij sycopantische slave nodes die onder andere om de juiste tijdsaanduiding zeuren bij deze master nodes en klaar staan om taken uit te voeren.

Voornamelijk universiteiten maar ook olie maatschappijen en andere instellingen waar PhD’s rondlopen die graag zo’n clustermanager pakket willen bestuderen.

Cluster Vision heeft een Engineering Test die Engineers moeten doen om te kijken of de mensen die zeggen dat zij Linux Engineering werk kunnen doen dat wel kunnen want er zijn veel mensen die maar wat ouwehoeren bijvoorbeeld over … en liefdevol daarover later meer!

Hoera! Ik mocht de Engineering Test doen van ClusterVision. Een email met instructies kreeg ik. In 12 uurtjes moest ik de taken uitvoeren en een rapportje schrijven waarin ik de stappen had opgeschreven.
Zoeken naar oplossingen op internet mocht want dat doet iedereen toch.

De quality was belangrijk en ik ging vrolijk op afstand aan de slag met de taken uitvoeren op de testmachines. Bevlogen had ik bedacht dat ik het rapport in LaTex zou doen net als een PhD student en nu ik er over nadenk hoe ik dat precies gedaan heb tegelijk kan ik mij dat niet meer zo herinneren maar feit is dat ik heb lopen prutsen met de karakters aanpassen in de latex base file zo half tegelijkertijd.

Want ik heb dat bestand nog. En dat ziet er gelikt uit.

Latex is een vrolijk programma waarmee wetenschappelijke documenten gemaakt worden met een mooie gelikte wetenschappelijk opmaak. Dat zijn geen doorsnee word documentjes. Het is geen rocketscience zelf maar er wordt wel rocketscience mee gepubliceerd dus het komt in de buurt.

Moet je eens voor de gein zoeken naar Latex en tex software pakketten in de package managers van de verschillende distributies. Dan wordt langzaam duidelijk waarom er nog geen oplossingen zijn voor wereld problemen. Krijg je daar studie punten voor ofzo? Voor het schrijven van texlive documentation?

Alleen de laatste stap van de test haalde ik niet. Er stond in de instructie email:

“Voor echt high end linux admins is deze stap, nog even slurm en munge installeren en de mpirun job laten draaien”

Helaas was ik geen net geen high end linux admin en heel eerlijk verontschuldig ik mij en excuseer ik mij met mijn energie is op. Maar ik had wel een gelikt LaTeX rapportje net als een PhD.
Zeer goed gedaan in vergelijking met anderen en ik mocht beginnen na nog even onderhandelen over het salaris.
Weetje wat, wij kijken hoe jij het doet en na 6 maanden bepalen wij of jij die 300 erbovenop krijgt die jij eigenlijk wil hebben, is dat ok? Vroeg de lieftallige dame van CV HR.

Ja dat vond ik ok.

Ik had een baan in High Performance Computing.