Tein harjoitusta to 10.5.2018 klo 13:00-17:00 ja pe 11.5 klo 11:30-19:00 . Käytin Lenovon ideapad Z500 ja Ubuntun 16.04 LTS versiota, joka oli asennettuna koneelle.
Tarkoituksena oli rakentaa oma Salt-moduuli. Päädyin rakentamaan MERN-stackin eli Mongo Database, Express, React ja Node.js.
Harjoituksen tehtävänanto suoraan Tero Karvisen sivulta (http://terokarvinen.com/2018/aikataulu-%E2%80%93-palvelinten-hallinta-ict4tn022-4-ti-5-ke-5-loppukevat-2018-5p):
“a) Kultainen polku. Tee ensimmäinen versio moduulistasi, joka toimii ainakin optimiolosuhteissa. Jos jokin säätö on poikkeuksellisen hankala, voit tehdä sen tässä versiossa käsin, ja dokumentoida ajamasi käskyt. (Valmis moduuli tarvitaan vasta esitykseen ensi viikolla).
b) Kokeile moduuliasi tyhjässä koneessa. Voit käyttää virtualboxia, vagranttia tai livetikkua.
c) Käyttäjätarina (user story): ketkä ovat moduulisi käyttäjät? Mitä he haluavat saada aikaan moduulillasi? Missä tilanteessa he sitä käyttävät? Mitkä ovat tärkeimmät parannukset käyttäjän kannalta, joita moduuliin pitäisi vielä tehdä? Tähän c-kohtaan vain sanallinen vastaus, tämä kohta ei poikkeuksellisesti edellytä testejä tietokoneella.”
Tässä harjoituksessa pohjana on käytetty Tero Karvisen oppitunteja Palvelinten hallinta -kurssilla sekä hänen nettisivujaan: http://terokarvinen.com/.
a) Ensimmäinen versio
Ensimmäinen versio moduulistani löytyy Github-sivuiltani: https://github.com/jputro/mern-module.
READ.me-tiedostosta löytyy myös ohje, miten tuon saa omalle koneelle. Tällä hetkellä siinä kylläkin oli ongelmana, että run.sh piti ajaa kahteen kertaan, jotta Mongo DB asentui.
Tuo Github-varasto on vielä puutteellinen, sillä sieltä puuttuu npm:n asennus ja käyttöönotto. Lisäksi puuttuu tekstieditorin (Brackets) asennus.
Npm:n kanssa minulla oli paljonkin ongelmia, enkä saanut sitä nyt ollenkaan laitettua tilaksi.
Aloitin luomalla uuden projektin GitHubissa. Annoin sille nimeksi mern-module. Kopioin toisesta GitHub-repositoriostani run.sh-tiedoston:
#!/bin/bash
# Copyright 2018 Tero Karvinen http://TeroKarvinne.com GPL 3
echo "Suolakivi Live USB configuration Starting... jputro/suolakivi"
set -o verbose
echo "Installing Salt and Git..."
sudo apt-get update
sudo apt-get -y install git salt-minion
echo "Retrieving and Applying Settings..."
echo 'master: localhost' | sudo tee /etc/salt/minion
git clone https://github.com/jputro/suolakivi
cd suolakivi/
./highstate.sh
echo "Configuring Live Desktop"
setxkbmap fi
sudo timedatectl set-timezone Europe/Helsinki
git config --global credential.helper "cache --timeout=3600"
git config --global push.default simple
# git config --global user.email "terosstudent@example.com"
# git config --global user.name "Tero's Student"
echo "More tips on https://jaanaputro.wordpress.com"
echo "Done."
Tein GitHubiin kansion /srv/salt/ ja lisäsin sinne kansion nodejs ja tiedoston init.sls. Siirryin nyt terminaalin puolelle ja käsin asennukseen. Päätin aloittaa Nodesta, sillä se oli helpoin ja käsittääkseni se oli hyödyllisintä asentaa ensimmäsienä. Katsoin täältä apua: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-16-04
Ensin siis hain pävitykset “sudo apt-get update” ja sitten “sudo apt-get -y install nodejs“. Kirjoitin nopeasti uuden tiedoston: “nano hei.js” ja sinne laitoin: “console.log(“Hei!”);” ja tallensin. Testasin: “nodejs hei.js” ja terminaaliin tuli “Hei!”. Joten toimi.
Seuraavaksi päätin asentaa Mongodb:n. Käyin lähteenä: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Aloitin siis hakemalla avaimen:
Tämän jälkeen piti luoda listatiedosto:
sudo apt-get install -y mongodb-org
Tietokannan käynnistys:
sudo service mongod start
Tämän jälkeen kävin lokista katsomassa, että oliko Mongodb käynnistynyt:
tail -F /var/log/mongodb/mongod.log
Siellä näkyi: [initandlisten] waiting for connections on port 27017. Onnistui siis tuokin.
Sekä npm:n että Bracketsin asennus käsin löytyy b-kohdasta, sillä niitä en saanut tällä kertaa vielä automatisoitua. Kun olin päässyt npm:n asennuksessa kohtaan “sudo npm install -g mern-cli“, tuli kuitenkin aluksi virheilmoitus siitä, ettei gitiä löytynyt. Asensin siis sen: “sudo apt-get -y install git” ja kokeilin uudestaan. Nyt onnistui. Seuraavassa kohdassa tuli taas ongelma. Annoin komennon “mern init dev” ja tuli ilmoitus: /usr/bin/env: ‘node’: No such file or directory. Hetken aikaa asiaa tutkittuani, löysin ohjeen, jolla tehdään symlink: https://github.com/nodejs/node-v0.x-archive/issues/3911
Annoin siis komennon: “sudo ln -s /usr/bin/nodejs /usr/bin/node” ja kokeilin uudestaan. Nyt näytti toimivan.
Jotta toistoa ei tosiaan hirveästi tulisi, on npm:n ja Bracketsin loput asennusohjeet b-kohdassa.
Seuraavaksi siis automatisointiin. Loin ensin masterin ja minionin: “sudo apt-get -y install salt-master salt-minion“. Menin “sudoedit /etc/salt/minion” ja annoin sinne tiedoiksi masterin ip-osoitteen sekä koneen omavalintaisen id:n. Sitten käynnistin minionin uudelleen: “sudo systemctl restart salt-minion.service“. Seuraavaksi “sudo salt-key -A” ja hyväksyin minionin avaimen. Testasin: “sudo salt ‘*’ cmd.run ‘echo moi’“. Toimi. Loin uuden kansion: “sudo mkdir -p /srv/salt/“. Tein uuden kansion ja sinne tiedoston: “sudoedit /srv/salt/nodejs/init.sls“. Siitä tuli tällainen:
nodejs:
pkg.installed
/usr/bin/node:
file.symlink:
- target: /usr/bin/nodejs
Poistin nodejs:n “sudo apt-get -y purge nodejs” ja vielä “sudo apt-get autoremove“. Kokeilin tuota tilaa: “sudo salt ‘*’ state.apply nodejs“. Toimi. Lisäsin tuon GitHubiin /srv/salt/nodejs/init.sls -tiedostoon.
Sitten oli Mongodb:n vuoro. Pitkän säätämisen ja parin tunnin tauon jälkeen siitä tuli tällainen:
publickey: cmd.run: - name: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 list_file: cmd.run: - name: echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list update: cmd.run: - name: sudo apt-get update mongodb_pkg: pkg.latest: - pkgs: - mongodb-org mongodb_service: service.running: - name: mongod - enable: True
Testasin: “sudo salt ‘*’ state.apply mongodb” ja toimi. Lisäsin tuonkin GitHubiin /srv/salt/mongodb/init.sls -tiedostoon.
Päivitin etusivun run.sh-tiedoston näyttämään tältä:
echo "Mern-module Live USB configuration Starting... jputro/mern-module" set -o verbose echo "Installing Salt and Git" sudo apt-get update sudo apt-get -y install git salt-minion echo "Retrieving and Applying Settings" echo 'master: localhost'|sudo tee /etc/salt/minion git clone https://github.com/jputro/mern-module cd mern-module/ bash highstate.sh echo "Configuring Live Desktop" setxkbmap fi sudo timedatectl set-timezone Europe/Helsinki echo "More tips on https://jaanaputro.wordpress.com" echo "Done."
Päivitin myös README.md:n. Tein top.sls tiedoston kansioon /srv/salt/, ja siitä tuli tämän näköinen:
base: '*': - nodejs - mongodb
Kopioin vanhasta projektistani highstate.sh-tiedoston ja muokkasin siitä tällaisen:
sudo salt-call --local --file-root srv/salt/ state.highstate --state-output terse
b) Kokeile moduulia tyhjässä koneessa
Boottasin koneen live-tikulta ja ensin jouduin asettamaan kielen “setxkbmap fi“, jotta sain nettiyhteyden päälle.
Sitten:
wget https://raw.githubusercontent.com/jputro/mern-module/master/run.sh
bash run.sh
Tuo bash run.sh piti tosiaan ajaa kahteen kertaan, jotta tuo tietokanta asentui. Tämän jälkeen jatkoin käsin: “sudo apt-get -y install npm“. Seurasin ohjetta täältä: http://mern.io/documentation.html.
sudo npm install -g mern-cli
mern init dev
cd dev
npm install
npm start
Tämän jälkeen selaimella osoitteeseen localhost:8000 ja näytti tältä:
Seuraavaksi tekstieditorin asentaminen. Päätin asentaa Bracketsin, sillä se oli itselle tuttu editori. Ohje täältä: http://www.webupd8.org/2013/11/install-brackets-in-ubuntu-via-ppa-open.html.
Asennus ja käynnistys:
sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get -y install brackets
brackets
c) Käyttäjätarina
Käyttäjätarina (user story): ketkä ovat moduulisi käyttäjät? Mitä he haluavat saada aikaan moduulillasi? Missä tilanteessa he sitä käyttävät? Mitkä ovat tärkeimmät parannukset käyttäjän kannalta, joita moduuliin pitäisi vielä tehdä?
Moduulin käyttäjiä ovat Javascriptiin tutustuvat tai kokeneemmat front end -kehittäjät sekä SPA:ta (single page application) toteuttavat. Jos projektin haluaa aloittaa tyhjästä, mutta ei halua asentaa kaikkia softia itse, olisi tämä moduuli hyvä.
Vielä pitää saada npm toimimaan automaatiolla sekä siihen liittyvä mern-cli -paketti. Tämän lisäksi Bracketsin automaatio puuttuu vielä.
Lähteet
Lähteitä on tekstin seassa sitä mukaa, kun niitä on käytetty.
Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html