Puolen sivun päivitysmanuaali

Tein asiakasprojektissa eräänlaista järjestelmäintegraatiota, testausta ja viimeistelyä. Järjestelmä koostui 1-4 yksiköstä, ja vastaavia itsenäisiä järjestelmiä saattoi olla yhtäaikaisessa käytössä useita. Laitteiston puolesta kyse oli periaatteessa aivan tavallisesta PC-raudasta, joka vain oli pakattu enemmän tai vähemmän erikoisiin kuoriin. Ehkä voitaisiin käyttää myös vuosituhannen alun muotisanaa sulautettu järjestelmä.

Jokaisen yksikön laitteet ajoivat Debian-käyttöjärjestelmää ja asiakkaan itse tekemää softaa. Kaikki yksikön laitteet kuuluivat samaan aliverkkoon. Ja koska yhdessä järjestelmässä oli maksimissaan 4 yksikköä, saattoi aliverkkojakin olla 4 kappaletta.

(Muistaakseni nämä aliverkot oli järjestetty tyyliin 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24 ja 192.168.4.0/24)

Yhdessä järjestelmässä oli yksi keskusyksikkö, joka huolehti datan hallinnasta ja sen välittämisestä kaikille muille laitteille. Se oli siis tavallaan serveri muiden laitteiden ollessa clientteja. Tämä keskusyksikkö oli minun pääasiallinen työkohteeni.

Keskusyksikön päivitys

Yksi tehtävistäni oli luoda menetelmä, jolla keskusyksikön ohjelmiston – ja tarvittaessa myös käyttöjärjestelmän – sai päivitettyä. Laitteessa itsessään ei ollut edes näyttöä eikä paria usb-liitintä ja virtajohtoa lukuunottamatta mitään kytkentämahdollisuuksia.

Lisäksi päivityksestä vastaavilta henkilöiltä ei voinut olettaa juuri mitään ohjelmisto-osaamista tai edes perustasoa kummempia tietoteknisiä taitoja. Päivitys ei kuitenkaan saanut tylysti ylikirjoittaa kaikkea, vaan esimerkiksi olemassaolevat konfiguraatiot piti säilyttää ennallaan.

Kuulin eräältä työntekijältä, että yhden toisen järjestelmän pienehkön osan päivitysmanuaali oli pituudeltaan ainakin parikymmentä a4-sivua.Otin tämän haasteena, ja päätin luoda niin helpon päivitysjärjestelmän kuin ikinä olisi mahdollista. Myöhemmin kirjoittamani ohje oli pituudeltaan noin puoli sivua ja siinä oli nämä 4 kohtaa:

  1. Laita muistitikku usb-porttiin.
  2. Kytke virta laitteeseen.
  3. Odota, että etupaneelin led-valo lakkaa vilkkumasta.
  4. Irrota muistitikku. Päivitys on valmis.

Vaikka päivistysoperaatio on päällepäin todella yksinkertainen, tapahtui konepellin alla paljon asioita. Seuraavaksi kerron, miten päivitysjärjestelmä toimi.

Kaikki lähti siitä, että loin työkoneellani päivitetyn ympäristön. Tähän sisältyi päivitetty Debian-käyttöjärjestelmä sekä uudet ohjelmistoversiot asiakkaan tekemästä softasta. Myös lähiverkon konfiguraatiosta oli perusasetukset laitettu kuntoon. Kun puhdas järjestelmä oli valmiina, tein siitä levykuvan.

Päivitystoimintoja varten kirjoitin skriptejä, jotka ajettaisiin automaattisesti bootin yhteydessä. Keskusyksikkö oli tavallisen tietokoneen tapaan konffattu biosista siten, että se yritti ensimmäisenä käynnistää käyttöjärjestelmän muistitikun kautta – ja sen puuttuessa normaalisti kiintolevyltä.

Päivityksen sisältävä muistitikku sisälti siis itseasiassa kokonaisen käyttöjärjestelmän, minimaalisen Linuxin. Tämä systeemi sisälti aiemmin valmistelemani levykuvan, siis yhden ison .img-tiedoston.

Kun päivitysjärjestelmä boottasi, se mounttasi ensi töikseen sekä keskusyksikön kiintolevyn sekä uuden levykuvan omaan tiedostojärjestelmäänsä. Tämän vaiheen tarkoitus oli kopioida olemassaolevat konfiguraatiot vanhasta järjestelmästä uuteen. Se oli sangen helppoa, koska *nix-pohjaisissa systeemeissä ne ovat yksinkertaisesti tiedostoja.

Kun konffit olivat paikallaan, unmountattiin nämä kaksi väliaikaista tiedostojärjestelmää. Sen jälkeen uusi levykuva kirjoitettiin vanhan levyosion päälle – nythän tosiaan vanhan konfiguraatiotiedostot oli kopioitu uudelle levykuvalle, joten mm. verkkoasetukset säilyivät muuttumattomina päivityksen yli.

Lopuksi päivitysjärjestelmä teki väliaikaisen asetuksen boottimenuun ja käynnisti järjestelmän uudestaan. Muutoksen ansiosta käyttöjärjestelmä ladattiin sisäiseltä kovalevyltä siitä huolimatta, että muistitikku oli edelleen kiinni koneessa.

Päivitetyssä järjestelmässä oli vielä mukana yksi skripti, jonka tarkoitus oli tehdä kaikenlaisia lopputarkistuksia ja siivouksia. Se haluttiin ajaa vain ensimmäisellä käynnistyskerralla, joten viimeinen komento tuossa skriptissä oli se, että se poisti itsensä levyltä.


Mitä tästä opimme? Ammattimainen ja taidolla tehty järjestelmä ei suinkaan ole monimutkainen, vaan yksinkertainen. Mitä yksinkertaisemmaksi lopputulos halutaan saada, sitä enemmän aivojumppaa se yleensä vaatii. Tämän kaltaisissa tapauksissa kehittäjän luovuus ja ongelmanratkaisukyky nousevat hyvin esiin.