HyppÀÀ sisÀltöön

👹‍🔬 Einsteinium

Docker vs. Multipass

Docker sopii moneen, mutta jos tarve on hallita esim. systemd-palveluita, luoda kÀyttÀjiÀ, tai sitoa eri prosesseja yhteen tavalla tai toisella, niin virtuaalikone on parempi ratkaisu. KehitysympÀristömme on Ubuntu, joten Canonicalin oma Multipass on oiva valinta. Qemu mahdollistaa rautatason virtualisoinnin (KVM), joten suorituskyky on parempi kuin tyypin 2 hypervisoreilla (VirtualBox, VMware).

Muut OS:t?

Multipass toimii myös macOS ja Windows -kÀyttöjÀrjestelmissÀ, mutta nÀiden kÀyttöÀ ei erikseen neuvoja tÀllÀ kurssilla. Windowsissa default local.driver on hyperv, joten jos kÀytÀt Windowsia, niin Windows Pro on suositeltu. Muutoin joudut tyytymÀÀn VirtualBoxiin driverinÀ.

TehtÀvÀt

TehtÀvÀ: Argumenttien parsiminen

Luo skripti arguments.sh, joka vastaa seuraavaan kÀyttökuvaukseen: Usage: arguments.sh [-n instance_name] [-c cloud-init-file] [FILE]..

Skriptin tulee tulostaa argumentit. Alla muutama esimerkki skriptin ajamisesta:

đŸ–„ïž Bash
./runbash.sh scripts/arguments.sh -n 'Name Here' -c config/notexists.yaml abc def efg
🐳 stdout
Image name: Name Here
Cloud Init file: config/notexists.yaml
Positional arguments one by one: 
  abc
  def
  efg
đŸ–„ïž Bash
./runbash.sh scripts/arguments.sh
🐳 stdout
Image name:
Cloud Init file:
Positional arguments one by one: 
đŸ–„ïž Bash
./runbash.sh scripts/arguments.sh arg1 arg2 arg3 arg4
🐳 stdout
Image name:
Cloud Init file:
Positional arguments one by one:
  arg1
  arg2
  arg3
  arg4
Vihje

KÀytÀ getopts-rakennetta. Ohjeet esim. Greg's Wiki. Mallia voit ottaa myös runbash.sh-skriptistÀ.

TehtÀvÀ: Multipass-harjoituskenttÀ

Luo skripti, joka alustaa sinulle Multipassin avulla harjoituskentÀn. Tarvitset tÀssÀ ylemmÀn tehtÀvÀn apuja: sinun pitÀÀ voida antaa sille argumentteja.

Aloita tehtÀvÀ asentamalla Canonical Multipass jos se ei ole jo asennettu. On suositeltavaa tehdÀ tÀmÀ tehtÀvÀ, kuten muutkin kurssin tehtÀvÀt, Ubuntu Linuxissa. Voit omalla vastuulla kuitenkin asentaa Multipassin myös macOS- ja Windows-kÀyttöjÀrjestelmiin. JÀlkimmÀisessÀ tapauksessa suosittelen Windows Pro -versiota, jotta saat Hyper-V:n kÀyttöön.

Warning

Huomaa, ettÀ nÀitÀ komentoja ei ajeta kontissa. NÀmÀ ajetaan sinun host-koneella.

Komennon pitÀisi toimia esimerkiksi nÀin:

đŸ–„ïž Bash
./runmulti.sh -n 'harjoituskentta' scripts/hello.sh

Komennossa kestÀÀ ympÀristöstÀsi riippuen noin minuutti: se lataa ~500 megatavun Ubuntu cloud imagen koneellesi ja kÀynnistÀÀ sen pohjalta virtuaalikoneen. TÀmÀn jÀlkeen voit ottaa yhteyttÀ koneeseen komennolla multipass shell harjoituskentta. Skripti hello.sh tulisi löytyÀ ubuntu-kÀyttÀjÀn kotihakemistosta. Voit ajaa sen komennolla bash hello.sh tai ./hello.sh - aivan kuten olet aiemmin oppinut. PÀÀset ulos koneesta komennolla exit tai Ctrl+D pikanÀppÀimellÀ.

Vihje

Skriptin pitÀisi ajaisi seuraavanlaisia komentoja:

# Komento 1: komentoon tulee ujuttaa muuttuja $INSTANCE_NAME
multipass launch lts --cpus 1 --disk 5G --memory 1G --name ${INSTANCE_NAME}

# Komento 2[..]: yksi per [FILE]..
multipass transfer ${file} ${INSTANCE_NAME}:/home/ubuntu

Note

Kun haluat tuhota komeet, aja multipass delete <koneennimi> tai multipass delete --all. Kone jÀÀ vielÀ kummittelemaan, etkÀ voi luoda uutta samannimistÀ ennen kuin ajat multipass purge.

TehtÀvÀ: Einstein-level OppimispÀivÀkirja

Automatisoi oppimispÀivÀkirjan alustaminen Cookiecutter-templaatista ja tarvittavien riippuvuuksien asentaminen. Luo skripti, joka ottaa argumenttinaan konfiguraatiotiedoston, josta se lukee muuttujat itselleen. NÀmÀ muuttuja-arvot mÀÀrÀÀvÀt, minkÀ kurssin oppimispÀivÀkirjan skripti alustaa, mihin lokaatioon se tulee ja kuka on kirjoittaja. NÀiden vaiheiden pitÀisi olla sinulle tuttuja muilta minun kursseiltani.

Konfiguraatiotiedosto on YAML. Sen rakenne neuvotaan Cookiecutter: User Config-sivulla. MeidÀn tapauksessa se on esimerkiksi:

skriptiohjelmointi-2054.yaml
default_context:
    course_name: "Skriptiohjelmointi 2054"
    author: "John Anderton"
    containing_folder: "/home/john/Code/skriptiohjelmointi-2054/johnanderton"
    __week_nro: "42"
MitÀ YAML:iin?

Default context -arvot eivÀt ole sattumanvaraisia muuttujanimiÀ. KÀytetty Cookiecutter-templaatti, tai tarkemmin sen gh:sourander/kamk-coociecutters/oppimispaivakirja/cookiecutter.json-tiedosto mÀÀrittelee ne. Tutustu tiedostoon ja sen logiikkaan. Huomaa, ettÀ tiedosto ei ole raakakoodattu JSON vaan Jinja2-pohjainen templaatti - tavallaan skriptausta sekin!

Kun olet sitÀ mieltÀ, ettÀ skripti on kenties valmis ajettavaksi, aja:

đŸ–„ïž Bash
# Luo
./runmulti.sh -n oppimispaivakirja scripts/luo-paivakirja.sh config/skriptiohjelmointi-2054.yaml

# YhdistĂ€ â˜Łïž-koneeseen
multipass shell oppimispaivakirja

TÀmÀn jÀlkeen olet valmis kokeilemaan skriptin ajamista virtuaalikoneen sisÀllÀ.

â˜Łïž Bash
# Aja ubuntun kotikansiossa
./luo-paivakirja.sh skriptiohjelmointi-2025.yaml

Ideaalitilanne on, ettÀ skripti ei kysy kÀyttÀjÀn syötettÀ. Sen sijaan skripti lukee konfiguraatiotiedoston ja suorittaa tarvittavat toimenpiteet, ja lopuksi tulostaa, missÀ oppimispÀivÀkirja sijaitsee. Tarkka tulosteen muotoilu ei ole tÀrkeÀ, mutta se voi olla nÀtti ja hymiöitÀ hyödyntÀvÀ. Esimerkiksi:

â˜Łïž stdout
[INFO] Learning diary created! đŸ„ł
[INFO] You will find it in: /home/john/Code/skriptiohjelmointi-2054/johnanderton/
Vihje

Tulet ajamaan tÀmÀn sortin komentoa jossain vaiheessa:

uv tool run cookiecutter \
    --lue cookiecutterin \
    --dokumentaatiosta \
    --mita \
    --argumentteja \
    --tarvitset \
    gh:sourander/kamk-cookiecutters
TehtÀvÀ: OppimispÀivÀkirjan jatkot

TÀmÀ tehtÀvÀ on edellisen viimeisen viimeistelyÀ ja varmistelua. Kun olet saanut yllÀ olevan tehtÀvÀn suoritettua, niin haluat varmasti myös nÀhdÀ oppimispÀivÀkirjan selaimessa? TÀmÀ onnistuu seuraavilla komennoilla:

â˜Łïž Bash
# Varmista ettÀ uv löytyy PATH:sta
source .bashrc 

# Mene oikeaan hakemistoon
cd Code/skriptiohjelmointi-2025/yourname/docs

# Aja mkdocs lisÀosineen uv:lla
uv tool run \
  --with mkdocs-material \
  --with mkdocs-awesome-nav \
  mkdocs serve --dev-addr 0.0.0.0:8000

TÀmÀn jÀlkeen selvitÀ virtuaalikoneen IP-osoite ja yhdistÀ siihen. Virtuaaliosoitteen nÀet ajamalla komennon multipass info <koneennimi>. TÀmÀn jÀlkeen voit avata selaimen ja kirjoittaa osoiteriville http://<virtuaalikoneen-ip>:8000.

Nyt olet virallisesti varmistanut skripti, joten se olisi valmiina kĂ€ytetĂ€vĂ€ksi myös muuallakin kuin virtuaalikoneessa. Success! 🎉