Linux projekti – väliraportti vk48

Tähän mennessä Linux-projektissa aikaansaamamme asiat on selitetty edellisissä blogimerkinnöissä:

https://jaakkovalja.wordpress.com/2012/11/07/linuxprojekti-androidin-roottaaminen/

https://jaakkovalja.wordpress.com/2012/11/21/linux-projekti_ssh-yhteyden-luomine/

Projektin tavoitteet:
Projektillamme oli kolme tavoitetta. Ensin pyrimme selvittämään Androidin roottausta.

Roottasimmekin onnistuneesti minun Samsung Galaxy Ace -puhelimeni ensimmäisen viikon aikana.

 

Tämän jälkeen aloimme keskittymään projektimme työläämpään osa-alueeseen eli SSH-yhteyden luomiseen puhelimesta puhelimeen ja puhelimesta tietokoneelle.

Saimmekin tuon yhteyden lopulta toimimaan Saunalahden tarjoaman IP:n ansiosta.

 

Viimeisenä tavoitteena meillä oli tutustua ja mahdollisesti toteuttaa Androidin keskitettyä hallintaa puppetin avulla. Kiireellisen aikataulun johdosta toteutus ei kuitenkaan näillä näkymin tule onnistumaan. Pyrimme kuitenkin vielä tulevan viikon aikana tutustumaan aiheeseen ja dokumentoimaan tätä niin paljon kuin mahdollista.

Aikataulu ja toteutuminen:
Viikko 43: Aiheen ja ryhmän valinta ✔
Viikko 44: Projektisuunnitelman palautus ✔
Viikko 45: Aiheeseen tutustuminen, käytettävien sovellusten valinta ✔
Viikko 46: Roottaus valmis, jatkoon perehtyminen. Väliraportin laatiminen ja esitys. ✔
Viikko 47: SSH-palvelimen asennus ja konfigurointi, onnistumisesta riippuen testailua. ✔
Viikko 48: Mikäli SSH-palvelin on nopeasti saatu onnistumaan, perehdytään ja yritetään saada
toimimaan keskitetty hallinta. Muussa tapauksessa jatketaan SSH-palvelimen kimpussa.
Viikko 49: Viimeistellään projektia ja raporttia, palautus.
Viikko 50: Esitys luokassa.

Linux-projekti – SSH-yhteyden luominen

Androidin roottaamisen jälkeen aloimme ratkomaan projektimme seuraavaa ongelmaa: SSH-yhteyden muodostaminen puhelimen ja tietokoneen välille. SSH (Secure Shell)-yhteydes tarkoittaa käytännössä salattua yhteyttä kahden eri laitteen välillä, olivat ne sitten missä verkossa tahansa. Toinen laitteista toimii aina palvelimena ja toinen asiakkaana. SSH-yhteys on erittäin käytännöllinen, sillä sen avulla mahdollistuu turvallinen tiedon ja tiedostojen siirto laitteelta toiselle ilman muita ulkoisia apuvälineitä.

Viikolla 46 pidimme lyhyen esityksen siitä, mitä olimme tähän mennessä saaneet projektissamme aikaan. Lisäksi tutustuimme itsenäisesti lisää eri SSH-ohjelmiin ja tutkimme taustatietoa siitä, miten yhteys saataisiin muodostettua.

Löysimme mielestämme lupaavalta vaikuttavat ohjeet Cyanogenmodin sivuilta, joita aloimme seuraamaan.

Yritimme ensin noudattaa ohjeita niin, että Tommin puhelin (Samsung Galaxy S2) oli yhdistettynä koneeseen. Loimme koneella julkinen/yksityinen-salasanaparin ja kopioimme nämä myös puhelimen sdcardille. Tämä siksi, että vain oikean avaimen sisältävät koneet voivat ottaa yhteyden puhelimeen. Ennen tätä sdcard täytyi kuitenkin mountata saadaksemme rw-oikeudet, jotta tiedoston kopiointi onnistuisi.

Tämä onnistui komennoilla

$ adb shell

# mount -o remount rw /sdcard

Tämän jälkeen saimme siis tiedoston kopioitua sdcardille. Seuraavaksi täytyi ohjeiden mukaisesti luoda kansio, siirtää ko. tiedosto sinne ja tehdä joitain muokkauksia sen käyttöoikeuksiin. Törmäsimme kuitenkin kerta toisensä jälkeen virheilmoitukseen siinä vaiheessa, kun yritimme suorittaa komentoa

dropbearkey -t rsa -f /data/dropbear/dropbear_rsa_host_key

Ilmeisesti virheilmoitus johtui siitä, että ohjeissa oletettiin dropbearin olevan systeemissä valmiiksi asennettuna, kun taas todellisuudessa olemme jälkiläteen asentaneet sen siihen.

Yritimme siis seuraavaksi tehdä saman minun puhelimellani (Samsung Galaxy Ace), sillä flashasin siihen roottaamisen jälkeen CyanogenModin käyttöjärjestelmän, johon tuo dropbear oletuksena kuuluu. Tällä kertaa ohjeita seurattuamme pääsimmekin ohi tuon kohdan ja jatkamaan ohjeissa eteenpäin.

Komennolla

# ifconfig wlan0

saimme tietää puhelimeni ip-osoitteen (joka toki näkyy myös Dropbearissa puhelimessa) ja yritimme ottaa yhteyden koneelta puhelimeen. Jostain syystä tämä ei kuitenkaan toiminut puhelinverkon tai wlaninkaan kautta, ja vaikka yritimme monia säätöjä ja etsiä ohjeita eri lähteistä, ei mikään auttanut.

Lopulta päädyimme yrittämään yksinkertaisinta vaihtoehtoa, jota itse en ollut tullut edes ajatelleeksi. Koska molemmilla on Saunalahden liittymät, saa Oma Saunalahti-sivustolta vaihdettua asetuksen, jolla puhelinverkko alkaa käyttää IPv4-protokollaa. Tommi vaihtoi tämän asetuksen päälle ja puhelimessaan muutti vielä saunalahden APN:ää ja voilà!

Tämän jälkeen yhteyden muodostaminen onnistui välittömästi ilman ongelmia, yhteys pyysi vain rootin salasanan (oletuksena ”43”, vaihdoimme kuitenkin hieman monimutkaisempaan turvallisuden säilyttämiseksi) ja kaikki puhelimen tiedostot olivat saatavilla. Testasimme vielä, onnistuuko tätä kautta koneelta lisäämään esimerkiksi kansion puhelimelle. Annettuamme uudelleen tuon luku- ja kirjoitusoikeudet myöntävän komennon tämäkin onnistui ja kansio ”Testi” ilmestyi puhelimen File Manageriin. Yritimme myös yhdistää minun puhelimeni mobiiliverkon kautta Tommin puhelimeen SSH-yhteydellä käyttäen puhelimeni ConnectBot-ohjelmaa. Tämäkin yhteys onnistui ja pääsin selaamaan hänen tiedostojaan.
Ensi kerralla pyrimme vielä saamaan ”oikean” yhteyden toimimaan ilman Saunalahden tarjoamaa helpotusta, jonka jälkeen alamme selvittämään, onnistuisiko puppetin avulla useamman puhelimen keskitetty hallinta.

Linuxin keskitetty hallinta, kotitehtävä 2

Tein tehtävät HP:n Elitebookilla, Ubuntun versiolla 11.10.

Tehtävänä oli lukea Learning Puppetin kappaleet Ordering ja Modules and classes (part one). Näistä kummastakin tuli tehdä vähintään yksi esimerkkiohjelma.

Ordering

Kappaleessa käsiteltiin aihetta, joka on mielestäni koodikielelle erittäin epätavallista: puppetissa resursseja ei välttämättä ajeta siinä järjestyksessä, jossa ne koodissa esiintyvät. Järjestykseen voi kuitenkin tietenkin vaikuttaa komennoilla.

Aloitin antamalla komennon

$ nano ordering.pp

Sen sisällöksi loin seuraavaa:

file {’/home/example/esim1’:
mode => 0644,
content => ’this is an example’,
require => User[’example’],
}

user { ’example’:
ensure => present,
uid => ’2133’,
gid => ’admin’,
home => ’/home/example’,
password => ’esim223’,
shell => ’/bin/bash’,
managehome => true,
}

Tallennuksen jälkeen ajoin sen komennolla

$ sudo puppet apply ordering.pp
ja sain ilmoituksen, että luonti onnistui. Kävin myös tarkistamassa, ja tiedostokin oli luotu.
Modules and classes (part one)

Kappaleessa käsiteltiin luokkia, joilla voidaan kerralla kutsua useampia ohjelmakomentoja.

$ nano teht1.pp

class esimerkki {
file {’testi’:
path => ’/home/jaakko/puppet/classes/testi’,
ensure => present,
mode => 0664,
content => ”luokkien testausta”,
}
}

class {’esimerkki’:}

Määritellään siis ensin luokka ja sen sisälle komennot. Tämän jälkeen kutsutaan luokkaa jotta se ajettaisiin.

Tallennuksen jälkeen ajetaan komennolla

$ sudo puppet apply teht1.pp

notice: /Stage[main]/Esimerkki/File[testi]/ensure: created
notice: Finished catalog run in 0.04 seconds

Onnistui siis. Tarkistin vielä, että ko. tiedosto oli luotu, ja olihan se.

Linux-projekti – Androidin roottaaminen

Androidin roottaamisella tarkoitetaan sitä, että pystyy käyttämään puhelintaan root-oikeuksin. Käytännössä tämä tarkoittaa mahdollisuutta hallinnoida eri sovelluksia ja ominaisuuksia, joita tavallinen käyttäjä ei pysty muokkaamaan. Root-oikeuksin pystyy siis esimerkiksi poistamaan puhelimen mukana tulleita oletussovelluksia, jotka katsoo itselleen tarpeettomiksi.

Roottauksesta on muitakin hyötyjä: Akun kestoa pystyy pidentämään poistamalla tai jäädyttämällä turhia taustaohjelmia, ulkonäköä pystyy muokkaamaan entistä tehokkaammin sekä itse Androidin version päivitys mahdollistuu täysin uudella tavalla. Toki roottauksesta voi syntyä myös haittoja: Vahingossa saattaa tulla poistaneeksi jonkun oleellisen sovelluksen, jonka seurauksena puhelin tai jokin sen ominaisuus ei enää toimikaan kunnolla, tai voi tulla vahingossa sallineeksi jonkun sellaisen ohjelman, joka sisältää viruksia/haittaohjelmia.

Aloimme työparini kanssa tutkimaan puhelimeni (Samsung Galaxy Ace) roottaamismahdollisuuksia. Parin linkin jälkeen päädyimme XDA-Developersin foorumeille, josta löysimme selkeät ohjeet miten tämä toteutetaan:

1. Ladattiin sivustolta tiedosto upd_1.zip ja kopioitiin se sd-kortille.

2. Sammutettiin puhelin  ja käynnistettiin se recovery modessa home+power -napeilla.

3. Valittiin update from sdcard ja sieltä tuo ladattu zip-paketti.

4. Päivityksen jälkeen käynnistettiin puhelin normaalisti ja tarkistettiin, oliko roottaus onnistunut.

Ensimmäiseksi oli huomattavissa, että sovellusten joukkoon oli ilmestynyt uusi ohjelma, Superuser. Tämän työkalun avulla voidaan hallinnoida uusia asennettavia ohjelmia ja määritellä saavatko ne root-oikeudet.

Seuraavaksi testasimme ladata Google Play -sovelluskaupasta Titanium Backup -ohjelman. Tämän avulla ohjelmista voidaan ottaa varmuuskopioita ohjelmista ja poistaa niitä, siis myös sellaisia oletusohjelmia joita ei yleensä olisi pystynyt hallinnoimaan. Testasinkin poistaa muutaman (News & Weather, Yahoo! Finance), joka onnistuikin. Ainoa outo puoli oli se, että puhelin käynnisti itsensä uudelleen jokaisen poistetun sovelluksen jälkeen. Joka tapauksessa olimme siis saaneet onnistuneesti rootattua puhelimeni.
Aloimme seuraavaksi pohtia ei vaihtoehtoja SSH-yhteyden luomiseksi puhelimelta toiseen tai tietokoneelta puhelimeen. Latasimme seuraavat ohjelmat testi- ja vertailumielessä:

– ConnectBot

– DropBear

– SSHDroid

– SSHconnect

 

Linuxin keskitetty hallinta, kotitehtävä 1

Tehtävänä oli lukea sivulta http://docs.puppetlabs.com/learning/ kappaleet ”Resources and the RAL” sekä ”Manifests”.

Molemmista tuli sitten tehdä myös esimerkkikomentoja.

Resources and the RAL:

Kappaleessa käsiteltiin mm. uuden käyttäjän luomista, josta oli myös esimerkki. Lähdin siis yrittämään samaa.

$ nano user.pp

user { ’esimerkki’:
ensure => present,
uid => ’123’,
gid => ’admin’,
home => ’/home/esimerkki’,
password => ’esim123’,
shell => ’/bin/bash’,
managehome => true,
}

Tallennettuani tiedoston ajoin sen komennolla

$ sudo puppet apply user.pp

sain kuitenkin virheilmoituksen, jossa sanottiin, ettei uid ollut uniikki. Muokkasin sitä siis niin, että 123:n sijaan arvoksi tuli 1123, ja yritin uudelleen. Nyt komento onnistui ja sain ilmoituksen

notice: /Stage[main]//User[esimerkki]/ensure: created
notice: Finished catalog run in 0.40 seconds

Tarkistin vielä, että esimerkiksi määrittelemäni kotikansio oli luotu, ja näin olikin tapahtunut.

Manifests:

Kappaleessa käsiteltiin erilaisia tiedostoja, niiden luontia ja ajamista.

Päätin kokeilla helpolta vaikuttavaa esimerkkiä, jossa yhdellä .pp-tiedostolla saadaan luotua useita tiedostoja .pp ajamalla.

loin siis ensin tiedoston komennolla

$ nano 1.file.pp

Tämän tiedoston sisällöksi annoin seuraavaa:

file {’/home/esimerkki/esim1’:
ensure => directory,
mode => 0644,
}

file {’/home/esimerkki/esim2’:
ensure => present,
content => ”Tämä on esimerkkitiedosto”,
}

notify {”Tämä on huomautus”:}

Rehellisyyden nimissä täytyy myöntää, että tuon viimeisen huomautuksen funktiota en vielä ihan sisäistänyt, kunhan nyt seurasin esimerkin ohjeistusta.

Tallentamisen jälkeen ajoin tiedoston komennolla

$ sudo puppet apply 1.file.pp

sain seuraavia ilmoituksia:

notice: /Stage[main]//File[/home/esimerkki/esim2]/ensure: created
notice: /Stage[main]//File[/home/esimerkki/esim1]/ensure: created
notice: Tämä on huomautus
notice: /Stage[main]//Notify[Tämä on huomautus]/message: defined ’message’ as ’Tämä on huomautus’
notice: Finished catalog run in 0.06 seconds

Ilmeisesti tuo antamani notify ainakin tässä vaiheessa näkyi, lieneekö sitten jokin huomautus, jonka voi lisätä .pp-tyyppisiä tiedostoja ajaville käyttäjille nähtäväksi lisäinfoksi.

Tässä tapauksessa olisi siis voinut kirjoittaa esim. ”Tämä luo kansion ja tiedoston polkuun /home/esimerkki”.

Kävin vielä tarkistamassa kansion, johon olin tuon tiedoston ja alikansion määritellyt luotavaksi, ja sieltähän nuo löytyivät.

Testasin vielä myös komennolla

$ cat /home/esimerkki/esim2

ja sain vastaukseksi tulostuksen
Tämä on esimerkkitiedosto

Lähteet:

http://docs.puppetlabs.com/learning/ral.html

http://docs.puppetlabs.com/learning/manifests.html

www.terokarvinen.com