Linux palvelimena #4 – Metapakettien ihanuutta

February 23, 2014

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

3 Comment

  1. […] tähän osioon katsoin vähän apua Tuukka Meriläisen vastauksesta kurssin aiemmalta […]

  2. […] 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/). […]

Leave a Reply