Tagpython

Linux palvelimena kurssin tehtävä: Ratkaise peruskurssin linux-koe

Saimme Linux palvelimena kurssin ensimmäiseksi tehtäväksi ratkaista jonkin aikaisemman peruskurssin kokeen.
Huom! Koska Linuxin perusteet ovat itselleni tutut, olen kirjoittanut ajan säästämiseksi tämän artikkelin ulkomuistista.

Valitsin itse tämän: http://terokarvinen.com/2012/koe-tyoasemat-ja-tietoverkot-33-linux.

Tervetuloa Kiertoradan Kansa Oy:n tietohallintoon! Olet toistaiseksi koko IT-osastomme.
Asenna meille työasema, jolla voi surffailla wepissä, kirjoittaa dokumentteja ja tehdä taulukkolaskentaa. Kirjoitusohjelmista OpenOffice on meille tuttu, voitko asentaa myös sen?

Xubuntun asennus rutiinit ovat lähes identtiset ubuntun kanssa. Tästä minulla on valmiit ohjeet jo olemassa aikasemmassa artikkelissa:
http://nikokiuru.com/2011/08/ubuntu-11-04-asennus/

Meillä työskentelevät Mikko Mallikas, Maija Mehiläinen, Einari Vähäkäähkä, Ik E, Veijo Miettinen ja Håkan Persson. Tekisitkö meille käyttäjät ja jokaiselle esimerkkikotisivun. Voimme sitten muokata sivut SSH-yhteydellä mieleisiksemme. Tallenna käyttäjätunnukset ja salasanat kotihakemistoosi pelkkänä tekstinä tiedostoon users.txt.

Ensimmäisenä päivitetään apt kirjasto:

$ sudo apt-get update

Seuraavaksi lisätään uudet käyttäjät komennolla:

$ useradd käyttäjä

jonka jälkeen annetaan käyttäjälle vahva salasana, ja muutama muu käytättäjäkohtainen tieto.

Kokonaisuudessaan siis:

$ useradd mikko
$ useradd maija
$ useradd einari
$ useradd ik
$ useradd håkan

Kirjoitetaan käyttäjien tunnukset ja salasanat muistiin omaan kotihakemistoomme:

$ cd ~
$ nano users.txt

Ctrl + o -näppäinyhdistelmällä saadaan tallennettua toiminto, ja ctrl + x päästään poist perustilaan.

Seuraavaksi asennetaan apache2 http-palvelin, käyttäjien kotisivuja varten:

$ sudo apt-get install apache2
$ sudo a2enmode userdir
$ sudo service apache2 restart

Nyt käyttäjien kotihakemistoihin on ilmestynyt uusi kansio “public_html”, jotka ovat auki ulkoverkkoon perjaatteella: “http://domain_tai_serverin_ip/~kayttaja”

Einari haluaa käyttää PHP:ta. Tee Einarille “Hei maailma”.

PHP-tuen apacheen saa asennettua seuraavasti:

$ sudo apt-get install php5
$ sudo apt-get install libapache2-mod-php5
$ sudo a2enmod php5
$ sudo service apahce2 restart

Jotta käyttäjät pystyvät ajamaan php:ta omasta kotihakemistosta, täytyy meidän hieman muokata apache2:n asetustiedostoa:

$ cd /etc/apache2/mods-enabled/
$ sudoedit php5.conf

Kommentoi seuraavat rivit antamalla # merkin rivin eteen:

#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_value engine Off
# </Directory>
#</IfModule>

Lopuksi restartataan apache2, jotta saadaan äskeinen muutos voimaan:

$ sudo service apache2 restart

Tehdään Einarin kotihakemistoon “Hei maailma” php-tiedosto.

Ensimmäiseksi asennetaan openssh-serveri, jotta voimme kirjautua käyttäjinä sisälle.

$ sudo apt-get install openssh-server

Jonka jälkeen kirjaudutaan sisälle einarina:

$ ssh [email protected]

Ja seuraavaksi annetaan einarin salasana.

Sitten luodaan einarille kotihakemistoon public_html.

$ cd /home/einari/
$ mkdir public_html

Ja seuraavaksi luodaan Einarille “Hei maailma” testi php-skripti.

$ cd /home/einari/public_html
$ nano index.php

Kirjoita tiedostoon seuraava scripti:

<?php echo "Hello php!"; ?>

Ctrl + o tallensi tiedoston, ja ctrl + x sulki sen, kuten aikaisemminkin.

Ja lopuksi voimme poistua einarina kirjoittamalla exit komentoriville.

Maija haluaa ohjelmoida Pythonilla. Mikko haluaa ohjelmoida Javalla. Tee ja testaa “hei maailmat” kummankin kotihakemistoon.

Asennetaan python:

$ apt-get install python-dev

Tehdään “hei maailma” tiedosto Maijan kotihakemistoon.
Eli ensimmäiseksi kirjaudutaan sisään Maijana:

$ ssh [email protected]

Ja luodaan maijalle “Hei maailma!” esimerkki koodi:

$ nano heimaailma.py

Kirjoitetaan tiedostoon heimaailma.py tiedostoon:

print 'Hei maailma!'

ja testiksi voimme vielä ajaa sen komennolla:

$ python heimaailma.py

Kuulin, että saatat päästä innovaattorikurssille Turkkiin. Valmistaudu siis ylläpitämään konettamme verkon yli. Suojaa kone tulimuurilla. Tee reiät tässä asentamiasi palveluita varten

Asennetaan palomuurisovellus ufw:

$ sudo apt-get install ufw

seuraavaksi kytketään palomuuri päälle, sekä laitetaan portit 22 ja 80 avoimiksi:

$ sudo ufw enable
$ sudo ufw allow 22
$ sudo ufw allow 80
$ sudo ufw default deny

tämän jälkeen serveri on käynnistettävä uudestaa, jotta asetukset astuvat voimaan.

$ sudo shutdown -r 0

Oma prototyyppi, Hellemittari!

Suunnittelimme ja rakensimme luokkakaveri Samuelin kanssa oman prototyypin kurssin lopputyönä. Näin kesän alkussa on tarvetta laittaa kuntoon oma Hellemittari!

Hellemittari mittaa LM35 lämpömittarisensorilla ilman lämpötilaa. Me puolestaan loimme siihen visuaalisen näyttötavan sekä mittaria on mahdollista lukea myös etänä. Kun teimme proton yhteistyöllä niin sovimme, että minä hoidan mittauspuolen eli mittaan ilman lämpötilan ja syötän sen tietokantaamme. Samuel taas puolestaan hoitaa lämpötilan hakemisen sekä yhteis työllä työstimme visuaalisen lämpötilan näyttötavan.

Kun lähdetään paremmin tarkastelemaan itse lämpötila mittaria se näyttänee tältä:

2012-05-14-077

Ylläoleva piiri kertoo ilman lämpötilan, kun sitä siltä kysytään. Lähdekoodit löytyvät alta:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
float tempc = 0; // Celsius
int readPin = 0;
char variable = 0;
void setup() {
Serial.begin(9600); // bit/s
pinMode(13, OUTPUT);
}

void loop() {
variable = Serial.read();
if (variable == 's') {
tempc = analogRead(readPin);
tempc = (5.0 * tempc * 100.0)/1024.0;
Serial.print(tempc);
variable = 0;
delay(100);
}
}

Kyseistä Arduinoa ohjataan meidän tekemällä python ohjelmalla, joka lähettää tietyn väliajoin pyyntöjä Arduinolle ilman lämpötilasta. Alta löytyy lähdekoodit:

## Niko Kiuru
## License: GPL version 2 or later
import serial
import urllib2
import time

ser = None

def main():
global ser
ser = serial.Serial("/dev/ttyACM1")
print("Temperature Server Starting...")
while (ser):
print("Serial port " + ser.portstr + " opened.")
ch = 's'
print("Sending...")
ser.write(ch)
degree = ser.read(5)
print degree
# url = osoite johon otetaan yhteyttä degree parametrilla
# Esimerkki urli:
url = 'www.esimerkkidomain.com?degree=%s' % degree
urllib2.urlopen(url)
time.sleep(5)

print("Temperature Server shutdown")

if __name__ == "__main__":
main()

Tietokanta puoli toteutettiin php:n get parametreilla, jotka se vie mysql tietokantaan. Lähdekoodit alla:

/**
 * Niko Kiuru
 * License: GPL version 2 or later
 */
 $result["degree"], "time" => $result["datetime"]);
$degree_r = $result["degree"];
}

//$degreeList = json_encode($degreeList);
//print_r($degreeList);
echo $degree_r;
}

mysql_close($connect);
?>

Ylläolevan koodin saa helposti muokattua json-rajapintaa nuodattavaksi, mutta ajan loputtua emme ehtineet saamaan python ohjelman json-dekooderia toimimaan kunnolla jotta olisimme voineet käyttää sitä. Loput vaiheista toteutti Samuel, ja hän käy lävitse tekovaiheita omassa blogi postauksessaan. Linkki Samuelin blogi postaukseen: http://kontsu.wordpress.com/2012/05/14/arduino-remote-thermometer/

Ja lopuksi vielä kuva valmiista protosta:

Demovideo:

Arduinon ohjaaminen Pythonilla

Arduinon etäohjaaminen on suhteellisen helppoa. Tässä artikkelissa käyn lävitse kuinka tämä tapahtuu Pythonilla. Sama toimenpide on lähestulkoon yhtä helppoa myös muilla ohjelmointikielillä.

Ensiksi viedään Arduinoon seuraavanlainen koodin pätkä:

#!/usr/bin/env python
# remoteControl.py - Graphical user interface for remote control.
# (c) Kimmo Karvinen & Tero Karvinen http://BotBook.com

import serial
import gtk

ser=None # global variable

def sendSerial(widget, ch):
global ser
print("Sending "+ch)
ser.write(ch)

def main():
global ser
# File name might differ between Linux, Windows, and Mac OS X
ser = serial.Serial('/dev/ttyUSB0', 9600)

if (ser):
print("Serial port " + ser.portstr + " opened.")

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.main_quit)

vbox=gtk.VBox()
window.add(vbox)
row1=gtk.HBox()
off1 = gtk.Button("1 off")
off1.connect("clicked", sendSerial, "2")
row1.pack_start(off1)
vbox.pack_start(row1)
on1 = gtk.Button("1 on")
on1.connect("clicked", sendSerial, "8")
row1.pack_start(on1)

row2=gtk.HBox()
vbox.pack_start(row2) # vertical box starts at the bottom
off2 = gtk.Button("2 off")
off2.connect("clicked", sendSerial, "3")
row2.pack_start(off2)
on2 = gtk.Button("2 on")
on2.connect("clicked", sendSerial, "7")
row2.pack_start(on2)

row3=gtk.HBox()
vbox.pack_start(row3)
off3 = gtk.Button("3 off")
off3.connect("clicked", sendSerial, "4")
row3.pack_start(off3)
on3 = gtk.Button("3 on")
on3.connect("clicked", sendSerial, "6")
row3.pack_start(on3)

window.show_all()
gtk.main()
print ("Thanks for using BotBook.com remote control.")

if __name__ == "__main__":
main()

Seuraavaksi luodaan Pythonilla seuraavanlainen ohjelma:

#!/usr/bin/env python
# packingVBox.py - Pack many widgets on top of each other.
# (c) Kimmo Karvinen & Tero Karvinen http://BotBook.com

import gtk

window=gtk.Window()
window.connect("destroy", gtk.main_quit)

vbox=gtk.VBox()
window.add(vbox)

b1=gtk.Button("Button 1")
vbox.pack_start(b1)

b2=gtk.Button("Button 2")
vbox.pack_start(b2)

window.show_all()
gtk.main()

Ajamalla ylläolevan Python ohjelman näytöllesi piirretään 4 laatikkio, joita painamalla annat käskyjä Arduinollesi. Kyseinen ohjelma mahdollistaa virransyötön portteihin 2, 8, 3 ja 7.

Hei Maailma! Python:lla, sekä Javalla

Kun lähdetään opettelemaan uutta ohjelmointikieltä, ensimmäinen vaihe on luoda toimiva “Hei Maailma!”, tulostus. Nyt käyn läpi kahden eri ohjelmointikielen Pythonin, sekä Javan, jossa tulostamme “Hei Maailma!”:n.

Pythonissa tulostaminen käy huomattavasti vähemmällä koodin kirjoituksella verrattuna javaan. Tulostamiseen tarvitaan vain yksi rivi:

print “Hei Maailma!””

Tämän jälkeen ohjelma on valmis ajettavaksi, ja tulostaa Hei Maailma!

 

Tee tiedosto nimeltään heimaailma.java ja sinne seuraava koodinpätkä:

public class HeiMaailma {

public static void main(String[] args) {

System.out.println(“Hei Maailma!”);

}

}

Ohjelma käännetään Java Complierilla (=kääntäjä):

Javac heimaailma.java

Java kääntäjä luo tiedoston heimaailma.class, jonka jälkeen ohjelma on valmis ajettavaksi komennolla:

java heimaailma

© 2017 Niko Kiuru

Theme by Anders NorenUp ↑