Tämä kurssimoduuli on tehty osana Haaga-Helian Tietojenkäsittelyn koulutusohjelman kurssia Palvelinten hallinta (ICT4TN022, kevät 2018).
Kurssimoduuli käsittelee SaltStack:n käyttöä usean tietokoneen työympäristössä. Yksinkertaistettuna periaatteena yksi tietokone toimii Master-roolissa, ja käskyttää kytkennässä olevia, Minion-roolissa olevia tietokoneita ohjelmien konfiguraatioiden, asennusten, käyttäjänhallinnan jne. suhteen.
Moduulin aihekuvaus löytyy harjoituksen 6 yhteydestä
"Moduuli on tarkoitettu pieneen käyttöympäristöön (suuruusluokka 7-13 konetta) paikkatiedon prosessointiin. Moduulin käyttäjät koostuvat paikkatietoasiantuntijoista, jotka haluavat saada avoimen lähdekoodin paikkatietotyökaluja."
"Käyttötarkoitus rajautuu asennettavien ohjelmien mukaan: LASTools, QGIS, gpsbabel, CloudCompare jne. Näitä ohjelmia käytetään rasteri- ja vektorimuotoisten paikkatietoaineistojen sekä laserkeilausaineistojen prosessointiin sekä analytiikkaan."
Moduuli edellyttää tietokoneiden käyttöjärjestelmiltä seuraavia vaatimuksia.
Salt Master -tietokone: Ubuntu 18.04 LTS tai variantti
Salt Minions -tietokoneet:
Salt Masteria ei ole kokeiltu Microsoft Windowsilla, vaan se on toteutettu kohdistuneena asennuksena yksinoikeudella Linux Ubuntu 18.04 LTS -käyttöjärjestelmälle.
Tavoitteena on ollut mahdollisimman automatisoitu asennustoimenpide, joka voidaan suorittaa "tyhjille" käyttöjärjestelmille kylmiltään.
Moduulin ajaminen on tarkoitettu tapahtuvaksi pääsääntöisesti yhdellä komennolla (pois lukien minion-koneiden esikonfigurointi).
Moduuli tukeutuu vahvasti Unix-ympäristöjen Bash-shelliin, mitä vaaditaan moduulin onnistuneessa ajosuorituksessa.
Moduulin mukana tulevissa shell-skripteissä on lisäksi määritelty lisävaatimuksia ajoympäristön suhteen. Näitä vaatimuksia ovat mm.:
kriittisten binäärien olemassaolo Salt Master -tietokoneella
verkkoyhteyden saatavuus
moduuli ajettava pääkäyttäjän oikeuksin
Minioneiden käyttöjärjestelmään, yhteyteen ja raportoituun tilaan liittyvät määrittelyt
jne.
Moduuli asentaa alla luetellut ohjelmat Microsoft Windows - ja Linux Ubuntu 18.04 LTS -käyttöympäristöihin.
Ohjelmaa GPSd ei onnistuttu asentamaan automaattisesti MS Windows -alustalle. Ohjelmakuvaus löytyy seuraavan otsikon alta.
Moduuli asentaa seuraavat suoritettavat tiedostot Microsoft Windows - ja Linux Ubuntu 18.04 LTS -käyttöympäristöihin.
LAStools - yhteensä 49 suoritettavaa tiedostoa. Osa on suljettua lähdekoodia, osa avointa.
Nämä tiedostot asennetaan Salt minion-koneen järjestelmäpolkuun C:\lastools\
las2las
las2txt
lasdiff
lasindex
lasinfo
lasmerge
lasprecision
laszip
txt2las
blast2dem
blast2iso
bytecopy
bytediff
e572las
las2dem
las2iso
las2shp
las2tin
lasboundary
lascanopy
lasclassify
lasclip
lascolor
lascontrol
lascopy
lasduplicate
lasgrid
lasground
lasground_new
lasheight
laslayers
lasnoise
lasoptimize
lasoverage
lasoverlap
lasplanes
laspublish
lasreturn
lassort
lassplit
lasthin
lastile
lastool
lastrack
lasvalidate
lasview
lasvoxel
shp2las
sonarnoiseblaster
Lisäksi asennetaan suoritettava tiedosto gpx2shp.exe, myös polkuun C:\lastools\
LAStools - yhteensä 9 suoritettavaa tiedostoa. Kaikki ovat avointa lähdekoodia.
Nämä tiedostot asennetaan Salt minion -koneen järjestelmäpolkuun /usr/local/bin/
las2las
las2txt
lasdiff
lasindex
lasinfo
lasmerge
lasprecision
laszip
txt2las
Seuraavat muutostoimenpiteet on toteutettu Salt:n file.managed -toiminnolla eli tiedoston korvauksella.
QGIS -konfiguraatio, joka kytkee QGIS-ohjelmasta automaattisesti päälle laserkeilausdatan prosessoinnissa tarvittavat LAStools -työkalut, jotka on asennettu järjestelmäkansioon C:\lastools\
LidarToolsAlgorithmProvider.py -tiedostoon toteutetut muutokset oikealla
Sama QGIS-konfiguraatio kuin Windowsissa (kuvailtu ylhäällä)
Moduuli sisältää seuraavat tiedostot saatavilla GitHub-varastosta Fincer - salt_gisworkstation.
Data | Kuvaus |
---|---|
saltscripts | Alaskriptien pääkansio |
saltscripts/1-setup-salt-env.sh | Alaskripti - esiasenna Salt Master & Salt Minion nykyiselle tietokoneelle |
saltscripts/2-get-programs-on-master.sh | Alaskripti - asenna ja lataa vaadittava ympäristö GIS-ohjelmien asentamiseen minion-tietokoneille |
sample_images | Esimerkkikuvien pääkansio |
sample_images/screen_ubuntu-final.png | Esimerkkikuva - Salt:n tilan ajonjälkeinen tilanne Lubuntu 18.04 LTS -minion-tietokoneella |
sample_images/screen_ubuntu-master-final.png | Esimerkkikuva - Salt:n tilan ajonjälkeinen tilanne Lubuntu 18.04 LTS -master-tietokoneella |
sample_images/screen_windows-final.png | Esimerkkikuva - Salt:n tilan ajonjälkeinen tilanne MS Windows 7 -minion-tietokoneella |
sample_images/screen_windows-final-2.png | Esimerkkikuva - Salt:n tilan ajonjälkeinen tilanne MS Windows 7 -minion-tietokoneella |
srv_pillar | Pääkansio, josta tuotetaan Salt Master -tietokoneen järjestelmäkansio /srv/pillar |
srv_pillar/top.sls | Salt Master -tietokoneella sijaitsevan Salt:n pilarirakenteen päällimmäinen tilatiedosto |
srv_pillar/stones.sls | Salt Master -tietokoneella sijaitsevan Salt:n pilarirakenteen sekundaarinen stones-tilatiedosto |
srv_salt | Pääkansio, josta tuotetaan Salt Master -tietokoneen järjestelmäkansio /srv/salt |
srv_salt/top.sls | Salt Master -tietokoneella sijaitsevan Salt:n Master -palvelun päällimmäinen tilatiedosto |
srv_salt/stone_file | Salt Master -tietokoneelle tuotettava kansiopolku /srv/salt/stone_file (liittyy pilarin stones-tilaan) |
srv_salt/stone_file/init.sls | Salt Master -tietokoneelle tuotettavan tilan /srv/salt/stone_file päällimmäinen tilatiedosto |
srv_salt/stone_file/granite.txt | Salt Master -tietokoneelle tuotettavan Salt-tilan stone_file muottitiedosto minion-tietokoneille |
srv_salt/gis_windows | Salt Master -tietokoneelle osoitettu Salt:n tilakansio gis_windows, jonka sisällä on määritelty MS Windows -Salt-minion -koneille kohdistetut muutokset |
srv_salt/gis_windows/init.sls | Salt:n kansion gis_windows päällimmäinen Salt-tilatiedosto |
srv_salt/gis_ubuntu-1804 | Salt Master -tietokoneelle osoitettu Salt:n tilakansio gis_ubuntu-1804, jonka sisällä on määritelty Ubuntu 18.04 LTS -Salt-minion -koneille kohdistetut muutokset |
srv_salt/gis_ubuntu-1804/init.sls | Salt:n kansion gis_ubuntu-1804 päällimmäinen Salt-tilatiedosto |
srv_salt/common/qgis_lastools | Salt Master -tietokoneelle generoitava kansiopolku /srv/salt/common/qgis_lastools, jonka sisällä on määritelty QGIS -ohjelmaa koskevat muutostiedostot minion-tietokoneille |
srv_salt/common/qgis_lastools/LidarToolsAlgorithmProvider.py | Salt Minion -tietokoneille osoitettu, QGIS:n moduulia LAStools koskeva GPL-lisensoitu Python-kooditiedosto |
srv_salt_winrepo | Salt Master -tietokoneelle luotava kansiopolku /srv/salt/winrepo, johon tuotetaan MS Windows -ohjelmien asennuspakettien vaatimat Salt-tilatiedostot |
srv_salt_winrepo/cloudcompare.sls | CloudCompare -ohjelman asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
srv_salt_winrepo/gpsd.sls | GPSd -ohjelman asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
srv_salt_winrepo/merkaartor.sls | Merkaartor -ohjelman asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
srv_salt_winrepo/qgis.sls | QGIS -ohjelman asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
srv_salt_winrepo/quickroute-gps_x86.sls | QuickRoute GPS -ohjelman (x86) asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
srv_salt_winrepo/vcrun2013.sls | Visual Studio 2013 -ohjelman asennusta koskeva Salt-tilatiedosto MS Windows -minion-tietokoneille |
Testikoneet:
Moduulia testattiin pääsääntöisesti Oracle VirtualBox:ssa seuraavilla asetuksilla:
1x Linux Lubuntu 18.04 LTS Salt Master -tietokone
1x Microsoft Windows 7 Salt Minion -tietokone
1x Linux Lubuntu 18.04 LTS Salt Minion -tietokone
Verkkoasetukset:
Kaikki virtuaalitietokoneet oli kytketty julkiseen verkkoon (NAT) sekä keskenään samaan verkkoon (Internal Network, intnet). Julkinen verkko tarvittiin asennuspakettien latausta varten, yksityinen verkko taas Salt Masterin ja minioneiden keskinäiseen kommunikointiin.
Lähtötilanne:
Minionit käsinsäätöä:
Moduulin huono puoli tällä hetkellä on, että se vaatii Salt Minion -koneiden käsin konfiguroinnin. Salt Minioneiden asennusta ei ole siis automatisoitu, mutta se olisi hyvinkin potentiaalinen kehityskohde.
Ennen moduulin ajoa halusin varmistua, että kaikki intnet-verkossa olleet minion-tietokoneet näkevät masterin. Moduuli on tarkoitettu ajettavaksi ilman tätä varmistusta, mutta testin tarkoituksena oli varmistua yhteydestä luotettavasti, jotta GIS-ohjelmien sisäänajon voitiin varmistua onnistuneen "kylmiltään".
Yhteyden testauksen ajaksi Salt Master -koneelle asennettiin Salt Master ja minion-tietokoneet konfiguroitiin myös kuntoon.
Moduulin tämän hetken huono puoli on, että Salt Minion -tietokoneet täytyy konfiguroida käsin ottamaan yhteys Salt Master -koneeseen. Salt Masterin IP-osoite sisäisessä verkossa intnet oli kuvassa näkyvä 10.13.13.105. Kuvassa ruutukaappaus Lubuntu- ja Windows -minion-tietokoneista
Moduulin ajossa haluttiin olla 100% varmoja määriteltyjen Salt minion-tietokoneiden yhteydestä Salt Master -tietokoneeseen. Moduuli on rakennettu siten, että se hyppää sellaisten hyväksyttyjen koneiden (ID) yli, joihin se ei saa yhteyttä yrityksistä huolimatta. Koska koneita oli hyvin vähäinen määrä ja koska GIS-pakettien asennus haluttiin toteuttaa kylmiltään, haluttiin yhteydestä varmistua kuvassa näkyvällä toimenpiteellä. Testin jälkeen Salt Master -daemoni poistettiin Master-koneelta, koska moduulin mukana tuleva shell-skripti asentaa sen automaattisesti Master-koneelle
Yhteystestailun jälkeen oli aika laittaa moduuli laulamaan. Moduuli suoritetaan ajamalla halutulla Master-koneella kuvassa näkyvä komento 'sudo bash runme.sh' moduulin pääkansiossa
Heti alussa moduulin shell-skripti tulostaa viestin, jossa käyttäjälle kerrotaan lyhyesti, mitä moduuli tekee. Samalla kysytään käyttäjän varmistusta jatkaa moduulin suoritusta
Moduuli lataa uusimman Salt Masterin version SaltStackin pakettivarastoista. On ensisijaisen tärkeää varmistua, että Salt minioneiden ja masterin versio täsmäävät keskenään. Moduulin shell-skriptistä voidaan kytkeä SaltStackin varasto pois päältä.
Moduuli tekee paikalliselle tietokoneelle oletuskonfiguraation Salt Minionille 'defaultMinion', minkä jälkeen moduuli tarkistaa saatavien minion-tietokoneiden olemassaolon ja hyväksyy koneet. Shell-skriptissä voidaan määritellä, että moduuli hyväksyy koneet joko automaattisesti tai käyttäjän erikseen hyväksyminä
Koska moduuli joutuu latamaan hyvin paljon Windows-kohtaisia asennustiedostoja (~ 1 gigatavu), on moduuliin implementoitu erillinen tarkistus sille, onko Windows-koneita minion-koneiden joukossa
Windows-koneiden tarkastuksen jälkeen päivitetään pakettivarastot LASTools:n ja CloudComparen lähdekoodista kasaamista varten. Ohjelmat on pakko kasata lähdekoodista, koska tutkimuksista huolimatta ajantasaisia ja saatavilla olevia pakettivarastoja ohjelmien binääreille ei ole. Ohjelmien kasaaminen lähdekoodista usean koneen tapauksessa on hyvin riskialtista, ja vaatisi ehdottomasti laajempaa testausta.
Salt Masterille täytyy asentaa aimo tukku paketteja, jotta minioneille kohdistettujen ohjelmien onnistunut asennus menisi onnistuneesti maaliin. Asennuksessa kestää jonkin aikaa.
CloudCompare on pakko kasata lähdekoodista .deb-paketiksi, mikäli se halutaan asentaa Ubuntu salt-minion -tietokoneille. Windowsille moduuli lataa ohjelmakehittäjän tarjoaman binäärin.
CloudComparen kasaaminen lähdekoodista kestää arviolta noin 10 minuuttia, riippuen kasauksessa käytettävistä optimointiparametreista, saatavien prosessorien lukumäärästä jne. Moduuliin on implementoitu ominaisuus, joka tarkastaa, onko CloudCompare jo kasattu, jolloin ohjelman kasaus voidaan mahdollisesti ohittaa. Moduuli tekee kylläkin vielä lisätarkistuksen, mikäli pakettivarastoista saatavat kehittäjäpaketit on päivitetty ja kasaa ohjelman tarvittaessa uudelleen.
Moduuli ottaa järjestyksessä yhteyden minion-tietokoneisiin CloudComparen kasauksen jälkeen, testaten yhteyden ja tarkistamalla minionin Salt-version. Tämän jälkeen moduuli käy järjestyksessä läpi kaikki hyväksytyt minion-tietokoneet, ilmoittaen minionilta saadut IP-tiedot, ID-tunnuksen sekä järjestysnumeron. Ajossa minionin grains- ja pillars-tiedot päivitetään sekä ajetaan moduulin määrittelemät Salt-tilat (myös pillar:t) sisään minionille
Koska moduulin asentamien GIS-pakettien lataus- ja asennuskoko huitelee useissa sadoissa megatavuissa, havaittiin selkeitä ongelmia Salt masterin ja minion -koneen välisissä kutsuissa. Moduuliin on määritelty jo kasvatettu timeout-arvo, jotta Master ei katkaisisi yhteyttä minioneihin. Siitäkin huolimatta kuvassa näkyviä puutteita havaittiin yhteydenpidossa.
Ratkaisuna yhteysongelmiin moduuliin voisi implementoida tuen seuraaville: 1) Salt Master tarjoaa paketit suoraan minioneille lokaalista varastosta, toimii eritoten lokaaleissa verkoissa (vähentää myös tilojen ajoaikaa, koska nyt ajasta merkittävä osa menee siihen, että minionit lataavat masterin määrittelemät paketit itsekseen) 2) Master ajaa minionien asennustoimenpiteet rinnakkain, ei peräkkäin (onko ongelmatonta?)
Huolimatta edellä kuvatuista ongelmista, master kykeni ajamaan Salt-tilat sisään minionille
Minion-tietokoneista Windows tuotti toistuvasti ns. false-positive -tuloksia Salt-tilojen sisäänajosta. Tilassa määritellyt neljä asennusohjelmaa palauttavat samaan aikaan retcode 2:n (virhe) sekä sanallisen viestin 'install_status: success'. Nämä ovat SaltStack:ssa ilmenneitä ongelmia olleet ilmeisesti jo vuosien ajan ja niitä on ajan saatossa korjattu, mutta näköjään kaikkia virhetilanteita ei ole saatu pois. Asiaa tutkittiin (NSIS -asennuspaketeista lähtien), mutta asiaa ei kyetty ratkaisemaan moduulin nykyiseen versioon.
Moduuli ilmoittaa ajon lopussa, kuinka moneen Salt-minioniin tilojen sisäänajo onnistui, ja kuinka moneen epäonnistui. Lisäksi epäonnistuneiden minioneiden osalta moduuli ilmoittaa epäonnistuneen minionin ID:n ja saadut IP-osoitteet vikatilanteiden jatkoselvitystä varten.
Moduulin ajon jälkeen tilanne näyttää seuraavalta minion-koneilla:
Salt-moduulissa määritellyt ohjelmat on onnistuneesti asennettu sisään Windows-minion -tietokoneelle. Lisäksi Salt-pillar:ssa määritelty testitiedosto on oikealla sisällöllä ajettu onnistuneesti sisään
Salt-moduulissa QGIS-ohjelmaan määritelty LAStools-työkalujen konfigurointi on onnistuneesti sisällä kaikille käyttäjille
Salt-moduulissa määritellyt ohjelmat onnistuneesti asennettuna Linux Lubuntu -minion-tietokoneen sisään. Lisäksi Salt-pillar:ssa määritelty testitiedosto on oikealla sisällöllä ajettu onnistuneesti sisään ja LAStools on onnistuneesti esikonfiguroitu QGIS-ohjelmaan
Salt Masterilla on sama tilanne kuin ylhäällä Ubuntu minion-tietokoneella, koska master-koneelle oli määritelty myös oma minion-asennus, johon moduuli kohdisti toimenpiteitä
Moduulin kylmiltä ajo kestää tällä hetkellä huomattavan kauan. Merkittävä osa ajasta menee seuraaviin asioihin:
asennuspakettien latausaika
suurimmat paketit ovat kooltaan useita satoja megatavuja. Esimerkiksi LASTools yli 300 mt.
Kaiken kaikkiaan asennettavia paketteja on noin 1,3 gigatavun edestä.
ratkaisu: lataa paketit Salt Masterille etukäteen, tiputa ne minioneille.
Tämä on jo osittain implementoitu. Mikäli moduuli on kertaalleen ajettu ja havaitsee asennuspaketit kansiossa compiled, ei moduuli lataa/kasaa paketteja enää uudelleen
Ongelma edelleen se, että minion-tietokoneet tekevät vaadittavien riippuvuuspakettien suhteen omat latauksensa (esim. QGIS)
asennuspakettien asennusaika
Ohjelmien kasaus - CloudCompare
Merkittävin luotettavuuteen liittyvä ongelma on erityisesti CloudComparen kasausprosessi. Ohjelman kasaus on riippuvainen monesta kehittäjäpaketista, joten tietokoneympäristön fragmentoituminen on omiaan lisäämään riskiä siitä, että joillakin minioneilla asennus menee ajan saatossa siihen kuntoon, ettei ohjelma enää käynnisty (esimerkiksi puuttuvan kirjastoriippuvuuden takia). Ohjelman kasausta hallituissa ympäristöissä tulisi välttää viimeiseen saakka.
CloudComparen merkittävin ongelma Linux-ympäristöissä on virallisten pakettilähteiden puute tai vanhentuneisuus. Esimerkiksi Ubuntulle löytyy CloudComparen PPA, mutta se on osoitettu Linux Ubuntu:n versiolle 16.04 LTS ja toimittaa CloudComparesta version 2.6.0 vuodelta 2014, siinä missä uusin versio on edelleen kehityksessä oleva 2.10 Alpha.
CloudCompare on merkittävä avoimen lähdekoodin ohjelma pistepilvien prosessointiin. Eräs vaihtoehtoinen, joskaan ei niin spesifisesti laserkeilausdatan käsittelyyn tarkoitettu ohjelma, on MeshLab. MeshLab:sta moduulin kirjoittajalla on kokemusta, ja se ei tuotantoympäristössä ole riittävän vakaa ohjelma raskaiden datamassojen prosessointiin (siinä, missä CloudCompare on).
Ohjelmien kasaus - LAStools
LAStoolsia vaivaa sama ongelma kuin CloudComparea, mitä tulee joidenkin Linux-jakeluiden pakettivarastoihin. LAStools tuskin kuitenkaan hajoaa niin helposti kuin CloudCompare, koska vaaditut ulkopuoliset kehittäjäpakettiriippuvuudet on minimissään rajoittuen likipitäen make -binäärin löytyvyyteen.
Salt-tilojen aikakatkaisu
Salt-tilojen ajon aikana havaittiin huolestuttavia viestejä yhteysongelmasta Salt Masterin ja minioneiden välillä. Ongelma liittyy isojen asennuspakettien lataukseen ja asennukseen, eikä tule juurikaan ilmi pienien järjestelmämuutoksien toteutuksessa tai pieniä asennuspaketteja asentaessa. Tämä on ongelma, joka pitää ratkaista, mikäli moduuli otetaan laajemmassa tuotantoympäristössä käyttöön.
Aikakatkaisuun kehitysehdotuksia on lueteltu ylhäällä otsikon "Ajoaika" alla.
Asentaa GIS-ohjelmat Ubuntu- ja Windows -käyttöympäristöihin
Laajennettavissa helposti
Potentiaali: vähentää GIS-työasemien asennukseen kuluvaa aikaa
Jonkin verran kustomoitavissa (shell-skriptit mm.)
Ajo kestää kauan
Mikäli kaikki paketit ladataan verkosta, kestää 3 minionin kuntoon laittaminen automatiikalla noin 1 tunnin.
Rajoittaa mm. moduulin skaalautuvuutta laajempiin ympäristöihin
Shell-skriptien luotettavuus
Edellyttäisi pidempiaikaista ja vaativampaa testausta
Bugit mahdollisia
Tuetut minion-ympäristöt hyvin rajoittuneet
Testausympäristö oli moduulin ajossa rajoittunut
Koneet, joissa Salt masterin kanssa konfliktissa oleva minion-versio
Moduulissa on paljon kehittämistarpeita, joskin myös potentiaalia. Kriittisiin kohtiin olisi puututtava, mm.
ajoajan hitauteen
master- ja minion -tietokoneiden yhteyden luotettavuuteen
ohjelmien kasauksen minimointiin
jne. Enemmän kehittämistarpeita on lueteltu ylhäällä otsikon "Moduulin huonot puolet" alla sekä shell-skriptissä 'runme.sh' (alussa oleva TODO-lista).
Lisäksi olisi hyvin tärkeää, että Salt Minion -konfiguraatiot tehdään SSH-yhteyden yli kohdekoneille. Tällä erää aika ei riittänyt tämän toiminnallisuuden toteuttamiseen, vaikkakin näkemys tämän toteuttamiseksi on kohtalaisen selkeä.