Paketinhallintaa

Pakettienhallintaa

Kurssimme aiheena tällä viikolla aiheena on pakettien hallinta.

Unelmien komentokehote

Saimme tunnilla tehtäväksi keksiä unelmien sudo apt-get rivin eli komennon, joka asentaisi kaiken tarpeellisen aina kerralla kun avaa vaikka live-linuxin tai vasta asennetun uuden tietokoneen.

Aikaa ei ollut paljoa, joten laitoin muutaman ensimmäiseksi mieleen tulleen asian: setxkbmap fi && timedatectl set-timezone Europe/Helsinki && sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys D2C19886 && echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list &&sudo apt-get update && sudo apt-get install spotify-client && sudo apt-get -y install vlc

  • setxkbmap fi asettaa ensin näppäimistön suomen asettelulle
  • timedatectl set-timezone Europe/Helsinki asettaa aikavyöhykkeen Helsinkiin
  • Spotifyn asensin mielenkiinnosta. Ohjeet löytyy täältä.
  • Sitten asensin vielä aptilla vlc:n, tähän listaan voisi lisätä lisää ohjelmia.

Kotitehtävät

Kotitehtäväksi saimme seuraavaa:

h4:
– Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista.
– Tee pakettivarasto repreprolla
– Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn

Vapaaehtoiset bonus-tehtävät:
– Kertaa Apachen asennus, käyttäjien kotisivujen teko ja lokin lukeminen
– Allekirjoita reprerolla tekemäsi varasto

Työvälineet

Harjoitukset tehdään Dell Optiplex 780 pöytätietokoneella johon on asennettu Xubuntu 14.04 LTS 64-bittisenä.

Metapaketti suosikkiohjelmille

Mietitään ensin mitä ohjelmia haluaisin aina asennettavan.

  • Skype
  • Chromium
  • Spotify
  • LibreOffice
  • VLC
  • Shotwell
  • Wine
  • Deluge

Tarkistetaan apt-cache search toiminnolla jokaisen paketin nimi. Skypeä ei saakaan ainakaan oletus repositoreista, se pitää ladata skypen sivuilta, joten jätetään se pois. Tarkistetaan Chromium paketti apt-cache search chromium | grep chromium. Oikea paketti on chromium-browser. Spotify vaatii repositoryn lisäyksen, joten jätetään se tästä suosikkipaketista pois. Libreoffice, VLC, Shotwell, Wine ja Deluge löytyvät omilla nimillään aptista.

Tunnilla käytiin näitä läpi, mutten harmikseni tehnyt muistiinpanoja. Google löytääkin opettajamme pika-ohjeet. Metapaketin tekoon tarvitsemme ainakin tehtävänannossa mainitun lintian -ohjelman paketin tarkastamiseen. Itse paketin tekoon käytimme tunnilla equivs -paketin tarjoamia työkaluja.

Ajetaan ensin sudo apt-get update pakettien päivittämiseksi. Asennetaan sitten equivs ja lintian komennolla sudo apt-get -y install equivs lintian gdebi.

Tehdään paketille oma kansio kotihakemistoon komennolla mkdir suosikit ja siirrytään hakemistoon komennolla cd suosikit. Katsotaan mitä komentoja ollaan saatu käyttöön equivs paketista dpkg –listfiles equivs. Selviää, että komentoja on equivs-control ja equivs-build. Katsotaan man sivua equivs-controlista ja selviää, että tämä kopioi pohjan control-tiedostosta, jota tarvitaan paketin luomiseen. Sitten tuota konfiguraatiotiedostoa on muokattava. Luodaan konfiguraatiotiedosto komennolla equivs-control meri-suosikit.cfg ja muokataan sitä nano meri-suosikit.cfg. Valmiina muokattu tiedosto näyttää tältä:

Section: misc
Priority: optional
Homepage: https://merimiettinen.wordpress.com/category/linux/
Standards-Version: 3.9.2

Package: meri-suosikit
Version: 1.0
Maintainer: Meri Miettinen <a1302387@myy.haaga-helia.fi>
Depends: chromium-browser, libreoffice, vlc, shotwell, wine, deluge
Recommends: chromium-browser-l10n
Description: This metapackage installs some of my favorite programs.
This package installs Chromium browser for web browsing, LibreOffice for document processing, VLC media player, Shotwell for quick photo editing, Wine for emulating Windows and Deluge for torrents.

Sitten ajetaan komento equivs-build meri-suosikit.cfg, joka luo paketin meri-suosikit_1.0_all.deb. Tarkistetaan paketti komennolla lintian meri-suosikit_1.0_all.deb, joka kertoo, että ”extended description line too long” eli pidennetty kuvaus on liian pitkä. Mennään muokkaamaan cfg tiedostoon muutama rivin vaihto (muista välilyönti rivin alkuun) sekä version korotus 1.0 -> 1.1 ja ajetaan equivs-build ja lintian komennot uudelleen. Nyt se meni onnistuneesti läpi. Asennetaan komennolla gdebi meri-suosikit_1.1_all.deb. Asennus jää pyörimään kun minun pitää lähteä.. jatkuu myöhemmin.

Pakettivaraston teko Reprepro:lla

Tähän tehtävään piti lähteä googlen kautta ja löysinkin opettajan ohjeet. Työkalun etu onkin siis keskitetty paketinhallinta.

Olen jo aikaisemmin päivittänyt pakettivarastot komennolla sudo apt-get update ja olen jo asentanut equivsin paketointia varten sudo apt-get install -y equivs. Olen asentanut myös LAMPin ja ottanut käyttöön käyttäjien omat sivut tällä tietokoneella jo aikaisemmin omien ohjeitteni mukaan. Asensin reprepro:n sudo apt-get install reprepro -komennolla. Asennuksen aikana piti lukea ja hyväksyä käyttäjäehdot. Tein opettajan ohjeen mukaan kansion public_html kansion sisään kaksi alikansiota: mkdir -p repository/conf ja loin sinne tiedoston distributions. Tiedoston sisällön malli oli seuraavanlainen:

Codename: lucid
Components: main
Suite: lucid
Architectures: i386 amd64 source

Halusin selvittää asiaa tarkemmin, vaikka onkin selvää, että lucid tulisi korvata trusty sanoilla (distron nimi). apt-cache show reprepro -> paketin tiedoissa on kotisivu ja sieltä löydän tämän how-to -ohjeen. Tästä varmistuu, että Codename tarkoittaa distron nimeä. Koodinimen voi tarkistaa täältä tai komennolla lsb_release -c. Tässätapauksessa koodinimi on siis trusty. Man sivulta selviää, että Suite -kohtaa ei tarvitse olla. Yleensä siinä on stable, unstalbe tai testing. Päätän jättää Suite -kohdan laittamatta. Pidetään muut kentät ennallaan. Tässä distribution tiedoston sisältö:

Codename: trusty
Components: main
Architectures: i386 amd64 source

Sitten kopioin aikaisemmassa tehtävässä luodun .deb pakettitiedoston kansioon /home/meri/public_html/, jonka jälkeen ajoin komennon reprepro -VVVV -b repository/ includedeb trusty meri-suosikit_1.1_all.deb. Muokkasin opettajan antamaa komentoa vähän: lucid -> trusty ja tietysti paketin nimeksi oma pakettini. Reprepron syöte näytti siltä, että kaikki meni hyvin. Kansiohakemistoon oli muodostunut uusia kansioita db, dists ja pool ja niiden sisälle tiedostoja.

Lisäsin sen pakettilistalle muokkaamalla tiedostoa sudoedit /etc/apt/sources.list.d/repository.list. Tiedostoon lisäsin rivin deb http://localhost/~meri/repository trusty main. Testasin vielä tämän eli sudo apt-get update ja sudo apt-get install meri-suosikit. Paketti löytyi, mutta kaikki oli jo asennettuna.

Skriptin teko ja paketointi

Käytin tähän aikaisemmin kokeilemaani scriptiä.

#!/bin/bash
print_perm() {
  case "$1" in
    0) printf "NO PERMISSIONS";;
    1) printf "Execute only";;
    2) printf "Write only";;
    3) printf "Write & execute";;
    4) printf "Read only";;
    5) printf "Read & execute";;
    6) printf "Read & write";;
    7) printf "Read & write & execute";;
  esac
}

[[ ! -e $1 ]] &&  echo "$0 <file or dir>" 2>&1 && exit 1

perm=$(stat -c%a "$1")
user=${perm:0:1}
group=${perm:1:1}
global=${perm:2:1}

echo "Permissions :"
printf "\tOwner Access: $(print_perm $user)\n"
printf "\tGroup Access: $(print_perm $group)\n"
printf "\tOthers Access: $(print_perm $global)\n"

Loin kotihakemistoon kansion mkdir scripts. Loin sinne tiedoston skritptiä varten nano rights-query, liitin yllä olevan skritpin sinne ja tallensin muutokset. Sitten täytyy muokata tiedoston oikeuksia eli tarvitaan execute oikeuksia. Löysin tälläisen näppärän työkalun chmod komennon parametrien määrittelyyn. Tarkistin myös, mitä toinen opiskelija oli tehnyt. 700 parametri näyttää antavan ownerille kaikki oikeudet. Ajetaan siis komento chmod 700 rights-query. Ajoin scriptin testiksi ./rights-query rights-query ja se toimii kertoen tiedoston oikeudet:

meri@p01:~/scripts$ ./rights-query rights-query
Permissions :
Owner Access: Read & write & execute
Group Access: NO PERMISSIONS
Others Access: NO PERMISSIONS

Sitten täytyy lisätä skripti pakettiin. Teen uuden paketin. equivs-control skripti.cfg ja sitten muokkaamaan nano skripti.cfg.

Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: oikeus-skripti
Version: 1.0
Maintainer: Meri Miettinen <a1302387@myy.haaga-helia.fi>
Files: rights-query /usr/bin/
Description: Rights query for any file
 This script shows rights for any file that you
 give as a parameter

Sen jälkeen ajetaan equivs-build skripti.cfg, paketin luonti onnistui. Lintian antoi herjan man-sivun puuttumisesta, mutta ei nyt tehdä sitä. Tämän jälkeen asensin deb pakettini komennolla  sudo gdebi oikeus-skripti_1.0_all.deb ja testasin komentoa rights-query package/

meri@p01:~$ rights-query
/usr/bin/rights-query <file or dir>
meri@p01:~$ rights-query package/
Permissions :
Owner Access: Read & write & execute
Group Access: Read & write & execute
Others Access: Read & execute

Kirjauduin ssh:lla vielä aikaisemmin luodulle perustunnukselle ssh maitomai@localhost (edellyttää ssh olevan asennettuna). Komento toimi käyttäjällä!

maitomai@p01:~$ rights-query public_html/
Permissions :
Owner Access: Read & write & execute
Group Access: Read & write & execute
Others Access: Read & execute