IoT-Työpajan projekti

Mistä on kyse?

Osallistuin Haaga-Helian järjestämälle IoT-työpaja kurssille, jossa viikon aikana opiskelijat työstävät ryhmissä jonkinlaisen IoT-laitteen. Lisätietoja kurssista saa opettajan sivuilta:

http://terokarvinen.com/2016/internet-of-things-tyopaja-ict8tn017-1-intensiiviviikon-w12

Olin kurssilla ryhmässä Jori Laineen (https://jorilaine.wordpress.com/2017/03/23/iot-poytatuuletin/) sekä Joona Leppälahden (https://joonaleppalahti.wordpress.com/2017/03/23/iot-tuuletin-internet-of-things-tyopaja/) kanssa.

Linkki kurssilla toteuttamaamme IoT-tuulettimen raporttiin: https://github.com/joonaleppalahti/arctic-iot

Lisäilen tähän lisätietoja kurssilla tekemistäni asioista kun löydän aikaa.

 

Oma moduuli

Tehtävän lähde: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Päätin tehdä oman moduulini eräänlaiseksi kokoelmaksi niitä juttuja joita olen kurssilla harjoitellut. Idea on se että voin helposti tarkastella tällä kurssilla tekemiäni asioita sekä edellisessä linux-kurssilla oppimiani asioita yhden “git clone” komennon avulla.

Moduulit löytyvät täältä: https://github.com/eerokolkki/puppet

Moodulini joita olen tätä varten tehnyt ovat “lampstack”, “ssh1” ja “tausta”. Tämän lisäksi github hakemistossa on puppetlabsin mysql moduuli jonka avulla mysqllän saa asennettua niin että salasanan voi määrittää.

Lampstack moduulin tarkoitus on asentaa paketit apache2, apachen php modi, php 7, php:n mysql modi sekä phpmyadmin.

“lampstack” init.pp sisältö:

class lampstack {
package { “apache2”: }
package { “libapache2-mod-php7.0”:
require => Package[“apache2”], }
package { “php7.0”: }
package { “php-mysql”: }
package { “phpmyadmin”:}

Package { ensure => “installed”,
allowcdrom => true,
}
file { “/var/www/html/index.php”:
content => template(“lampstack/index.php”),
require => Package[“apache2”],
}
file { “/var/www/html/index.html”:
ensure => “absent”,
require => Package[“apache2”],
}
file { “/etc/apache2/sites-available/${title}.com.conf”:
content => template(“lampstack/vhost.conf.erb”),
require => Package[“apache2”],
}
file { “/etc/apache2/sites-enabled/${title}.com.conf”:
ensure => “link”,
target => “../sites-available/${title}.com.conf”,
require => Package[“apache2”],
}
file { “/etc/hosts”:
content => template(“lampstack/hosts”),
require => Package[“apache2”],
}
file { “/etc/skel/public_html”:
ensure => “directory”,
require => Package[“apache2”],
}
file { “/etc/skel/public_html/index.php”:
content => template(“lampstack/public_html/index.php”),
require => Package[“apache2”],
}
service { “apache2”:
ensure => “running”,
enable => “true”,
provider => “systemd”,
}
exec { “userdir”:
notify => Service[“apache2”],
command => “/usr/sbin/a2enmod userdir”,
require => Package[“apache2”],
}
file { “/etc/apache2/mods-available/php7.0.conf”:
content =>template(“lampstack/php7.0.conf”),
notify => Service[“apache2”],
require => Package[“apache2”],
}
file { “/etc/apache2/apache2.conf”:
content => template(“lampstack/apache2.conf”),
notify => Service[“apache2”],
require => Package[“apache2”],
}
}

“ssh1” moduulin taas asentaa ssl:n, muuttaa sen käyttämän porttinumeron, lisää reiät palomuuriin sekä laittaa palomuurin päälle.

init.pp sisältö:

class ssh1 {
package { ssh:
ensure => “installed”,
allowcdrom => “true”,
}
exec { “sudo ufw enable”:
path => “/bin/:/usr/bin/:/sbin/:/usr/sbin/”,
unless => ‘sudo ufw status verbose|grep “Status: active”‘,
}
exec { “sudo ufw allow 2222/tcp”:
path => “/bin/:/usr/bin/:/sbin/:/usr/sbin/”,
unless => “ufw status verbose|grep 2222/tcp”,
}
file { “/etc/ssh/sshd_config”:
content => template(“ssh1/sshd_config”),
notify => Service[“ssh”],
}
service { “ssh”:
ensure => “running”,
enable => “true”,
provider => “systemd”,
}
}

Kolmannen “tausta” moduulin päätin lisätä tuomaan hieman jotain ylimääräistä. Se muuttaa työpöydän taustakuvan. Jostain syystä moduulin ajaminen aiheuttaa jonkin virheen puppetin toiminnassa mutta googlettelun jälkeen totesin että virhe on ilmeisesti puppetissa eikä minun moduulissani. Vaikka virheviesti tulee niin se ei vaikuta mihinkään.

Virheviesti: Error: Removing mount “files”: /etc/puppet/files does not exist or is not a directory.

Tausta moduulin init.pp sisältö:

class tausta {
file {“/usr/share/xfce4/backdrops/eero.jpeg”:
source => “puppet:///modules/tausta/eero.jpeg”,
}
file {“/usr/share/xfce4/backdrops/xubuntu-wallpaper.png”:
ensure => “link”,
target => “/usr/share/xfce4/backdrops/eero.jpeg”,
}
service {“lightdm”:
ensure => “running”,
enable => “true”,
provider => “systemd”,
}
}

Testasin moduulejani komennolla “sudo puppet apply /etc/puppet/manifests/site.pp” komennolla VirtualBoxini Xubuntu 16.04.1 LTS x64 live-USB asennuksessa.

Tässä kuvia lopputuloksista:

untitledjjj

2gb6xzbuntitleda

Palvelinten hallinta kotitehtävä 13

h13. Kokeile jotakin puppetlabs/windows modulia.
Jotain muuta kuin chocolatey provider, jota käytimme jo aiemmin.

Lähde: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Päätin valita tämän providerin: https://forge.puppet.com/puppetlabs/windows

Kun olin ladannut providerin moduulit masterille ja laittanut edellisten tehtävien tavoin yhteyden pelaamaan masterin ja
orjan välillä niin loin oman “testi” moduulin.

“testi” moduulin sisältö:

class testi {
file {“C:/trole”:
content => “Hello Eero\n”,
}
windowsfeature { “NET-Framework-Core”:
ensure => present,}
}

Lisäsin site.pp tiedostoon class {testi:}

Ja kun ajoin puppet agent -tdv orjakoneella niin sain seuraavanlaisen errorin:

screenshot_2016-12-05_15-58-49screenshot_2016-12-05_15-59-59
Kuulin että tämä johtui siitä että windowsfeature resurssi löytyy vain windows server käyttöjärjestelmistä.
Moduulini toimii siis esimerkiksi windows server 2016 ympäristössä.

Palvelinten hallinta kotitehtävä 12

h12. Windowsin hallintaa. Tee kohta a ja jokin kohdista b – z. Kaikki kohdat tehdään Puppetilla.


a) Asenna ohjelmia Windowsiin package-resurssilla ja chocolatey providerilla. Täältä löytyy Gedit, Firefox, LibreOffice, VLC, sysinternals…
b) Asenna GoldenDict ja sille sanakirjat valmiiksi
c) Asenna MSI-paketti
d) Asenna jokin palvelin
e) Asenna joitakin ohjelmia DreamSparkista
f) Asenna MS Office
g) Asenna Adobe Creative Suite
h) (vaikeampi) Asenna active directory orja ja herra


Aloitustilanne:


Olen aiemman tehtävän mukaisesti laittanut master ja orja arkkitehtuurin toimimaan niin että Windows 10 agentti lataa Xubuntu masterilta sinne laitetut moduulit komennolla “puppet agent -tvd”.


Lähdin aluksi Teron ohjeiden (Lähde: http://terokarvinen.com/2016/automatically-install-a-list-of-software-to-windows-chocolatey-puppet-provider) mukaisesti ensin asentamaan puppetlabsin windows paketteja komennolla “sudo puppet module install puppetlabs/windows”. Sitten loin ohjeen mukaisesti init.pp tiedoston gedit moduulin sisälle jonne tuli:


class gedit {
include chocolatey
   Package {
ensure => “installed”,
provider => “chocolatey”,
}
   package {[“gedit”, “googlechrome”, “flashplayerplugin”, “firefox”, “skype”, “7zip”, “vlc”, “sysinternals”, “libreoffice”, “putty.portable”]:}


Tämän lisäksi oli vielä lisättävä moduulin nimi site.pp tiedostoon.


Onnistuin ajamaan moduulin komennolla “puppet agent -tvd” ja näin että ohjelmat alkoivat asentumaan.
untitleddd


Päätin valita toiseksi tehtäväksi b) osion jossa asennan blenderin msi paketin. Käytin tehtävää tehdessä apuna Joonan (joonaleppalahti.wordpress.com) ratkaisuja.


Aloitin luomalla uuden moduulin, jonne tuli seuraavanalinen init.pp tiedosto:
7z0j98k
Tämän lisäksi minun piti luoda moduulin sisälle (/etc/puppet/modules/willitblend) files kansio jonne tuli blender.msi asennusohjelma. Tämän lisäksi muokkasin site.pp tiedostoon willitblend luokan nimen. Nämä tehtyäni sain blenderin latausohjelman siirtymään Windowsille ja asentumaan puppetin avulla.


Lopputuloksia:
untitledddd
untitleddddd

Palvelinten hallinta kotitehtävä 11

h11. Hello Windows Puppet World. Asenna Puppet Windowsiin ja tee sillä hei maailma.
Voit tehdä hei maailman joko paikallisesti tai herra-orja arkkitehtuurilla.

Lähde: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Päätin aloittaa luomalla 2 virtualbox konetta joissa toiseen tuli Windows 10 pro ja toiseen Xubuntu 16.04.1 LTS.

Alkutilanne näytti siis tältä:
untitledfdfd

Ensimmäinen asia mitä tein oli uac:n ottaminen pois päältä, jonka jälkeen käynnistin koneen uudelleen jottam uutos tulisi voimaan. Uac oli otettava pois päältä jotta puppet agentin pystyy asentamaan Windowsiin.

untitled

Latasin sitten docs.puppet.comista puppet agentin asennusohjelman ja ajoin sen klikaten next kaikkiin kohtiin.

untitledsdasdafgfg

puppet.conf sisältö:
untitledsdasdafgfgff

Puppetmasterin puppet.conf:
untitledsdasdafgfgffsdsd
Poistin certifikaatit kuten tehtävässä 3 sekä puppetmasterilta että agentilta.
Tein hello modulin masterille ja pyöräytin puppetin agentilla jotta certifikaatit tulivat masterille. Hyväksyin sitten certifikaatit kuten tehtävässä 3. Kannattaa katsoa tehtävää 3 Jarkon sivuilta: https://jarkkokoski.wordpress.com/palvelinlinux-3/

class hello {
file {“c:/Temp/hellomodule.txt”:
content => “Hello from module!\n”,
}
}

site.pp kirjoitin class {hello:}

Ajoin lopuksi puppet agentin komennolla puppet agent -tvd ja se haki onnistuneesti modulin puppetmasterilta.

untitledsdasdafgfgffsdsdioiou

Palvelinten hallinta kotitehtävä 10

h10. Tyypit ja parametrit. Tee omat modulit, jotka käyttävät määriteltyä tyyppiä (defined type) ja parametroitua luokkaa (parametrized class).’

Lähde: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Käytin tehtävässä apuna Joonan tehtävää: https://joonaleppalahti.wordpress.com/2016/11/25/palvelinten-hallinta-harjoitus-10/

Aluksi simuloin nimipalvelun toimintaa lisäämällä kaksi osoitetta hosts tiedostoon: eerokolkki.com ja pulla.com.

Muokataan olemassaolevaa lampstack moduulia:

Tämän jälkeen lisäsin init.pp tiedostoon seuraavat rivit:

file { “/etc/apache2/sites-available/${title}.com.conf”:
content => template(“lampstack/vhost.conf.erb”),
require => Package[“apache2”],
}
file { “/etc/apache2/sites-enabled/${title}.com.conf”:
ensure => “link”,
target => “../sites-available/${title}.com.conf”,
require => Package[“apache2”],
}

Sitten tein tuon vhost.conf.erb tiedoston ja sinne tuli:

<VirtualHost *:80>
ServerName http://www.<%= @title %>.com
ServerAlias <%= @title %>.com
DocumentRoot /home/xubuntu/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

<Directory “/home/xubuntu/public_html”>
AllowOverride ALL
Require all granted
</Directory>

Tämän jälkeen piti luoda vhost.pp tiedosto init.pp tiedoston kanssa samaan sijaintiin.

define lampstack::vhost () {

file { “/etc/apache2/sites-available/${title}.com.conf”:
content => template(“lampstack/vhost.conf.erb”),
}

file { “/etc/apache2/sites-enabled/${title}.com.conf”:
ensure => “link”,
target => “../sites-available/${title}.com.conf”,
}
}

Huomasin että moduulini ei tee vielä käyttäjän kotihakemistoon mitään tiedostoja joten täytyypä lisätä sinne muutama skel file resurssi ensiviikolla. Onnistuin ajamaan moduulini onnistuneesti mutta jotta se toimii niin se täytyy ajaa 2 kertaa. Ajanpuutteen vuoksi raportointi jäi tässä tehtävässä aika laihaksi.

Lopputuloksia:lwe4s0c