Linuxin vahvuuksista puhuttaessa metapaketit ponnahtavat usein esiin. Niiden tarkoituksena on helpottaa ohjelmien asennusta. Käytännössä luot paketin joka sisältää tiedot ohjelmista jotka haluat järjestelmään. Voit asentaa sillä haluamasi määrän ohjelmia automatisoidusti.
Saimme Linux palvelimena kurssilla seuraavanlaisen tehtävän:
- 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
Käytän tehtävässä aiemmista tehtävistä tutuksi tulluttu laitteistoa ja Xubuntu 12.04 Precise Pangolin 32bit käyttöjärjestelmää.
Metapaketti
Tero karvinen on koonnut loistavan oppaan metapaketin luontiin. Siinä paketin luomiseen käytetään equivis ohjelmaa ja gdebiä paketin asentamiseen. Loin omani seuraavasti:
sudo apt-get update
sudo apt-get install equivs
equivs-control tuukkas-funnypack.cfg
nano tuukkas-funnypack.cfg
Tässä vaiheessa tuukkas-funnypack.cfg oli auki nano editorissa ja muokkasin sen sisällön seuraavanlaiseksi:
### Commented entries have reasonable defaults. ### Uncomment to edit them. # Source: <source package name; defaults to package name> Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.9.2 Package: tuukkas-funnypack Version: 0.1 # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> Depends: sl, cowsay, fortune # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: This package contains all you need the most . It maintains to keep you shape when you are not . You should try to type sl or fortune -s | cowsay
Paketissa asennetaan siis ohjelmat sl, cowsay ja fortune. Seuraavaksi kasataan paketti:
equivs-build tuukkas-funnypack.cfg
Equivs loi paketin ongelmitta ja paketti ilmestyi kansioon jossa sillä hetkellä olin nimellä tuukkas-funnypack_0.1_all.deb.
Järjestelmässäni ei oletuksena ollut gdebi ohjelmaa joten asensin sen.
sudo apt-get install gdebi
Tämän jälkeen asensin metapaketin.
sudo gdebi -n tuukkas-funnypack_0.1_all.deb
Asennus onnistui ongelmitta ja testasin asennetut ohjelmat.
sl
fortune
fortune -s | cowsay
Totesin hupipaketin toimivan.
Seuraavaksi asensin lintianin ja testasin paketin.
sudo apt-get install lintian
lintian -c tuukkas-funnypack_0.1_all.deb
Lintian tulosti ilmoituksen:
E: tuukkas-funnypack: description-synopsis-is-empty
Muokkasin tuukkas-funnypack.cfg tiedoston Description kohtaa ja lisäsin ensimmäiselle riville sanan Info:. Lisäksi muutin version 0.1 -> 0.2.
Description: Info: This package contains all you need the most . It maintains to keep you shape when you are not . You should try to type sl or fortune -s | cowsay
Suoritin paketin teon ja testauksen uudelleen.
equivs-build tuukkas-funnypack.cfg
lintian -c tuukkas-funnypack_0.2_all.deb
lintian tuukkas-funnypack_0.2_all.deb
Ei virheilmoituksia ja totesin paketin täysin toimivaksi.
Pakettivaraston konfigurointi
Hupipaketin kasauksen jälkeen se piti saada omaan pakettivarastoon. Seurasin jälleen Tero Karvisen opasta aiheesta.
Pakettivarasto vaati toimivan apachen käyttäjien kotisivut hyväksyttyinä. Omassa järjestelmässäni tämä oli jo valmiina.
Loin kansion kotihakemistossani sijaitsevaan public_html kansioon, jonka sisällön apache jakaa.
cd
cd public_html
mkdir -p repository/conf
Tämän jälkeen lisäsin conf kansioon konfigurointi tiedoston.
nano repository/conf/distributions
Codename: lucid Components: main Suite: lucid Architectures: i386 amd64 source
Pakettivarasto on nyt valmis ja odottaa paketteja. Lisäsin hupipakettini.
reprepro -VVVV -b repository/ includedeb lucid tuukkas-funnypack_0.2_all.deb
Reprepro loi repository-kansioon kansiota ja sisältöä seuraavasti:
tuukka@tuukka-xubuntu:~/public_html/repository$ ls conf db dists pool
Pakettivaraston testaus
Päätin testata hupipaketin asennusta samalla koneella jolla loin pakettivaraston.
Linkkasin pakettivaraston järjestelmään
sudo nano /etc/apt/sources.list.d/repository.list
deb http://localhost/~tuukka/repository lucid main
Tämän jälkeen testasin toimivuuden.
sudo apt-get update
sudo apt-get install tuukkas-funnypack
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: cowsay fortune-mod fortunes-min librecode0 sl Suggested packages: filters fortunes The following NEW packages will be installed cowsay fortune-mod fortunes-min librecode0 sl tuukkas-funnypack 0 to upgrade, 6 to newly install, 0 to remove and 6 not to upgrade. Need to get 877 kB of archives. After this operation, 2,212 kB of additional disk space will be used. Do you want to continue [Y/n]? Y WARNING: The following packages cannot be authenticated! tuukkas-funnypack Install these packages without verification [y/N]? y
Sain edellä olevan ilmoituksen ja hieman ihmettelin varmenteen puuttumista. Asennus kuitenkin onnistui ja paketin kaikki ohjelmat toimivat normaalisti.
tuukka@tuukka-xubuntu:~/public_html$ fortune | cowsay ______________________________________ / Q: How many marketing people does it | take to change a light bulb? A: I'll | have to get back to you on that. / -------------------------------------- ^__^ (oo)_______ (__) )/ ||----w | || ||
Bash skriptin paketointi
Olen usein törmännyt ärsyttävään puutteeseen kalentereissa. Viikon numero on asia joka usein jätetään kertomatta. Päätin siis tehdä skriptin joka näyttää kalenterin viikko numeroilla.
Ohjelma ncal oli jo entuudestaan tuttu. Selasin hieman manuaalia ja löysin ratkaisun ongelmaani. Optio -w lisää kalenteriin viikko numerot. Uskon jatkossa muistavani tämän ilman skriptiäkin, mutta päätin silti tehdä homman loppuun.
Luodaan bash skripti
nano kalenteri
#!/bin/bash ncal -w
Lisätään suoritusoikeus ja testataan
chmod 700 kalenteri
./kalenteri
tuukka@tuukka-xubuntu:~/public_html$ ./kalenteri February 2014 Su 2 9 16 23 Mo 3 10 17 24 Tu 4 11 18 25 We 5 12 19 26 Th 6 13 20 27 Fr 7 14 21 28 Sa 1 8 15 22 4 5 6 7 8
Hienosti toimi!
Päätin lisätä skriptin osaksi jo aiemmin luomaani pakettia tuukkas-funnypack.
nano tuukkas-funnypack.cfg
Muokkasin tiedostosta versionumeroa 0.2 -> 0.3 ja files rivin seuraavasti:
Files: kalenteri /usr/local/bin/
Rivillä ensimmäinen osa(kalenteri) kertoo sisällytettävän tiedoston nimen joka sijaitsee tuukkas-funnypack.cfg tiedoston kanssa samassa kansiossa. Toinen osa(/usr/local/bin/) määrittää paikan johon paketti sijoittaa järjestelmässä johon paketti asennetaan. HUOM! kaikki kyseiseen kansioon sisällytetyt skriptit toimivat yleensä kaikilla käyttäjillä. Asian voi tarkastaa ajamalla $PATH – joka näyttää paikat joista ohjelmia etsitään.
Paketoin uuden version ja testasin toimivuuden
equivs-build tuukkas-funnypack.cfg
sudo gdebi -n tuukkas-funnypack_0.3_all.deb
Asennus meni läpi ongelmitta ja testasin asentuiko skripti.
tuukka@tuukka-xubuntu:~/public_html$ kalenteri February 2014 Su 2 9 16 23 Mo 3 10 17 24 Tu 4 11 18 25 We 5 12 19 26 Th 6 13 20 27 Fr 7 14 21 28 Sa 1 8 15 22 4 5 6 7 8
Toimii tuukka käyttäjällä. Luodaan uusi käyttäjä mrhox ja kokeillaan uudestaan.
sudo adduser mrhox…
su mrhox
mrhox@tuukka-xubuntu:~$ kalenteri February 2014 Su 2 9 16 23 Mo 3 10 17 24 Tu 4 11 18 25 We 5 12 19 26 Th 6 13 20 27 Fr 7 14 21 28 Sa 1 8 15 22 4 5 6 7 8
Skripti toimii!
Lähteet
http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes
http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
Karvinen, Tero: Oppitunnit 2013-02-10, Linux palvelimena -kurssi
[…] tähän osioon katsoin vähän apua Tuukka Meriläisen vastauksesta kurssin aiemmalta […]
[…] Katselin millaisia skripteja muut olivat tehneet, koska en oikein itsekseni liikkeelle päässyt. Päätin kokeilla tehdä samanlaisen kalenteri skriptin, joka näyttää viikkonumerot. Katsoin mallia Tuukka Meriläisen blogista (http://tuukkamerilainen.com/metapakettien-ihanuutta/). […]
[…] http://tuukkamerilainen.com/metapakettien-ihanuutta/ […]