Harjoitus 8, Prosessinhallintaa ja lokeja

Ilpo Jokinen

Tehtävänanto: (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/#h8)


Kurssi: (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/)


Tehtävän aloitusaika: 19.03.2020 klo 10:52


Tehtävän lopetusaika: 19.03.2020 klo 16:32

Tehtävä 1

Kuormitusta yli ajan. Asenna heti aluksi jokin ohjelma seuraamaan kuormitusta, jotta voit tarkastella sitä koko tehtävän ajalta.

Tätä harjoitusta varten asensin sysstat ohjelman Linux – koneelleni. Avasin terminaalin ja annoin komennot sudo apt-get update ja sudo apt-get -y install sysstat. Testasin asennuksen onnistumisen antamalla sysstatin oma komento pidstat -p ALL terminaaliin. Sainkin näkyvilleni kaikki aktiiviset sekä ei – aktiiviset tehtävät, mitkä pyörivät koneellani. Asennus oli siis onnistunut,

Päätin tätä tehtävää varten seurata seuraavaa kahta kuormitustietoa, mihin löysin komennot tästä artikkelista (https://www.tecmint.com/sysstat-commands-to-monitor-linux/).

1. Jonotusaikoja ja prosessien kuormitus keskiarvoja (sar -q <intervallin pituus> <iteraatioiden määrä>)

2. Muistin statistiikkaa (sar -r <intervallin pituus> <iteraatioiden määrä>)

Seuraan jokaista 5 sekunnin intervalleissa ja annoin satoja tuhansia iteraatioita ettei ne vaan loppuisivat kesken harjoituksen.

Tehtävä 2

Kuormita järjestelmän eri osa-alueita. Esim. ’stress’. Kokeile käytännössä, selitä ja analysoi. Muista selittää, mitä komennolla halutaan selvittää ja tulkitse kokeilusi tulokset.

Stress + Load average:

Ensimmäisenä latasin stress työkalun sudo apt-get -y install stress – komennolla. Ohjeet oikeaoppiseen asennukseen ja sen testaukseen löysin tältä verkkosivulta (https://www.cyberciti.biz/faq/stress-test-linux-unix-server-with-stress-ng/). Päätin toteuttaa ensimmäisenä testinä sivulla ehdotetun, missä yritetään saavuttaa stressipiikki järjestelmän kuormaan. Nämä kuormien keskiarvot ovat määrityksiä siitä, kuinka paljon tietty tehtävä vaatii järjestelmältä (http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html).

Oli siis aika kuormittaa järjestelmää. Kirjoitin komentokehotteeseen uptime. Tämä näyttää em. kuormien keskiarvot. Saatuamme aloitusarvot suoritimme 10 sekunnin stressipiikin yhteensä 4 suoritettavaan tehtävään. 2 niistä oli prosessorikohtaisia, 1 komponenttien välisiä input/output – kohtaisia ja 1 muistikohtainen. Komento minkä annoimme oli stress -c 2 -i 1 -m 1 –vm-bytes 128M -t 10s.

Yllätyksekseni ensimmäinen huomioni oli suuri ero koneen äänessä. Ääni koventui huomattavasti kun olin ajanut komennon. Kun tarkastin sar:lla seuraamani prosessien latausaikoja seuraavan terminaalin, oli juuri kyseiselle 10 sekunnille ilmestynyt suuri hyppy kuormitus keskiarvoissa. Huomaa, että eniten muuttui ensimmäinen arvo sillä se mittaa lyhyempää 1 minuutin keskiarvoa (https://scoutapm.com/blog/understanding-load-averages).

Jos arvo olisi 1.00 se tarkoittaisi sitä, että kuormitus on juuri ja juuri rajoilla, mutta ei optimaali ja siitä ylemmäs aletaan olemaan ongelmissa. Artikkelissa mainitaan, että monet sysadminit vetävät kuormitusrajaksi yleensä 0.70.

Kuormitus ennen ja jälkeen stressipiikin
Kuormituksia valvova tilasto

Miten load average tulkitaan ja miksi prosessoriydinten määrällä on väliä?

Löytämästäni artikkelista (https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/) sain selville, että uptime – komennon voi tulkita hyvinkin eri tavalla riippuen koneesi prosessori arkkitehtuurista.

Jos ymmärsin oikein kuormitus keskiarvo 1.00, mikä määrittää täyden hyödyn olisikin minun tapauksessani 8.00, koska prosessorissani ytimiä on 8. Saat selville, kuinka monta prosessoriydintä koneesi käyttää antamalla komennon nproc. Itselläni on 8 -ytiminen Intelin prosessori.

Iotop:

Iotop on työkalu, millä voidaanseurata eri komponenttien tilaa ja aiheutunutta kuormaa järjestelmään (https://linux.die.net/man/1/iotop). Asennetaan iotop komennolla sudo apt-get -y install iotop ja käynnistetään se näyttämään vain niitä prosessseja, jotka käyttävät I/O:ta siitä lähtien, kun iotop on käynnistetty. Tämä onnistuu kun annamme komennon sudo iotop -oa.

Halusin testata, miten raskaampien sovellusten käyttö näkyy iotop:ssa. Testauksessa avatut sovellukset olivat Spotify sekä Visual Studio Code. Huomasin, että sovellukset itsessään avattuna ei vaikuta kovin paljon kuormitukseen, puhutaan prosentin sadasosista. Päätin avata isohkon ohjelman npm paketilla Vs Codessa. Laitoin node-express kirjaston päälle ja käynnistin sovelluksen npm start komennolla. Huomasin välittömästi, että node – kirjasto vie huomattavan paljon tilaa käynnistyksen yhteydessä (n. 10%), mutta palautuu muutaman sekunnin jälkeen stabiiliin ~0.60% kuormitukseen. Alimpana listassa näkyvä mongodb – tietokanta käynnistyy myös, mutta ei vaikuta olevan kovin raskas. Se on toisaalta tässä sovelluksessa hyvin pienessä käyttötarkoituksessa.

Listasta näemme myös, että Spotifyn kuormitus on noussut himean, kun aloitin musiikin suoratoiston. Taustalla pyörii muitakin prosesseja kuten firefox.

iotop

Levytilallisesti spotify vie eniten tilaa Toisena tulee myös prosentuaalisesti korkeisiin lukemiin pääsyt tiedostojärjsestelmäpäiväkirja jdb2.

Voit hyppiä välilehdillä nuolinäppäimillä

Dstat:

Dstat on monipuolinen työkalu, millä voidaan seurata useita järjestelmän resurssitilastoja (https://linux.die.net/man/1/dstat). Tästä artikkelista (https://www.tecmint.com/dstat-monitor-linux-server-performance-process-memory-network/) sain apua selvittämään, mitä erilaisia järjsetelmän osia voimme havannoida dstatilla, jotta voisimme keksiä miten testautamme sitä tällä kertaa.

Päätin testata, millä tavoin dstat reagoi ison tiedoston lataukseen netistä. Tässä tilanteessa kyseessä on GitHub repositoryn kloonaamisesta koneelleni. Otin seurantaan disk stats, network stats sekä paging stats tilastot. Komento oli dstat –time -d -n -g <intervallin pituus> <iteraatio määrä>.

Kloonauksesta seurasikin iso, mutta hyvin lyhytkestoinen piikki network stats välilehdelle. Piikki oli niin lyhyt, että en saanut siitä kuvakaappausta.

Seuraavaksi halusin kuormittaa levytilaa stress komennon avulla ja seurata sitä dstat:n avulla. Aiheutin 10 sekunnin piikin levytilan kuormitusta varten ja sain onnistuneesti dokumentoitua ko. piikin.

SS:

Ss – komento on samankaltainen verkkoyhteyksiä tutkiva työkalu kuin netstat, mutta se on huomattavasti selkeämpi luettavaksi (https://www.linux.com/topic/networking/introduction-ss-command/). Seuraavasta kuvankaappauksesta näemme muutaman komennon toiminnallisuuden. -t tarkoittaa kaikki päällä olevia tcp-yhteyksiä ja, jos lisäämme -a vaihtoehdon näemme myös yhteydet, jotka eivät ole päällä mutta kuuntelevat. Esimerkkinä ssh ja postgresql. Vaihtoehdot löysin tästä artikkelista (https://www.linux.com/topic/networking/introduction-ss-command/).

Halusin testata, näkyykö ssh – yhteyden luominen tcp – yhteyksien listassa. Avasin ssh -yhteyden localhostiin ja ajamalla uudestaan komennon ss -t sain ko. yhteyden listaan.

Yhteenveto kuormitustiedoista

Lähes 5h datan keruun perusteella kuormituskeskiarvoni on 0.7 luokkaa. Kuva siis sar -q komennolla aloitetun tilastonkeruun viimeisiltä riveiltä. Kello 14 eteenpäin en enään kuormittanut konettani kertaakaan, joten keskiarvo on lähempänä totuutta kuin kovasti kuormitettua testiympäristöä. Tulokset pysyttelevät 0.70 rajan tuntumassa, joten mitään syytä huoleen ei ole.

Sas – r komennolla seuraamani muistitilasto näyttää sen sijaan isoja lukuja. Pääsyy tälle on se, että olen ollut idlenä monessa työpöytäsovelluksessa kuten Microsoft Teams sekä Whatsapp sekä kuunnellut jatkuvasti musiikkia Spotifysta. Kbcommit ja %commit kuvaavat kokonais muistimäärän käyttöä mukaanlukien RAM ja Swap (https://www.linuxtechi.com/generate-cpu-memory-io-report-sar-command/).

Harjoitus 7, Vanhan laboratorioharjoituksen toteuttaminen

Tämän viikon aiheena on kertaus ennen laboratorioharjoitusta. Tehtävänannossa (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/) tarkoituksena on ratkaista vapaasti valittava edellisten kurssitoteutuksien viimeinen harjoitus. Valitsin vuoden 2018 alkukevään tehtävän (http://terokarvinen.com/2018/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-6-torstai-alkukevat-2018-5-op).

HUOMIOITAVAA:

Tehtävää tehdessäni huomasin, ettei taitoni riitä kaikkien kohtien tekemiseen, mutta yritin jokaista silti. Osan sain tehtyä loppuun asti, mutta kohdat ## Sorkka ja Rauta Oy:n CRM sekä ## Rosvoja porteilla jäivät vaiheeseen.

Syinä tälle oli, että pitkän googlettelun jälkeenkin en osannut tarpeeksi php:tä ja postgresql toimintaa, jotta olisin saanut tietueet näkymään verkossa. Murtautumisyrityksiä en saanut analysoitua, sillä toimin paikallisesti localhostilla. Näytin kuitenkin, miten näitä voi seurata, jos toimit oikeassa internetissä. Myös alkuperäinen suunnitelma käyttää mySQL tietokantoja kaatui ongelmaan, missä en päässyt omalla käyttäjällä sql sisään. Virheilmoitus oli seuraava:

ilpo@ilpo:/etc$ mysql -u ilpo -p

Enter password:

ERROR 1045 (28000): Access denied for user ’ilpo’@’localhost’ (using password: YES)

Tätäkin haeskelin tunteja internetistä, mutta en saanut juuri tähän tarkoitukseen ratkaisua.

Tehtävän aloitusaika: 17.03.2020 14:55

Tehtävän lopetusaika: 17.03.2020 19:30

## LAMP
Asenna LAMP (Linux, Apache, MySQL, PHP) ja testaa sen toiminta.

Ensimmäisenä tehtävänä oli asentaa koneelle LAMP (Linux, Apache, MySQL, PHP) ja testata sen toiminta.

Toimin harjoituksessa dual bootatulla koneellani, mihin olen jo asentanut Apache2 demonin, joten aloitin asentamalla LAMP:n puuttuvat osat MySQL sekä PHP. Komennot näden asennukseen ovat:

MySQL:

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

PHP:

sudo apt-get -y install libapache2-mod-php

PHP (tietokannoille):

sudo apt-get install phpmyadmin

Ensimmäisenä testataan apache! Avaan selaimella localhost:n ja saan “Hei Maailma!” tekstin ilmestymään sivulleni, kun muokkaan apachen oletussivua haemistossa /var/www/html/index.html. Näin voin olettaa, että apache toimii oikein.

Tietokantaa testasin luomalla uuden tietokannan nimeltä kirjat ja antamalla sille jotain tietoa.

Tiedot tallentuivat onnistuneesti, joten voidaan olettaa että MySQL:n asentaminen oli onnistunut.

Php:n testaus onnistuu, kun muokkaamme /var/www/html kansiota. Poistamme index.html oletussivun ja luomme uuden index.php tiedoston, mihin annamme koodin:

<?php

phpinfo();

?>

Avaamme localhostin ja saamme palautettua info sivun. Php on siis onnistuneesti asennettu.

## Sorkka ja Rauta Oy:n CRM
Tarvitsemme asiakastietokannan. Tee tietokanta, jossa on seuraavat asiakkaat:
- Kulta ja Kaivos ky
- Piilosana ry
- MetalliMake
Tee PHP-ohjelma, joka lukee nämä tietueet. Laita tämä sivu näkyviin osoitteessa
http://sorkkacrm.example.com
Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla. Tässä harjoituksessa sivulle
pääsyä ei tarvitse rajoittaa salasanalla, vaan sen tule näkyä kaikkialle nettiin.

Loin psql tietokantaan taulun asiakas ja sinne määritelllyt asiakkaat. Komennolla psql pääset sisään ja voit aloittaa sql lauseiden kirjoittamisen.

Config.php, missä määritän tietokannan luomisen sekä käynnistyksen.

index.php, minkä pitäisi yhdistää Config.php tiedostoon ja tulkita tietueet html tekstin sekaan. Tässä tehtävässä epäonnistuin.

localhost tässä vaiheessa:

## Rosvoja porteilla
Onko koneellemme yritetty murtautua? (Kyllä). Etsi omalta paikalliselta koneeltasi todisteet
tapauksesta, jossa koneellesi on yritetty murtatua. Analysoi tiiviisti tähän liittyvät tiedot.

Tässä osiossa täytyy seurata palvelimelle tulleita murtautumisyrityksiä. Harjoituksessa kuitenkin käytän localhostia enkä täten saa juurikaan mitään murtautumisia havaittua.

## Einarin esimerkki
Einari Vähä-aho ryhtyy koodaamaan. Tee einarille käyttäjä 'einari'.
Tee einarille esimerkkikotisivu PHP:lla ja laita se näkymään osoitteessa http://localhost/~einari/ .
Esimerkkisivun pitää tulostaa "Einari" käyttäen PHP:n print-funktiota.

Luodaan adduser komennolla uusi käyttäjä einari. Komennolla a2enmod userdir saadaan käyttäjäpolut toimimaan. Index.php tiedostoon teen käsketyn print funktion.

Lisäsin /etc/hosts tiedostoon 127.0.0.1 ja nimeksi einari. Näin saamme käytettyä käyttäjän nimeä polun perässä.

Harjoitus 6, Tietokannat käyttöön lomakkeilla (Python – Flask)!

Ilpo Jokinen

Tehtävänanto: (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/#h6)

Opetusmateriaali: (http://terokarvinen.com/2020/flask-automatic-forms/)

Tehtävän aloitus: 10:00 10.03.2020

Tehtävän lopetus: 19:00 10.03.2020

Tehtävä 1 Tee oma yksinkertainen, tietokantaa käyttävä ohjelma. Ohjelmalla tulee olla jokin käyttötarkoitus.

Loin kotihakemistooni kansion flask. Loin kansioon python tiedoston sekä templates kansion mihin loin kaksi html-tiedostoa. Hakemisto puuni näyttää tältä:

autoform.py:

Importtasin tiedostoon tarvittavat moduulit ja loin Note – modelin, missä määritän sen sisältämät parametrit. Ensimmäinen funkito luo tietokanta taulun, toinen luo lomakkeen ja sen sisältävän logiikan esimerkiksi viestin, kun käyttäjä painaa lähetys – nappia sekä itse muistilapun luomisen ja viimeinen ajaa ohjelman testausympäristössä.

Base.html:

Tämä tiedosto renderöi sivun viestin, minkä määritin python tiedostossa. Lisäksi sivun title on määritelty alhaalla.

Notes.html:

Tässä tiedostossa luon lomakkeen alapuolelle alueen, mihin tallentuneet muistilaput renderöidään. Käydään läpi jokainen muistilappu ja sen parametri. Ajan python tiedoston python3 tiedoston_nimi komennolla. Tämän jälkeen avaan selaimen osoitteeseen 127.0.0.1:5000.

Asetin uuden muistilapun ja sivun päivittämisen jälkeen se ilmestyi onnistuneesti lomakkeen alapuolelle.

Tehtävä 2 Laita tietokantaohjelmasi toimimaan mod_wsgi:n kanssa.

Käytetään viime harjoituksessa (https://ilpolinuxpalvelimet.wordpress.com/2020/03/03/harjoitus-5-ota-tuotantokelpoinen-python-flask-kayttoon-apache2lla/) luomaamme käyttäjää userwsgi täsä tehtävässä. Meidän täytyy luoda uusi kansio, mihin luomme samanlaisen tietokantoja käyttävän lomakeohjelman. Haluamme, että voimme luoda rauhassa tiedostoja ilman pääkäyttäjän oikeuksia tähän kansioon, joten annamme kaikille userwsgi ryhmäläisille oikeudet lukea, kirjoittaa ja ajaa (g=rwxs) kyseisen hakemiston tiedostoja.

Teemme näin, koska olemme käyttäjällämme jo osa kyseistä ryhmää. Jos emme olisi lisäisimme itsemme siihen komennolla sudo adduser ilpo userwsgi. Tämän jälkeen tulisi käyttäjän kirjautua ulos ja takaisin sisään.

Huomaa, että komennolla ls -ld voimme helposti nähdä kaikki oikeudet kyseiseen hakemistoon.

Nyt siirrämme edellisen tehtävän python ohjelman sekä html – tiedostot sisältävän kansion userwsgi hakemistoon.

Hakemistopuu näyttää siis seuraavalta:

Käymme ensin apachen konfigurointi asetuksissa asettamassa oikean .conf tiedoston päälle ja varmistamme, ettei muita .conf tiedostoja ole päällä. Sudo a2ensite haluttu_tiedosto sekä sudo a2dissite haluttu_tiedosto.

Käynnistäessä demonin uudelleen huomaamme, että useampi saman niminen WSGI Daemon määritys on käytössä. Tämä ratkeaa tutkimalla .conf tiedostoja. Jos useampi kuin yksi tiedosto käyttää samaa nimeä, tässä tapauksessa userwsgi, pitää toinen poistaa kokonaan tai vaihtaa nimeä. Poistin user_agent.wsgi.conf tiedoston, sillä se käytti samaa nimeä emmekä tarvitse sitä tässä tilanteessa. Poiston jälkeen demoni pystyi käynnistymään uudelleen.

Nyt kun ajamme ohjelman python3 tiedoston_nimi ja avaamme localhost:5000 saamme onnistuneesti sivun näkyviin wsgi käyttäjällä! Huomaa, että nyt käytämme wsgi – käyttäjää, joten sovelluksemme on tuotantokelpoinen. Huomasin myös, että päiväys ei ollut ensimmäisellä kerralla tulostunut muistilappuun. Syynä oli se, että olin kutsunut notes.html tiedostossa sitä eri nimellä, minkä olin sille asettanut python tiedostossa. Nimesin parametrin oikein notes.html tiedostoon ja asia ratkesi.

Tehtävä 3 Tee Flask-ohjelma, jossa on vähintään kaksi taulua (tables).

Taulut on helppokäyttöisiä ja toimii hyvin lomakkeiden kanssa. Luodaan taulu, mihin kaikki muistiinpanot tallentuvat. Meidän täytyy vain muokata notes.html tiedostoa ja luoda taulurakenne <table> tagien sisään.

Muokkasin myös ajan dateTime tyypiksi, jotta saamme eri aikaan tulevat viestit paremmin näkyville.

Nyt, kun lisäämme muistiinpanon se ilmestyy taulun sisälle.

Harjoitus 5, Ota tuotantokelpoinen Python-Flask käyttöön Apache2:lla!

Ilpo Jokinen

Tehtävänanto: (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/#h5)

Ohjeet: (http://terokarvinen.com/2020/deploy-python-flask-to-production/)

Laitteisto (lshw):

  • CPU : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
  • Display (VGA compatible controller): Intel UHD Graphics 620 33MHz
  • Display (3D Controller): Nvidia GP108M [GeForce MX150]

Käyttöjärjestelmä(lsb_release -a):

  • Ubuntu 18.04.4 LTS

Tehtävän aloitusaika: 19:42 (UTC+2) To. 27.2

Tehtävän lopetusaika: 12:41 Ti. 3.3

Tehtävä 1

Hello Flask! Tee Python Flask hei maailma kehitysympäristössä.

Aloitin tehtävän poistamalla /etc/apache2/sites-availabe hakemistosta kaikki tunnilla alustamani .conf tiedostot ja sallin demonin käyttää oletus VirtualHost:a komennolla sudo a2dissite 000-default.conf. Avasin localhostin ja sain palautettua palvelimelta tekstin ”empty”, minkä olin alustanut aikaisemmin polkuun /var/www/html/index.html, mitä VirtualHost kuuntelee. Mainitakseni, että olin jo aikasiemmin ladannut Apache2 – demonin komennolla sudo apt-get -y install apache2.

Nyt demoan, että pystyn muokkaamaan oletussivua, joten annan komennon echo ”Hei Maailma”|sudo tee /var/www/html/index.html ja komennolla curl localhost voin palauttaa tekstimuodossa palvelimelta tuleen vastauksen.

Näytetään vielä kuva selaimesta.

Nyt ladataan python3-flask komennolla sudoapt-get -y install python3-flask.

Teen uuden python ohjelman nimeltä hello.py ja avaan sen localhostiin portin 5000 kautta komennolla python3 hello.py.

Palvelin palauttaa statuskoodin 200 OK ja avattuani kysyisen url:n sain näkyviin ohjelmassa annetun tekstijonon ”Hello Flask”.

Tehtävä 2Tuotanto-Flask.

Tee tuotantotyyppinen asennus Flaskista käyttäen Apachen WSGI-modulia. Kokeile, että pystyt muokkaamaan koodia ilman sudoa ja saat uuden version käyttöön käynnistämättä Apachea uudelleen. (’touch foo.wsgi’).

Uuden käyttäjän luominen

Luodaan uusi WSGI eli Web Server Gateway Interface (https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface) käyttäjä komennolla sudo adduser userwsgi. Tämä käyttäjä tullaan lukitsemaan heti komenolla sudo usermod –lock userwsgi, sillä emme tarvitse kirjautua sillä sisään. Kuitenkin tietoturvasta tinkimättä annamme silti ensin hyvän salasanan. Hyvä salasana generointi työkalu on pwgen, jonka voi ladata apt-get:n avulla. Tällä luomme uuden 30 tavua pitkän salasanan ja annamme sen uudelle käytäjällemme. Lopuksi lisäämme oman käyttäjämme uuteen ryhmäämme userwsgi.

Nimipohjaisen VirtualHost:n luominen Python Flaskille

Luodaan seuraavaksi hakemistoon /etc/apache2/sites-available uusi knofiguraation tiedosto userwsgi.conf, mikä otetaan käyttöön komennolla sudo a2ensite userwsgi.conf ja samalla estetään oletustiedoston käyttö a2dissite apukäskyn avulla.

Annoimme ServerName:lle arvon localhost sillä kokeiluympäristö toimii tällä hetkellä paikallisena. Directory näyttää hakemistopolun, mistä VirtualHost etsii palvelimelle wsgi-tiedoston. Ohessa muita wsgi märittelyjä, joita en tässä tilanteessa selvittänyt.

Kun avasin localhostin sain statuskoodin 403 – Forbidden.

HUOMIO! Sinun tulee ensin ladata WSGI – moduuli komennolla sudo apt-get -y install libapache2-mod-wsgi-py3 ja sen jälkeen käynnistää demoni uudestaan.

Lukemalla jälleen kerran apachen käytännöllisiä lokeja, tarkemmin ottaen error.log lokitiedostoa komennolla tail -1 /var/log/apache2/error.log, saamme vinkin. Loki palauttaa seuraavan rivin.

AH01630: client denied by server configuration: /home/userwsgi/public_wsgi

Kansion luonti ja oikeuksien optimointi

Meidän pitää ensin luoda tämä hakemisto sekä antaa oikeus käsitellä sitä ilman sudo oikeuksia. Tämän jälkeen tulee antaa oikeus myös muille käyttäjille muokkaamaan hakemistoa, emmehän halua, että kehittäjä kolleegamme eivät pysty pääsemään käsiksi sorsiimme.

Mkdir komento luo hakemiston. Chown antaa normaalin käyttäjän oikeudet ja chmod g=rwxs oikeuttaa kaikkien käyttäjien pääsyn hakemistoon (”g=rw” = asettaa luku ja muokkaus oikeuden käyttäjälle ja ryhmälle, ”x” = kaikki käyttäjät, ”s” = sticky, eli asettaa käyttäjät oikeuksiinsa).

Tämän vaiheen jälkeen statuskoodimme vaihtuu 404 – Not Found:ksi. Error.log (mitä kannattaa pitää koko ajan auki toisessa terminaalissa) antaan taas meille ohjeita.

Target WSGI script not found or unable to stat: /home/userwsgi/public_wsgi/user.wsgi

Ei ihme, koska emmehän ole vielä luoneet kyseistä tiedostoa.

Sovelluksen luonti ja bugi uloskirjautumisessa

Tehdään se! Hoidamme sovelluksen luonnin komennollanano /home/userwsgi/public_wsgi/user.wsgi.

Mutta emme muka ole ryhmän userwsgi jäsen eikä minulla ole oikeutta luoda sitä? Jos tämä ongelma ilmenee paras tapa on kirjautua ulos ja takaisin sisään. Tässä tilantessa minulle ilmeni ongelma. Ilmeisesti Intel – näytönohjaimilla on bugi, minkä takia kirjautuessani ulos näyttö pimenee eikä enää reagoi mihinkään! Tutkin hieman asiaa syslogista ja sain vinkiksi seuraavan lokirivin:

Feb 27 20:56:37 ilpo kernel: [ 72.335584] [TTM] Buffer eviction failed

Nopealla googlauksella (https://askubuntu.com/questions/845094/ttm-buffer-eviction-failed-on-ubuntu-turn-off) selvitin, että kyse voi olla Ubuntu kernelissä, mutta en tutkinut asiaa tässä vaiheessa enempää. Kuitenkin pakottamalla uudelleenkäynnistyksen painamalla virtanäppäintä pohjassa sain koneen taas aktiiviseksi ja tämän jälkeen userwsgi ryhmä oli ilmestynyt käyttäjäni ryhmiin.

Nyt voin siis luoda tarivtsemamme sovellustiedoston sekä wsgi-tiedoston.

Toisiksi ylin rivi on vain sitä varten, jos jollakin käyttäjällä on vanhempi versio pythonista.

Nyt palvelin palauttaa sovelluksemme!

$ curl localhost
Hello Flask!

Tehtävä 3

Lisää tuotanto-Flaskiin muotit (templates).

Templatet ovat helppo keino kirjoittaa validia html-koodia, joten muokataan sovellustamme käyttämään niitä! Ensin sinun tulee luoda templates kansio, mihin luot base.html tiedoston. Tarvitset myös templates-flask.py tiedoston. Koodi on lähes identtinen. Importoimme vaan templaten käyttöömme ja käytämme sitä palautuksen aikana.

Ajamme ohjelman komennolla python3 flask-template.py ja saamme localhostiin näkymään luomamme templateja käyttävä sovellus!

HUOMIO! Nyt kun yritän ajaa hello.py sovellusta saan localhost:n palauttamaan statuskoodin 403 – Forbidden. Komennolla groups nään, että pääkäyttäjäni on userwsgi ryhmässä ja kaikilla on oikeus käsitellä /home/userwsgi/public_wsgi hakmeistoa. Käynnistin Apachen uudelleen, mutta en saa silti muuta vastausta kuin 403.

Harjoitus4, oman virtuaalipalvelimen luominen, SSH -yhteys ja murtautumisyrityksiä!

Ilpo Jokinen

Kurssin (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/) seuraavassa tehtävässä opimme, miten Linuxilla luodaan ja hallitaan ikiomaa palvelinta.

Palvelin Dropletin sekä oman palvelinnimen luominen

Ensimmäisenä minun piti hakea opiskelijan kehittäjäpaketti osoitteesta (https://education.github.com/). Tarvitset tähän GitHub käyttäjän, mikä on rekisteröity jonkun koulun sähköpostin alle. Kun paketti on saatu valitsin (https://education.github.com/pack/offers) linkistä näkyvästä listasta itselleni nimen tajoajan, tässä tapauksessa namecheap.com – palvelun. Jos et omista vielä tunnuksia nimipalveluun on suositeltavaa luoda käyttäjä ensin.

Tässä tehtävässä käytän namechep nimipalvelua sekä DigitalOcean palvelintarjoajaa

Navigoin namecheap.com sivulle, josta pystyn GitHub Education käyttäjänä etsimään itselleni oman DNS-nimen.

Annoin korttini tiedot ja upotin GitHub Education sivulta näkyvän ilmaiskoodin maksutapahtumassa. Näin sain ensimmäisen julkisen palvelinnimen käyttööni! Nimeksi valitsin ilpojokinen.me.

Seuraavaksi loin DigitalOceaniin käyttäjän seuraten GitHub Education sivulla (https://education.github.com/pack/offers) olevaa linkkiä. Nyt minun tarvitsee enää kirjautua GitHub tunnuksillani sisään ja pääsen seuraavaan näkymään, missä palvelin luodaan painamalla ”Create new” – painiketta oikeassa yläkulmassa ja valitaan droplets vaihtoehto.

Seuraavalta sivulta valitaan Ubuntu distroksi. Alempana näkyy eri hintaisia tarjouksia, mutta muista klikata ”Show all plans” – painiketta, sillä halvempiakin hintoja löytyy!

Asun Suomessa, joten valitsin datakeskuksen Frankfurtista. Autentikaatio voisi suorittaa SSH avaimella, mutta tätä hieman kuumeessa tehdessäni on helpompaa ja nopempaa valita One-time password vaihtoehto. Toki tämä ei ole yhtä turvallinen.

Annoin dropletilleni nimen ja painoin ”Create Droplet” – painiketta. Dropletin luomisessa ei mene kuin 30 sekuntia. Kun luonti on valmis ilmestyy uusi Droplet näkymäämme ja näemme tästä uuden palvelimemme IP-osoitteen.

Tätä tarvitsemme nimipalvelun sivulle, missä määritämme DNS-asetuksissa, millä URL-osoitteella navigoimme mihinkin IP-osoitteeseen. Tämän löydät namecheapista käyttäjäsi alta. Valitset vain nimen listasta ja painat ”Manage” – painiketta. Alustin tänne kaksi A-tietuetta. @ – merkki kuvastaa sitä, jos sivulle navigoidaan pelkän nimen perusteella ja www käyttää muotoa ”www.ilpojokinen.me”.

SSH – alustustyöt

Nyt tarvitsemme SSH – demonin apua. SSH – demoni ladataan helposti komennolla sudo apt-get y install ssh. Yhdistämme sen avulla koneellamme olevan html-sivun palvelimellemme.

Terminaali pyytää rootin salasanaa, minkä DigitalOcean on lähettänyt sähköpostiisi Dropletin luonnin jälkeen. Tämän jälkeen asetat virtuaalipalvelimellesi uuden salasanan. Huomioi, että @ – merkkiä ennen tuleva nimi ei ole Dropletin nimi vaan oletuksena root. Eli oikeoppisesti kirjoitat ssh root@virtuaalipalvelimenIP-osoite.

Käyttäjän lisäys

Nyt lisään uuden sudo käyttäjän nimeltä ilpo, jolle annan sudo sekä admin oikeudet. Tämä tapahtuu komennoilla sudo adduser ilpo, sudo adduser ilpo sudo, sudo adduser ilpo adm.

Rootin estäminen

Tämän jälkeen estin root käyttäjän komennolla sudo usermod –lock root. Sen jälkeen muokkasin sshd_config tiedostoa komennolla sudoedit /etc/ssh/sshd_config seuraavasti. Vaihdoin kohdassa PermitRootLogin vastaukseksi ”no”.

Testasin rootin estämisen onnistumisen avaamalla uuden terminaalin ja yrittämällä kirjautua sisään rootilla. Kirjautuminen estettiin, joten lukitus oli onnistunut. Saan muutokset voimaan asettamalla komennon sudo service ssh restart.

Toisessa terminaalissa ajoin komennon ssh ilpo@virtuaalipalvelimenIP-osoite. Näin pääsin uuden ilpo käyttäjän päällä palvelimelleni. Tässä vaiheessa terminaalin käskyjä antaa käyttäjä@dropletin nimi eli minu tapauksessa ilpo@pussinokkaelain.

Virtuaalipalvelimen käyttöönotto Apache2 demonin avulla

Seuraavaksi oli aika asentaa Apache2 – demoni komennolla sudo apt-get -y install apache2. Avasin selaimessa localhostin ja oletussivu pamahti ruutuun. Asennus siis onnistui.

Nyt on aika saada virtuaalipalvelimeni linkitettyä apache2 demonin kanssa. Haluan samalla varmistaa, että käyttäjän kotihakemistossa olevat sivut näkyvät palvelimeni etusivulla. Ensin navigoin apachen konfigurointiasetuksia pitämään hakemistoon /etc/apache2 . Siellä on moduuli nimeltä sites-available mikä sisältää oletuksen mistä hakemistosta apachen virtuaalipalvelin hakee html-tiedoston. Tämä tiedosto on nimeltään 000-default.conf, minkä voimme estää komennolla sudo a2dissite 000-default.conf. Luodaan tähän hakemistoon uusi konfigurointitiedosto nimeltä ilpojokinen.me.conf ja asetetaan se seuraamaan polkua /home/ilpo/public_html/ilpojokinen.me.

Hyvä ohje miten luodaan VirtualHost löytyy tästä linkistä (https://httpd.apache.org/docs/2.4/vhosts/name-based.html). VirtualHostini näyttää siis tältä.

Seuraavaksi oli aika asentaa Apache2 – demoni komennolla sudo apt-get -y install apache2. Avasin selaimessa localhostin ja oletussivu pamahti ruutuun. Asennus siis onnistui.

Nyt on aika saada virtuaalipalvelimeni linkitettyä apache2 demonin kanssa. Haluan samalla varmistaa, että käyttäjän kotihakemistossa olevat sivut näkyvät palvelimeni etusivulla. Ensin navigoin apachen konfigurointiasetuksia pitämään hakemistoon /etc/apache2 . Siellä on moduuli nimeltä sites-available mikä sisältää oletuksen mistä hakemistosta apachen virtuaalipalvelin hakee html-tiedoston. Tämä tiedosto on nimeltään 000-default.conf, minkä voimme estää komennolla sudo a2dissite 000-default.conf. Luodaan tähän hakemistoon uusi konfigurointitiedosto nimeltä ilpojokinen.me.conf ja asetetaan se seuraamaan polkua /home/ilpo/public_html/ilpojokinen.me.

Hyvä ohje miten luodaan VirtualHost löytyy tästä linkistä (https://httpd.apache.org/docs/2.4/vhosts/name-based.html). VirtualHostini näyttää siis tältä.

Palvelimen etusivun rakennus

Nyt minun täytyy luoda kyseinen hakemisto ja sen alle html-tiedosto. Tämä onnistui komennolla mkdir -p /home/ilpo/public_html/ilpojokinen.me sekä sudoedit /home/ilpo/public_html/ilpojokinen.me/index.html.

Validoin html koodini osoitteessa (https://validator.w3.org/nu/#textarea) ja se oli onnistunut.

Testatakseni onnistuiko tämä kaikki, navigoin selaimessa osoitteeseen ilpojokinen.me ja palvelin palauttikin onnistuneesti juuri luomamme html-sivun.

Murtautumisyrityksien analysointia lokien avulla

Palvelimeni on ollut pystyssä nyt noin 3 tuntia ja on aika katsoa, minkälaisia mahdollisia murtautumisyrityksiä on saatu aikaiseksi Navigoin hakemistoon /var/log. Seuraamalla auth.logia komennolla tail -F auth.log paljastui, että toden totta muutama kirjautumisyritys palvelimelleni on jo ehtinyt tapahtua.

Lokista pomppasi kaksi tuntematonta IP-osoitetta silmään. 80.225.220.22 oli ilmeisesti portista 50865 yrittänyt päästä sivulleni mutta ssh oli sulkenut yhteyden. Toinen osoite 31.7.59.147 oli ollut paljon aktiivisempi ja sillä oli useita kirjautumisyrityksiä, mutta onneksi olin heti alussa asettanut vahvan salasanan eikä hän ollut päässyt sisään. Kirjoittamalla whois ip-osoite saadaan kattavasti tietoa ip-osoitteista. Esimerkiksi tämä aktiivinen henkilö palautti seuraavat tiedot

IP-osoite kuuluu Panamalaiselle yritykselle Private Layer INC, mikä jakaa (https://privatelayer.com/) serveripalveluita Sveitsiin. GeoIp Lookup – työkalun (https://www.ultratools.com/tools/geoIp) avulla varmistin, että IP – osoite on kuin onkin Sveitsissä.

Kummallista on, että tämä IP-osoite kuuluu henkilölle Cristina Castro, jonka pitäisi asua Hollywoodissa.

Harjoitus 3, Apache2 demonin asennus ja hallinta

Ilpo Jokinen

Tänään harjoittelemme maailman suosituimman webbipalvelimen eli apache2 demonin hallintaa (http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/).

Maailman suosituimman webbipalvelimen asennus

Ensimmäisenä latasin terminaalista uusimmat tietoturva ja ohjelmistopäivitykset komennolla sudo apt-get update ja asensin apache2:n komennolla sudo apt-get -y install apache2. Tämän jälkeen aktivoin tulimuurin komennolla sudo ufw enable sekä tein muuriin reiän http pyynnöille, jotta voin käyttää palvelinta. Tämän suoritin komennolla sudo ufw allow 80/tcp. Tulimuuria en testannut tässä vaiheessa.

Demotakseni, että sekä demonin asennus, että portin aukaiseminen onnistui, navigoin selaimessa osoitteeseen localhost mikä avasi onnistuneesti apache2 oletussivun.   

Oletussivun muokkaus

Seuraavaksi halusin testata, onnistunko muokkaamaan tätä oletussivua. Tunnilla olin oppinut, että oletussivu sijaitsee hakemistossa /var/www/html/index.html, joten suoritin sen päällä komennon sudoedit. Kirjoitin ‘Hello World’ ja sain sen näkymään localhost palvelimellani.

Virtual Hosting

Tämän jälkeen minun täytyi vaihtaa apachen oletussivu niin, että alkuperäinen sijaitsee joknun käyttäjän kotihakemistossa ja normaali käyttäjä voi muokata sitä ilman sudo oikeuksia. Loin kotihakemistoon /home/xubuntu uuden hakemiston nimeltä publicSite ja sinne tiedoston index.html johon kirjoitin ‘Ilpon Kotisivu’. Tämän jälkeen navigoin hakemistoon /etc/apache2/sites-available ja loin sinne konfigurointi tiedoston nimeltä ilposite.com.conf. Tiedostoon loin seuraavan konfigurointiohjeen:

Minulle on tässä vaiheessa epäselvää mitä tämä oikeastaan tekee, joten pienellä tutkinnalla (https://geek-university.com/apache/sites-available-directory/) sain selville, että sites-available avulla Apache pystyy käsittelemään monia sivuja millä on erilaiset konfigurointi asetukset. DocumentRoot ja Directory kohdissa määritelty polku osoittaa missä sivun lähdekoodi sijaitsee. Tässä tapauksessa se on hakemistossa publicSite minne olin luonut index.html sivun.

Komennolla sudo a2ensite _konfigurointi-ojeen nimi_ pystytään tehdä sivusta näkyvä. Vastaavasti komennolla sudo a2dissite _konfigurointi-ojeen nimi_ voidaan estää sivun käyttö. Estin oletussivun näyttämisen tällä komennolla eli estin konfigurointi tiedoston 000-default.conf. Muistutuksena, että aina kun konfigurointiasetuksia on muokattu pitää demoni käynnistää uudelleen komennolla sudo systemctl restart apache2.

HUOM! Jos jostain syystä et saa uutta kotisivuasi näkymään palvelimella suosittelen ajamaan komennon apachectl configtest. Esimerkiksi olin typottanut ilposite.com.conf tiedostooni mikä ilmeni tuolla komennolla. Rivi kertoo selkokielellä, että tiedostossa ilposite.com.conf rivinumero 9 on kirjoitusvirhe (syntax error). Sulkutagini </VirtualHost> olikin </VurtualHost>.

Muutoksen jälkeen suoritin jälleen komennon sudo systemctl restart apache2, jonka jälkeensivu näkyi onnistuneesti palvelimellani.

Huomaa että pääkäyttäjänä et voi muokata sivuja, joten käytä komentoa nano _tiedoston-nimi_!

Access.log analysointia

Halusin selvittää, minkälaisia http vastauksen tilan koodeja saan esille. Helpoin tapa seurata näitä tapahtumia realiajassa on tulkita Apachen access.log lokitiedostoa. Seuraat kyseistä lokia antamalla terminaalissa komennon tail -F /var/log/apache2/*. Tässä muutama status code minkä sain aikaiseksi.

304 (Not Modified)

Tämä koodi tarkoittaa yleensä sitä, että kyseistä sivua ei ole muokattu uudelleen, kun sivulle navigoidaan, joten sitä pystytään käyttämään välimuistin kautta. Sain statuskoodin yksinkertaisesti päivittämällä sivun ilman muutoksia.

Tulos:

ilposite.com:80 127.0.0.1 – – [08/Feb/2020:11:38:26 +0000] ”GET /~xubuntu/ HTTP/1.1” 304 179 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0”

  • 127.0.0.1 on remote host.
  • 8. helmikuuta kello 11:38:26. Kellonaika ja päivämäärä, jolloin palvelin lopetti pyynnön käsittelyn. Lopussa aikavyöhyke (UTC).
  • GET /~xubuntu/ HTTP/1.1″. Palvelin hakee resurssin ~xubuntu ja käyttää siihen protokollaa “HTTP/1.1”.
  • 304 on palvelimelta tullut statuskoodi. 179 on palvelimelta tulleen vastauksen bittikoko.
  • Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0. Tästä selviää mitä selainversiota on käytetty. Renderöinti on toteutettu Gecko moottorilla ja se pyörii Ubuntu Linux käyttöjärjestelmän päällä.

200 (OK)

Tämä on http maailman yleisin statuskoodi, mikä tarkoittaa, että pyyntö on onnistunut. Sain statuskoodin, kun olin tehnyt index.html tiedostosta oikeaoppisen html sivun.

Tämä on http maailman yleisin statuskoodi, mikä tarkoittaa, että pyyntö on onnistunut. Sain statuskoodin, kun olin tehnyt index.html tiedostosta oikeaoppisen html sivun.

Tulos:

ilposite.com:80 127.0.0.1 – – [08/Feb/2020:11:59:40 +0000] ”GET / HTTP/1.1” 200 518 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0”

  • 127.0.0.1 on remote host.
  • 8. helmikuuta kello 11:59:40. Kellonaika ja päivämäärä, jolloin palvelin lopetti pyynnön käsittelyn. Lopussa aikavyöhyke (UTC).
  • GET /~xubuntu/ HTTP/1.1″. Palvelin hakee resurssin ~xubuntu ja käyttää siihen protokollaa “HTTP/1.1”.
  • 200 on palvelimelta tullut statuskoodi. 518 on palvelimelta tulleen vastauksen bittikoko.
  • Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0. Tästä selviää mitä selainversiota on käytetty. Renderöinti on toteutettu Gecko moottorilla ja se pyörii Ubuntu Linux käyttöjärjestelmän päällä.

404 (Not Found)

Annoin selaimeen tahallani osoitteen http://localhost/~VÄÄRÄ/.  Näin ollen palvelin yrittää navigoida ip-osoitteeseen käyttäjänä mitä ei ole olemassa.

Tulos:

ilposite.com:80 127.0.0.1 – – [08/Feb/2020:12:08:26 +0000] ”GET /~V%C3%84%C3%84R%C3%84/ HTTP/1.1” 404 488 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.

BMI laskuri

Yhtenä tehtävänä oli luoda painoindeksi laskuri webbipalvelimelle. Ratkaisuni tehtävään oli luoda koodi suoraan index.html päälle ja näyttää se localhostissa.

Harjoitus 2, lokien analysointia, komentokehote asennuksia ja ikävä ongelma Go:n asennuksessa sekä SSH – yhteydessä.

Ilpo Jokinen

Tämän viikon osiossa (http://terokarvinen.com/2020/aikataulu-linux-palvelimet-ict4tn021-3010-torstai-aamu-alkukevat-2020-5-op) keskityn harjoittelemaan linuxilla erilaisia komentorivillä tapahtuvia toimintoja ja analysoimaan lokitietoja.

Kurssilla linuxia käyttäessäni olen huomannut, että koneeni mennessä virransäästötilaan ja näytön sammuessa ei se enää reagoi hiiren tai näppäimistön käyttöön. Siksi ensimmäisenä etsin asetuksista keinon estää näytön sammumisen, ettei minun täydy käynnistää kone uudestaan. Komennolla Alt + Ctrl + F1, Alt + Ctrl + F7 sain näytön takaisin päälle tunnilla kerran, mutta en sen jälkeen enää uudestaan. Tähän en löytänyt mitään järkevää syytä.

Avasin käyttöliittymän vasemmasta yläreunasta valikon ja navigoin oikeassa alareunassa olevaan kohtaan Settings ja sieltä etsin kohdan Power Manager. Välilehdellä Display oli kohta mistä näytön automattisen virransäästötilan asetuksia pystyi muokata.

Lokit

Ensimmäisenä tehtävänä oli aiheuttaa lokiin kaksi erilaista tapahtumaa josta toinen on onnistunut ja toinen ei. Halusin tutkia mitä erilaisia lokeja linuxilla on olemassa, joten asetin komennon cd var/log + ls -la, minkä avulla sain avattua terminaaliin listan lokitiedostojen sijainnista

Avasin lokit boot.log, syslog ja auth.log tarkempaa tutkintaa varten komennolla sudo tail boot.log, sudo tail syslog, sudo tail auth.log. Auth.log, minkä tehtävänä on pitää rekisteriä onnistuneille ja epäonnistuneille kirjautumisille sekä todenusprosesseille(https://www.plesk.com/blog/featured/linux-logs-explained/) näyttää, miten sudo komennolla saan käyttööni täydet järjestelmän käyttöoikeudet ja pääsen sisälle lokitiedostoihin.

Nämä lokirivit osoittavat kuinka ”xubuntu sudo” eli pääkäyttäjä, joka toimii juurihakemistossa /var/log suorittaa komennon tail syslog. Tapahtuma avataan, koska hallussani on täydet oikeudet ja suljetaan kun suoritan seuraavan komennon. Tässä on esimerkki onnistuneesta toimeenpiteestä.

Demotakseni epäonnistunutta toimenpidettä ajattelin seurata auth.log lokitiedostoa komennolla tail -f /var/log auth.log ja avata toisen komentokehotteen millä yritin kirjautua roottiin komennolla su ja antaa tarkoituksenmukaisesti väärä salasana. Lokiriveiltä pystymme lukemaan, että välittömästi salasanan kirjoituksen jälkeen tulostui lokiin käyttäjän root todennuksen epäonnistuminen.

SSH – demoni (ONGELMA)

Latasin ssh demonin komennolla sudo apt-get install -y ssh. Tämän jälkeen tein muutaman testikomennon (https://www.ionos.com/community/server-cloud-infrastructure/linux-server/fixing-ssh-errors/). Varmistin, että SSH – serveri pyörii komennolla sudo ps -aux | grep sshd.

Tarkistin myös portin mitä ssh kuuntelee. Porttina tomiii oletuksena 22.

Kuitenkin yrittäessäni yhdistää palvelimelle tero@example.com terminaaliin ei ilmesty

mitään prosessia tai muuta indigaattoria siitä, että komento olisi onnistunut.

Muutama hauska ja käytännöllinen terminaalissa käytettävä ohjelma

Latasin ja asensin muutaman ohjelman joita voi käyttää suoraan terminaalissa. Ensimmäisenä asensin graaffisen tekstinmuokkaus ohjelman Figlet (https://www.tecmint.com/cool-linux-commandline-tools-for-terminal/). Testasin ohjelmaa terminaalissa.

Seuraavan latasin multimediaa toistavan musiikkiohjelman mp3blaster (https://linuxconfig.org/command-line-programs-for-everyday-use-in-linux). Tämä osoittautui näppäräksi ja kevyeksi pikku ohjelmaksi minkä käyttö tuntui luontevalta. Pystyin helposti hakemaan juuri ladatun mp3.tiedoston painamalla F3 näppäintä avattuani ohjelman kirjoittamalla terminaaliin mp3blaster.

Viimeisenä latasin Lynx – webselaimen, mikä toimii tekstimuodossa terminaalissa. Tämä on hyvä tapa lukea vaikka artikkeleita, kun jokapuolella ei välky mainoksia tai pop-up ikkunoita. (https://www.tecmint.com/command-line-web-browsers)

Huomasin, että varsinkin Google hakukone toimii mukavasti ja pystyin helposti navigoimaan Kauppalehden sivuille tutkimaan pörssiä.

Pörssin generointi terminaaliin MOP työkalun avulla (ONGELMA!)

Edellisestä tehtävästä kiinnostuneena ajattelin, jos olisi mahdollista saada vaikka jenkkimarkkina tulostumaan terminaaliin vaivattomasti. Lösyinkin aiheesta artikkelin (http://xmodulo.com/monitor-stock-quotes-command-line-linux.html), jonka ohjeilla yritin tätä toteuttaa. Törmäsin kuitenkin ongelmiin, kun olin asentanut Go koodikieli paketin mitä tarvitaan käyttämään MOP – työkalua.

Latasin Go:n heidän omilta sivuiltaan (https://golang.org/doc/install). Sivun ohjeiden mukaan minun täytyi purkaa Go kansio hakemistoon /usr/local. Tässä onnistuin komennolla sudo mv /home/xubuntu/Desktop/go /usr/local. Ongelmaksi muodostui tämän kyseisen kansion polun asettaminen. En ymmärtänyt mihin minun pitää syöttää komento export PATH=$PATH:/usr/local/go/bin.

Xubuntun testaaminen omalla koneella, harjoitus 1

Latasin koulussa Xubuntun koneelleni netistä. Tämän jälkeen käytin ohjemaa nimeltä Rufus jolla onnistuin konfiguroimaan .iso tiedosto muodossa olevan Xubuntun ajotiedoston perinteistä Windowsin FAT32 tiedostomuoto tukevalle livetikulleni. Ensimmäinen huomio oli, ettei livetikku toiminut boottauksen yhteydessä vaan minun täytyi valita Windowsin “start up settings” kohdasta tikulta käynnistys. Tämän jälkeen käynnistettyäni homma alkoi pelittämään ja näytölle ilmestyi valinta, haluanko asentaa vai kokeilla Xubuntua.

Pääsin työpöydälle ja ensimmäisenä kiinnitin huomiota, että annettuani wlan salasanana verkkoyhteys muodostui välittömästi, kun taas Windowsissa siinä yleensä menee n. 5 sekuntia. Avasin selaimen ja kirjauduin moodleen. Tästä päätellen päätelaitteeni näyttö, hiiri ja netti toimivat moitteettomasti, näppäimistö ei aivan.

Tätä kirjoittaessani kursorini LibreOfficessa pomppii noin 30 sekunnin välein ympäri tekstidokumenttia aiheuttaen minulle päänvaivaa. Sama tapahtuu myös selaimessa. Tutkin asiaa ja tajusin sen johtuvan siitä, että läppärini touchpad toimii, vaikka hiireni on kytkettynä, mikä johti vahingollisiin virheliikkeisiin. Löysin artikkelin (Lähde n.10), minkä ohjeiden avulla kuuluisi ladata touchpadia kontrolloiva plugari. Touchpadin estämisen jälkeen asia korjaantui.

Teen harjoitukseni omalla koneellani Asus Viviobook S, specsit alla:

Koneeni tiedot terminaalissa näytettynä

Asennuksia:

Asensin Xubuntuun seuraavaksi nämä 3 ohjelmaa:

– Gimp (Kuvankäsittely)

Gimp on täysin vapaata lähdekoodia sisältävä softa, mikä on omiaan Linux ympäristöön, mutta muita ilmaisia kuvankäsittelyohjelmia on mm. Krita ja Pinta (Lähde 8).

(Asennus tapahtui muutamassa sekunnissa komennolla “sudo apt install gimp”, älytöntä! ) Toimii.

– uTorrent (BitTorrent ohjelma, mikä käsittelee .torrent tiedostoja)

Linuxille löytyy useampikin vapaan lähdekoodin softa. Esimerkkinä vaikkapa Qbitorrent (Lähde n.9).

Asennuksessa piti googlailla hetken, mutta sain lopulta toimimaan. En ole varma onko Linuxille ns. työpöytäversiota olemassa, mutta sain uTorrentin pyörimään serverinä portissa 8080.

Komentoni uTorrent Serverin asentamiseen:

– Spotify (Musiikin suoratoistopalvelu)

Linuxille löytyy joitakin musiikin streamaus ohjelmia, jotka kuitenkin jäävät Spotifyn varjoon lähinnä sen takia, että Spotify omistaa käyttöoikeudet lähes kaikkiin artisteihin niin pieniin kuin suuriinkin ympäri maailmaa ja dominoi musiikin suoratoisto markkinoita iTunesin kanssa.

Asennus tällä kertaa komennolla snap install spotify. Komento sudo apt install ei toiminut, terminaali palautti virheilmoituksen: “E: Unable to locate package Spotify “. Asennus nopea ja softa toimii 🙂

Lisensseistä:

Gimp eli GNU Image Manipulation on GPL v.3:n alainen softa (Lähde n.1). GPL takaa käyttäjilleen oikeuden jakaa ja muokata mitä tahansa Gimpin, kunhan se säilyy ilmaisena jokaiselle käyttäjälle. GPL antaa myös mahdollisuuden kopioida softaa eteenpäin tai käyttää hyväkseen osia softasta omissa projekteissa.

GPL vaatii, että samat oikeudet, joiden alla olet saanut toimia siirtyvät myös kolmannelle osapuolelle, kun esimerkiksi myyt tuotetta eteenpäin ja, että myös heidän on saatava pääsy lähdekoodiin. Lisenssin mukaan muokatut versiot tulisi merkitä muokatuiksi, jotta mahdolliset negatiiviset muutokset eivät toisi hallaa edellisten versioiden haltijoille (Lähde n.2).

uTorrent (BitTorrent omistaa) toimii OSI:n Jabber Open Source lisenssin pohjalta laaditulla The BitTorrent Open Source lisenssillä. FSF luokittelee BitTorrentin vapaaksi ohjelmaksi huolimatta siitä, ettei se vastaa GPL asettamia ehtoja (Lähde n.3). Kuitenkin, aina täysin maksettuun tilaukseen asti sinun tulee noudattaa lisenssin (Lähde n.5) asettamia ehtoja. Eli ennen täysiä käyttöoikeuksia sinä et saa kopioida softaa jakeluun tai muokata sitä millään tavalla.

Maksetun tilauksen jälkeen lisenssin (Lähde n.4) mukaan voit käyttää tai luovuttaa tuotetta yksinään tai osana jotain muuta softaa ilmaiseksi. Voit muokata softaa, mutta sinun täytyy antaa muokattu lähdekoodi kaikkien saataville ilman lisäkustannuksia.

Jos koitat patentoida mitään osia lisenssin alla olevasta tuotteesta, viedään sinulta oikeus lisensoidun tuotteen käyttöön (Lähde n.4).

Spotify antaa paljon rajatummat oikeudet käyttäjilleen. Käyttäjä saa ei-yksinomaisen oikeuden käyttää softaa, kunhan se ei ole kaupallista. Oikeuden voi myös peruuttaa. Spotify brändinä on täysin Spotifyn ja heidän lisenssinantajien yksinomistuksessa. Spotifyn lähdekoodi on suojattu ja sitä ei saa missään nimessä jakaa, kopioida, tallentaa tai muokata millään tavalla. Spotifylla on myös maantieteelliseen sijaintiin kohdistuvia säädöksiä (Lähde n.6).

The list goes on… Spotify palvelun käyttäjälle ei anneta siimaa softan vapauksissa.

Itse lisenssi nimikettä en löytänyt googlaamalla. Löysin tosin kolmannen osapuolten lisenssit, jotka ovat kytköksissä Spotifyihin (Lähde n.7).

Mainittakoon vielä, että tätä harjoitusta tehdessäni ruudulle ilmestyi muutaman kerran seuraava virheilmoitus. Mitään muuta dataa ei ilmoitus antanut.

Lähdeviitteet:

1.  https://www.gimp.org/about/

2. https://www.gimp.org/about/COPYING

3. https://en.wikipedia.org/wiki/BitTorrent_Open_Source_License

4.https://www.bittorrent.com/license/

5. https://www.utorrent.com/utorrent-pro/eula

6. https://www.spotify.com/fi/legal/end-user-agreement/

7. https://developer.spotify.com/legal/third-party-licenses/#embedded-sdk-third-party-licenses

8.https://www.linux.fi/wiki/Portaali:Kuvank%C3%A4sittely#Kuvank.C3.A4sittelyohjelmat

9. https://www.ubuntupit.com/open-source-torrent-client-for-linux-top-10-reviewed-for-linux-nerds

10. https://itsfoss.com/disable-touchpad-when-mouse-used/

Create your website at WordPress.com
Aloitus