Sunday, February 16, 2014

h4: Metapaketin luominen, pakettivarasto with reprepro, Skriptin paketoiminen

Tämä harjoitus on osa Linux Palvelimena-kurssia (Haaga-helia AMK, opettaja: Tero Karvinen).
Lähde: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014
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


Harjoitusympäristö:


HP Compaq 8200 Elite CMT PC
Intel Core i5-2400 3.10GHz
8GB RAM
64-bit

Käytetyt ohjemat/työkalut:

-equivs
-gdebi
-lintian
-reprepro


Mikä on metapaketti?

"It is a package that only exists to supply random information or link to other packages to form a collection."
              Lähde: http://forums.debian.net/viewtopic.php?f=30&t=75656

Eli se on paketti, joka on olemassa ainoastaan antaakseen satunnaista informaatiota tai linkittää toisiin paketteihin muodostaakseen kokoelman. öhömph..


"a meta package is a Debian package that simply tells the package manager to download a whole bunch of other packages. Meta packages are useful for allowing for the quick installation of an entire group of packages."
Lähde: http://jeffhoogland.blogspot.fi/2011/08/howto-create-debian-   meta-package.html

Hieman selkeämpi selitys. Ja sitten googlaus "How to create a metapackage". Ja ensimmäinen hakutulos löytyy askubuntu.com-sivustolta:
Lähde: http://askubuntu.com/questions/33413/how-to-create-a-meta-package-that-automatically-installs-other-packages






    Creating a metapackage with equivs


"Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista."


Sivuston mukaan metapaketin voi luoda equivs-nimisen työkalun avulla, joka luo paketin ainoastaan pelkällä riippuvaisuus-informaatiolla. Seuraan ohjeita. Ensiksi tehdään metapaketti-niminen hakemisto kotikansiooni, jonka jälkeen siirryn luomaani hakemistoon.

$ mkdir metapaketti
$ cd metapaketti


Nyt minun pitää asentaa equivs-ohjelma.

$ sudo apt-get install equivs

Loin equivs-ohjelman komennolla metapaketti-paketin konffaus-tiedoston, jonka jälkeen siirryin muokkaamaan sitä nano-tekstieditorilla.



 $ equivs-control metapaketti.cfg
 $ nano metapaketti.cfg
 
Avatessani metapaketti.cfg-tiedoston nano-tekstieditorilla aloin
täyttämään sinne metapaketin asentamiseen liittyviä tietoja. 
 
   Package: <metapaketti>
   Depends: munin, libreoffice 
   Description: Tämä paketti asentaa seuraavat ohjelmat: munin, libreoffice  
 
Tämän jälkeen komensin equivs-ohjelman rakentamaan metapaketti.cfg-tiedoston:


 $ equivs-build metapaketti.cfg

Ei mennyt läpi ennenkuin poistin "Package"-kohdasta "<>" -merkit. 
 
   Package: metapaketti
   Depends: munin, libreoffice 
   Description: Tämä paketti asentaa seuraavat ohjelmat: munin, libreoffice 
 
The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
 
 
Nyt katsoin mallia Teron blogista, jossa lopuksi kehotettiin testaa-
maan metapaketin luonnin onnistumista. edellinen komentohan oli luonut
kyseiseen kansioon metapaketti_1.0_all.deb -nimisen paketin. Testaus siis
tehtiin kohdistamalla seuraava komento juuri mainittuun .deb-tiedostoon. 
 

$ sudo gdebi -n metapaketti_1.0_all.deb
 
Mikä on gdebi? woot? 

Komento ei onnistunut ja tuli ilmoitus "sudo: gdebi: command not found". 
 
Googlasin hieman ja sain selville, että kyseessä on paketti-installeri-ohjelma. Koitin ladata
sen mututuntumalla: 
 
 $ sudo apt-get install gdebi 
 
...ja sieltähän se tuli heti alas. Asennettuani gdebin kokeilin uudestaan.
 
$ sudo gdebi -n metapaketti_1.0_all.deb
 
Ohjelma lähti lataamaan ubuntun sivuilta paketteja ja asensi munin- ja libreoffice-ohjelmiston
automaattisesti koneelle.  Kätevää. METAPAKETTI LUOTU.
 
 
Metapaketin laadun tarkistus: Lintian
 
Lopuksi tarkistetaan metapaketin laatu käyttämällä siihen luotua lintian-ohjelmaa.
(Jos paketissa on jotain vialla kun lisää -i kertoo se sen yksityiskohtaisemmin). 

$ lintian -i metapaketti_1.0_all.deb
 
xubuntu@xubuntu:~/metapaketti$ lintian -i metapaketti_1.0_all.deb 
E: metapaketti: debian-changelog-file-contains-invalid-email-address xubuntu@xubuntu
N: 
N:    The changelog file contains an invalid email address: the domain needs
N:    at least one dot. This looks like a mistake.
N:    
N:    Severity: important, Certainty: certain
N:    
N:    Check: changelog-file, Type: binary
N: 
E: metapaketti: maintainer-address-malformed Live session user <xubuntu@xubuntu>
N: 
N:    The maintainer field could not be parsed according to the rules in the
N:    Policy Manual.
N:    
N:    Refer to Debian Policy Manual section 5.6.2 (Maintainer) for details.
N:    
N:    Severity: serious, Certainty: certain
N:    
N:    Check: fields, Type: binary, udeb, source
N: 
Katsomalla lintian-ohjelman manuaalia komennolla $ man lintian löydän linkin selaimen kautta
luettavaan lintian-manuaaliin hakemistossa file:/usr/share/doc/lintian/lintian.html/index.html.
Avaaman tämän firefox-selaimessa ja selviää, että E (Errors) tarkoittaa:
 
The displayed message indicates a policy violation or a
packaging error. For policy violations, Lintian will
cite the appropriate policy section when it is invoked
with the -i option.
             
ja N (Notes) tarkoittaa.
The displayed message is a debugging message which informs you about the current state of Lintian.
Ohjelma siis antoi minulle error-ilmoituksen siitä, että minulla ei ole paketissa
validia sähköpostiosoitetta mikä pitääkin paikkansa, koska en sinne mitään lisännyt
alunperinkään ja toinen error viittaa "Live Session User"-käyttäjään. "The maintainer
field could not be parsed according to the rules on the Policy Manual."





 
 
     Tee pakettivarasto repreprolla

 
"Tee pakettivarasto repreprolla" 
 
 
 
Mikä on reprepro?

"Reprepro is a tool for managing APT repositories. It's definitely much more versatile 
than the simple script update-repository that we have been using before."
LÄHDE: https://wikitech.wikimedia.org/wiki/Reprepro

 Mikä on pakettivarasto?
"Pakettivarastoja käyttämällä voidaan automatisoida ohjelmapakettien asentaminen ja päivittäminen sekä tietojen etsiminen asentamattomista paketeista. Pakettivarasto voi sijaita esimerkiksi Internetissä HTTP- tai FTP-palvelimella, verkkolevyllä, CD- tai DVD-levyllä tai paikallisella kiintolevyllä." 
 LÄHDE: http://linux.fi/wiki/Pakettivarasto


Ensimmäiseksi lataan ja asennan työasemalle reprepro-ohjelman.


$ sudo apt-get install reprepro

....Processing triggers for man-db ...
Setting up libpth20 (2.0.7-16ubuntu3) ...
Setting up libgpgme11 (1.2.0-1.4ubuntu2) ...
Setting up reprepro (4.8.2-1build1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
xubuntu@xubuntu:~/metapaketti$
Jostain syystä ohjeissa neuvottiin tekemään "public_html"-kansio kotikansiooni ja tämän jälkeen piti siirtää/kopioida aikaisemmin luotu "metapaketti_1.0_all.deb"-tiedosto siihen.

$ cp metapaketti_1.0_all.deb ~/public_html

Täytyi luoda repository/conf-kansio, jonne lisätä asetustiedosto distributions.

$ mkdir -p repository/conf
$ nano repository/conf/distributions

Ohjeiden mukaan distributions-tiedostoon piti lisätä seuraavat tiedot:

$ nano repository/conf/distributions

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

Ohjeiden mukaan minulla täytyi myös olla asennettuna apache-webbipalvelin tehtävän suoritusta varten (ja siinä piti olla käyttäjien kotisivut enabloituna), joten asensin sen tässä vaiheessa komennolla $ sudo apt-get install apache2

Seurasin omaa aikaisemmin tekemääni LAMP-asennusharjoitusta virkistääkseni muistiani. Tein käyttäjien kotisivujen enabloinnin $ sudo a2enmod userdir , jonka jälkeen käynnistin apache-serverin uudelleen, jotta muutokset tulisivat voimaan. (Selvitin myös oman ip osoitteeni komennolla $ ip addr huvin vuoksi ja näin että se oli 172.28.9.78)


****

Lisäsin tekemäni deb-paketin (metapaketti_1.0_all.deb) reprepro-ohjelman komennon avulla varastointipaikkaan.

xubuntu@xubuntu:~/public_html$ reprepro -VVVV -b repository/ includedeb lucid /home/xubuntu/metapaketti/metapaketti_1.0_all.deb
Created directory "repository//db"
/home/xubuntu/metapaketti/metapaketti_1.0_all.deb: component guessed as 'main'
Created directory "repository//pool"
Created directory "repository//pool/main"
Created directory "repository//pool/main/m"
Created directory "repository//pool/main/m/metapaketti"
Adding reference to 'pool/main/m/metapaketti/metapaketti_1.0_all.deb' by 'lucid|main|i386'
Adding reference to 'pool/main/m/metapaketti/metapaketti_1.0_all.deb' by 'lucid|main|amd64'
Exporting indices...
Created directory "repository//dists"
Created directory "repository//dists/lucid"
Created directory "repository//dists/lucid/main"
Created directory "repository//dists/lucid/main/binary-i386"
 looking for changes in 'lucid|main|i386'...
  creating 'repository//dists/lucid/main/binary-i386/Packages' (uncompressed,gzipped)
Created directory "repository//dists/lucid/main/binary-amd64"
 looking for changes in 'lucid|main|amd64'...
  creating 'repository//dists/lucid/main/binary-amd64/Packages' (uncompressed,gzipped)
Created directory "repository//dists/lucid/main/source"
 looking for changes in 'lucid|main|source'...
  creating 'repository//dists/lucid/main/source/Sources' (gzipped)
xubuntu@xubuntu:~/public_html$
Sitä varten, että clientit/käyttäjät voisivat asentaa pakettivaraston koneelleen clientin täytyi ajaa seuraava komento, joka lisää kyseisen repositoryn
"repository"-listaan.

$ sudo nano /etc/apt/sources.list.d/repository.list deb http://localhost/~xubuntu/repository lucid main

Testasin oliko luomani metapaketin lisääminen pakettivarastolistalle onnistunut kokeilemalla asentaa paketin pakettiasennuskomennolla.

$ sudo apt-get update    (pakettitietojen päivitys)
$ sudo apt-get install metapaketti    

Pakettivaraston tekeminen ja lisääminen repository-listaan oli onnistunut, koska komento oli käynyt tarkastamassa päivittämäni pakettilistat ja löytänyt sieltä "metapaketti"-nimisen metapaketin. Metapaketti oli jo kuitenkin asennettu koneelle aikaisemmin tässä harjoituksessa, joten sitä ei ollut järkeä asentaa uudelleen (komennolla $ sudo gdebi -n metapaketti.1.0_all.deb). Eihän siihen ollut tullut päivityksiäkään.

xubuntu@xubuntu:~/metapaketti$ sudo apt-get install metapaketti
Reading package lists... Done
Building dependency tree      
Reading state information... Done
metapaketti is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 207 not upgraded.


***** ***** ***** ***** *****


     Skriptin paketointi järjestelmän käyttäjille


"Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn"


Ensimmäiseksi loin tekstitiedoston nimeltä "h4-skripti" nano-tekstieditorilla.

$ nano h4-skripti

Lisäsin sisällöksi muutamia komentoja:

#!/bin/bash
#tyhjentää näkymän

clear

#kirjoittaa tekstin ruutuun
echo "Hei tämä on uusi käsky, jonka metapaketti asensi sinulle äsken ja kertoo sinulle vapaan levytilan."


# vapaan levytilan määrä-komento 
df -h 

Tämän jälkeen annoin skriptille oikeudet suoriutumiseen järjestelmässä ja kokeilin skriptin suorittamista "./"-komennolla. Komento palautti vihreällä olevan.

$ chmod a+x
$ ./h4-skripti
Hei tämä on uusi käsky, jonka metapaketti asensi sinulle äsken ja kertoo sinulle vapaan levytilan.
Filesystem      Size  Used Avail Use% Mounted on
/cow            2.0G  375M  1.6G  20% /
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           394M  1.3M  393M   1% /run
/dev/sr0        834M  834M     0 100% /cdrom
/dev/loop0      803M  803M     0 100% /rofs
none            4.0K     0  4.0K   0% /sys/fs/cgroup
tmpfs           2.0G   48K  2.0G   1% /tmp
none            5.0M  4.0K  5.0M   1% /run/lock
none            2.0G   80K  2.0G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  5.5G  2.1G  74% /media/xubuntu/USB DISK

Nyt minun piti keksiä miten saan sen liitettyä pakettivarastoon niin, että se asentuu komennoksi paketin lataajan järjestelmään. Paketin asennuksessa pitäisi varmaankin saada siirrettyä luomani h4-skripti kohdejärjestelmän hakemistoon /usr/bin/local , jossa se aktivoituu ajettavaksi komennoksi $ h4-skripti


hmhh...


Lähteitä:
http://askubuntu.com/questions/33413/how-to-create-a-meta-package-that-automatically-installs-other-packages
http://linux.fi/wiki/Deb-paketin_tekeminen
http://blog.perttu.im/2013/09/linux-palvelimena-kotitehtava-4-debian-metapaketti/ http://tekoske.wordpress.com/4-linux-palvelimena/ 
https://miroseppala.wordpress.com/tag/reprepro/   
http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
http://jaakkovalja.wordpress.com/2012/02/14/linux-palvelimena-metapaketteja/
http://www.linfo.org/create_shell_1.html
https://samisoikkeli.wordpress.com/2012/02/06/lamp-linux-apache-mysql-php/

No comments:

Post a Comment