2019-09-05

Att ligga på sjukhus

Till och från det senast året har jag haft lite problem med magen. Ibland har jag inte fått behålla vad jag ätit och haft ont i magen. För drygt fyra veckor sedan blev detta betydligt värre och magproblemen satt i flera dagar i sträck. Sedan blev det sakta bättre men inte helt bra. Så jag bestämde mig för att besöka vårdcentralen och be dem kolla - jag hade läst på lite innan och hade noterat att jag hade många överensstämmande symptom med det som kallas Crohns sjukdom och med det i åtanke begav jag mig till vårdcentralen på förmiddagen en onsdag.

Tanken var att få det kollat och sen åka tillbaka till jobbet igen men i skrivande stund har jag varit på Danderyds sjukhus i ett dygn, först på akuten i sju-åtta timmar där det togs en rad prover på mig och där jag också fick dropp. Sedan hamnade på avdelning där jag spenderade resten av tiden på sjukhuset.

Den avdelning jag först hamnade på är en avdelning för lungpatienter, och där hamnade jag för att de inte hade plats på den egentliga avdelningen jag skulle till. Den avdelningen hamnade jag på senare och därefter var det ytterligare undersökningar som jag väntar på nu när jag skriver detta.

I den sal jag först låg i fanns två patienter till - en man från Eritrea som hade grava lungskador (från rökning, misstänker jag) och som skulle åka tillbaka till sitt hemland inom kort. Han verkade mest irriterad över att inte få med sig mediciner hem till hemlandet för ett helt år än det faktum att han är gravt sjuk. Den andra rumskamraten var en kvinna med en cancertumör och med återkommande proppar. Hon höll masken inför läkarna när de frågade hur hon mådde men när hon trodde att ingen såg torkade hon tårarna från sina ögon. Sånt blir man ganska tagen av, det är både jobbigt och nyttigt att dela rum med andra som är sjuka för det ger en perspektiv - här är människor som sannolikt inte kommer leva så värst länge till medan jag kommer göra det även om jag inte kommer kunna äta och dricka exakt som jag vill.

Det är mycket med svensk sjukvård som inte är som det borde, det är inte sällan överbelagt på många sjukus och personalbrist gör att avdelningar måste stängas. Samtidigt gör de som arbetar på detta sjukhus ett enormt jobb - de är trevliga, positiva, lugna och proffsiga och har också humor (se bilden ovan där sköterskorna ville skoja med mig om att jag inte fick äta från midnatt och framåt… och då illustrera det med en öl och en hamburgare) och de gör definitivt livet lite enklare när man egentligen bara sitter och väntar på att nästa sak ska hända.

I skrivande stund har jag fastat tio timmar. Samtidigt har jag egentligen inte ätit ordentligt på fyra dygn vilket också syns på vågen. Den senaste månadens problem har inneburit, eller medfört om man hellre ser det så, att jag gått ner 5,5 kilo i vikt (ett kilo på det sista dygnet) vilket jag sannerligen behövde men det var kanske inte det sätt jag hade önskat att jag gått ner i vikt på.

Uppdatering

Nu är det måndag och jag har varit på Danderyds sjukhus sedan i onsdags förra veckan förutom med några få timmars permission igår söndag då jag fick åka hem och fira min hustru på hennes 40-årsdag. Efter en ordentlig undersökning av tarmsystemet i fredags visade det sig att jag hade sår och inflammation på tunntarmen och en lättare inflammation på tjocktarmen. Min hobbydiagnos, Crohns, visade sig stämma. Jag har fått kortison intravenöst sedan i onsdags kväll och det känns i kroppen för det är inga små doser de skickar i mig heller.

Jag hade räknat med att få åka hem idag, och det hade personalen på avdelningen också för de hade räknat med att få min plats till en annan patient så nu har jag ett enkelrum för 24 timmar framåt eller så innan jag får flytta tillbaka igen, om jag inte lyckas bli utskriven imorgon tisdag.

Oavsett vad kommer jag få äta kortison ett tag framöver även när jag blivit hemförlovad, och med det blir det sannolikt en sjukskrivning som följer. Efter en del inventerande har det visat sig att jag har flera släktingar som har Crohns sjukdom så det kanske inte var så underligt ändå att jag också åkte på det.

2019-07-24

Rutger Hauer går ur tiden

Skådespelaren Rutger Hauer har lämnat oss. Efter “en tids sjukdom”, vilket brukar betyda cancer, så tog han farväl av jordelivet vid 75 års ålder den 19 juli.

När jag tillsammans med vad som såg ut att vara ett tusental till som hastigast fick träffa honom på Science Fiction-mässan i Sollentuna år 2002 så såg han ganska sliten ut redan då när han satt och poserade för bilder och skrev autografer samtidigt som han kedjerökte vid ett bord. Jag tyckte det var lite smått tragiskt att han skulle decimeras till ett resande cirkussällskap ihop med andra birollsinnehavare som var där men han fick på sätt och vis sin revanch några år senare med roller som exempelvis en korrupt kardinal i Sin City och en minst lika korrupt företagshaj i Batman Begins.

Givetvis minns alla Rutger Hauer för sin roll som Roy Batty i Blade Runner från 1982 men jag har ett annat, minst lika starkt, minne av honom och det är som liftaren i filmen med samma namn från 1985 där han ägnar sig åt att ha ihjäl folk åt höger och vänster. Han skrämde bokstavligen talat skiten ur mig i den filmen och i en senare film, Blind Fury, spelade han en blind rättskipare som det inte gick att inte bli förtjust i. Hans roll som stenhårde Harley Stone i kalkonen Split Second från 1992 kan man förlåta honom för - filmen hade en ganska intressant scenografi i ett översvämmat London någonstans i en nära framtid men i övrigt fanns det lite att bli glad över.

Alla skådespelare har haft toppar och dalar, det är det inget snack om, och även om Rutger Hauer hade otur ibland med de roller han valde, eller fick, spela så är det de riktigt bra insatserna som jag minns honom bäst för.

Slutligen - scenen vi minns honom bäst för, ackompanjerad av Vangelis fantastiska musik.

2019-07-03

TkJ har lämnat oss

Jag kände inte Tommy k Johansson mer än att jag då och då läste hans blogg, TkJ.se. Han hade den stora vänligheten att skriva snällt om ett projekt jag drev för åtta år sedan, Macpro Magazine. Den digitala tidningen om Mac och Apple sålde nämligen som smör (tidningen var ofta högt upp på topplistorna, före exempelvis Macworld’s motsvarighet) och Tommy var inte sen att notera det och kontaktade mig.

Jag minns att han var påläst, oerhört intresserad och skrev förbannat bra - inte bara om mig och mitt projekt utan om en rad andra saker.

Tommy gick ur tiden den 27 juni i år. På något sätt var det passande att denna science fiction-nörd blev 42 år gammal, men det var ändå på tok för tidigt. En minnesstund kommer hållas den 25 juli.

2019-07-02

Konsolidering

Då och då får man en idé. Eller två. Eller i mitt fall - väldigt många. Eftersom jag har en egen serverpark med tillhörande infrastruktur så är det tämligen enkelt för mig att dra igång en ny webbsajt.

Två av dessa, Retrodatorer och Unixpro, är sajter som jag brunnit mycket för och jag gör det fortfarande men jag är inte riktigt samma enmansarmé som förr utan jag har insett att det är enklare för mig att publicera allt jag skriver på ett ställe, och det är den blogg du läser nu. Allt material från Unixpro och Retrodatorer har flyttats hit och jag har fixat och donat lite bakom kulisserna för att sajten ska fungera finfint.

Så om du ramlat in hit via någon av de två sajterna så hälsar jag dig välkommen! Det finns mer att läsa - kolla gärna in arkivet.

2019-07-02

Sparka igång en server med Kickstart

Jag gillar att testa nya funktioner, programvaror och annat som kräver en server för ändamålet. Då jag kör VMware:s ESXi hemma så kan jag närhelst jag vill sparka igång en ny virtuell maskin. Då jag gör detta hyfsat ofta bestämde jag mig för att automatisera det hela så långt som möjligt.

Det finns både kommersiella och gratis alternativ för att uppnå vad jag egentligen ville göra, nämligen att automatisera installationen av CentOS 7 så långt det bara var möjligt. Givetvis kan man via VMwares egna VRealize automatisera skapandet av den virtuella maskinen och sedan skjuta in operativsystemet från en på förhand skapad mall, men det kändes som det var lite väl mycket jobb för att göra något som egentligen är ganska enkelt.

Funktionen jag använder kallas kort och gott “Kickstart” och den är inbyggd i Red Hat Enterprise Linux och därmed också i CentOS version 7 som jag använder för det mesta (även om jag börjat bygga mer och mer på FreeBSD, men det är ett ämne för en kommande bloggpost).

Kickstart är enkelt: en dator på ett subnät, exempelvis 10.10.10.0/24, startar upp och istället för att försöka starta från en inbyggd hårddisk, CD-ROM-skiva, floppy eller vad man nu tänker att denna dator ska starta från. Denna dator kan vara antingen virtuell eller fysisk, det spelar ingen roll. Funktionen datorn använder för att starta kallas PXE (Preboot Execution Environment) och den gör på många sätt exakt samma sak som vad gamla TFTP (Trivial FTP) gjorde vilket är detta: datorn skriker ut medelst en broadcast på det lokala subnätet att den efterfrågar en fil.

Med TFTP fick man, om man exempelvis skulle starta en Sun-maskin via detta protokoll, döpa filen som skulle serveras via TFTP till datorns MAC-adress för att rätt maskin skulle “plocka upp” rätt fil.

I fallet PXE är använder man bland annat TFTP och DHCP i kombination utan att behöva döpa en fil till ett visst namn. Det är nämligen lite smartare än så.

Datorn startar upp och via PXE försöker den få en IP-adress via DHCP. När denna adress tilldelas så skickas också adressen till en bootserver med i samma paket och därefter kan datorns BIOS begära en PXE-fil som innehåller grundläggande information för att installationen ska hoppa igång. I denna fil talar man om hur uppstartsmenyn ska se ut, var Linuxkärnan ska hämtas från och vilket protokoll som ska användas, och så vidare.

Min fil (/var/lib/tftpboot/pxelinux.cfg/default) ser ut så här:

default menu.c32
prompt 0
timeout 10
MENU TITLE joacim.net PXE Menu
LABEL centos7_x64
MENU LABEL CentOS 7_X64
KERNEL /networkboot/vmlinuz
APPEND initrd=/networkboot/initrd.img inst.repo=ftp://10.10.10.113/pub ks=ftp://10.10.10.113/pub/centos7.cfg

Som synes är nästa steg för servern att hämta filen centos7.cfg via FTP (ks=ftp://...). På samma FTP-server ligger också hela repot för CentOS 7 (inst.repo). Filen centos7.cfg är ganska lång och kanske inte helt självförklarande men här komner ett försök:

firewall --disabled
install
url --url="ftp://10.10.10.113/pub/"
rootpw --iscrypted $1$ywI.eO8s$YNZ50c4X6MIG21Lovjn9f0
auth useshadow passalgo=sha512
text
firstboot disable
keyboard sv-latin1
lang en_US
selinux disabled

I denna första del stänger vi av brandväggen, säger att det är en installation som ska göras och var installationsfilerna finns. Vi sätter ett root-lösenord som läggs in i krypterad form i denna fil, säger åt installationsprogrammet att köras i textläge, sätter svensk tangentbordslayout, engelska som systemspråk och stänger av SELinux.

logging level=info
eula --agreed
logging --host=10.10.10.115
timezone Europe/Stockholm --ntpservers=ntp.joacimmelin.se
bootloader location=mbr
clearpart --all --initlabel
part swap --asprimary --fstype="swap" --size=2048
part /boot --fstype=ext4 --size=4096
part / --fstype=ext4 --size=16384
%packages
@^minimal
open-vm-tools
nano
nfs-utils
wget
@core
%end

I detta andra steg sätter vi loggningsnivå och vilken server vi vill skicka loggarna till (i mitt fall min syslog-server), vi ställer in att klockan ska synkroniseras mot min NTP-server, hur bootloadern ska skrivas, hur stor swapfil servern ska ha, hur stor bootpartitionen ska vara och hur stor root-partitionen ska vara. Här kan man givetvis lägga in andra partitioner som /var eller /home om man vill det - så länge den totala storleken för samtliga partitioner inte överstiger ytan på den fysiska eller virtuella hårddisk servern har att tillgå.

%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
%post --log=/root/ks-post.log
mv /etc/rc.d/rc.local /etc/rc.d/rc.local.old
wget http://kickstart01.joacimmelin.se/rc.local -O /etc/rc.d/rc.local
systemctl enable rc-local
wget http://kickstart01.joacimmelin.se/zabbix_agentd.conf -O /etc/zabbix_agentd.conf
wget http://kickstart01.joacimmelin.se/zabbix_agentd.psk -O /etc/zabbix_agentd.psk
wget http://kickstart01.joacimmelin.se/CentOS-Base.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://kickstart01.joacimmelin.se/afterinstall.sh -O /etc/afterinstall.sh
wget http://kickstart01.joacimmelin.se/selinux/config -O /etc/selinux/config
wget http://kickstart01.joacimmelin.se/selinux/ifcfg-ens192.example -O /etc/sysconfig/network-scripts/ifcfg-ens192.example
wget http://kickstart01.joacimmelin.se/main.cf -O /etc/postfix/main.cf
wget http://kickstart01.joacimmelin.se/bacula-fd.conf -O /etc/bacula/bacula-fd.conf
wget http://kickstart01.joacimmelin.se/bconsole.conf -O /etc/bacula/bconsole.conf
chmod 755 /etc/afterinstall.sh
chown root:root /etc/afterinstall.sh
mkdir /root/.ssh
wget http://kickstart01.joacimmelin.se/authorized_keys -O /root/.ssh/authorized_keys
chmod +x /etc/rc.d/rc.local
mkdir -p /bacula/restore
chown -R bacula:bacula /bacula
chmod -R 700 /bacula
%end
reboot --eject

I detta tredje steg händer en del intressanta saker som är special för min installation. För att få Kickstart att köra ett script när servern startar om efter installationen är klar så ska man enligt dokumentationen kunna köra detta i avsnittet %post men det fungerar inte riktigt. I CentOS 6 fungeade det däremot utmärkt, så jag tvingas göra en fuling där jag som synes först döper om /etc/rc.d/rc.local tillfälligt. Därefter hämtar jag hem en egen version av /etc/rc.d/rc.local som placeras på rätt plats.

Vad som sedan följer är en rad filer som laddas ner och placeras på rätt ställe. Bland dessa finns konfigurationsfilerna för övervakningssystemet Zabbix, en egen /etc/yum.repos.d/CentOS-Base.repo som hämtar sina filer från min egna spegling av CentOS 7-repot, en konfigurationsfil för SELinux, Postfix samt backupsystemet Bacula. Jag sätter fulla rättigheter och ägare på filen /etc/afterinstall.sh och slutligen laddar jag ner SSH-nycklarna så jag kan logga in från min bastion-server utan att slå in något lösenord.

Lite kataloger skapas för Bacula och därefter får /etc/rc.d/rc.local korrekta rättigheter för att exekveras. I denna fil anropar jag sedan filen /etc/afterinstall.sh som vi diskuterar härnäst i denna bloggpost:

wget http://kickstart01.joacimmelin.se/resolv.conf
cd /root
rpm -ivh http://kickstart01.joacimmelin.se/zabbix-release-3.0-1.el7.noarch.rpm
yum install epel-release -y
yum install deltarpm -y
yum install zabbix-agent -y
yum install bacula-client -y
yum install net-tools -y
yum install telnet -y
yum install figlet -y
figlet ${HOSTNAME%%.*} > /etc/motd
mv /etc/zabbix_agentd.conf /etc/zabbix/
mv /etc/zabbix_agentd.psk /etc/zabbix/
mv /etc/bacula-fd.conf /etc/bacula/
mv /etc/bconsole.conf /etc/bacula/
systemctl start zabbix-agent
systemctl enable zabbix-agent
mkdir /backup
echo "stor03.joacimmelin.se:/backup2 /backup nfs defaults 0 0" >> /etc/fstab
yum update -y
chmod -x /etc/rc.d/rc.local
reboot

Då tar vi det från början. Vi tankar hem en egen /etc/resolv.conf och lägger in. Man kan givetvis fråga sig varför jag inte bara sätter DNS:erna i filen för nätverkskonfigurationen men det är för att min /etc/resolv.conf ser ut så här:

search joacimmelin.se
options rotate
options timeout:1
nameserver 10.10.10.134
nameserver 10.10.10.169

Med en fil som ser ut som ovan kommer klienten försöka anropa den sekundära DNS:en efter en sekund om den första inte svarar. Dessa inställningar går mig veterligen inte att sätta via konfigurationsfilen för nätverkskortet i CentOS 7.

Hur som helst, åter till den andra filen i kickstart-kedjan. Jag laddar ner klienten för Zabbix, därefter lägger jag till epel-repot, lägger in deltarpm-paketet (väldigt trevligt då det endast installerar skillnaderna mellan det gamla och det nya paketet vilket går snabbare och sparar bandbredd. Därefter installerar jag Zabbix-agenten, Bacula-klienten, net-tools-paketet, telnet och slutligen figlet som därefter pangar in serverns värdnamn i filen /etc/motd. Detta är i sig ganska onödigt i dagsläget då den kommer skjuta in värdnamnet localhost i /etc/motd men jag har lagt in det redan nu för att irritera mig tillräckligt mycket för att bygga tidigare steg där jag via ett enkelt webbgränssnitt kan skapa grundkonfigurationen och sätta värdnamn och IP-adress och sådant redan innan servern är installerad. Det vore också trevligt att automatiskt skjuta in servern i Bacula för backuper samt i Zabbix för övervakning.

Räkna med att jag kommer blogga om detta här.

Jag flyttar Zabbix konfiguratonsfiler på plats, skapar katalogen /backup som sedan monteras upp via nfs och jag lägger in raderna för detta i /etc/fstab. Slutligen kör jag en total uppdatering av alla paket, slår av exekveringsflaggan på /etc/rc.d/rc.local som annars skulle köra samma fil en gång till och till sist startas servern om.

Det jag måste göra manuellt efter detta är att sätta serverns värdnamn i /etc/hostname, konfigurera dess IP-adress, subnätmask och gateway slutligen lägga in servern i mina lokala DNS:er. Sen är det bara att köra på. Den initiala konfigurationen i VMware innefattar att skapa den virtuella servern med val av operativsystem, ställa in RAM och hårddiskyta och slutligen “slå på strömmen” på maskinen. Inte så blodigt egentligen men det vore trevligt att kunna automatisera även det ovanstående (se nedan).

När jag började titta på detta så utgick jag från denna guide som jag varmt rekommenderar. Sen är det bara att börja gräva i Red Hat:s dokumentation för Kickstart för att hitta roliga saker att lägga in.

Uppdatering För de som liksom jag tycker det är på tok för jobbigt att sitta och klicka fram en ny VM varje gång den ska skapas så finns det tack och lov script som andra redan hackat ihop. Detta är ett bra exempel - notera dock att du behöver justera följande rader så de passar just din miljö. Här är mina ändringar och/eller tillägg. Notera att dessa alltså är anpassade för ESXi 6.5 (detta gör att jag satt config.version och virtualHW.version till de värden som står nedan) där jag kör med VmxNet3-adaptern i ett nätverk som heter “VM Network” (standardnamnet). Det är CentOS 7 i 64-bitarsversion som körs:

config.version = "8"
virtualHW.version = "13"
vcpu.hotadd = "TRUE"
mem.hotadd = "TRUE"
ethernet0.virtualDev = "vmxnet3"
ethernet0.networkName = "VM Network"
guestOS = "centos7-64"

Lycka till!