Deb-paketin tekeminen

Linux.fista
Versio hetkellä 22. huhtikuuta 2007 kello 00.37 – tehnyt Heikki (keskustelu | muokkaukset) (alkua, jatkan huomenna (päivällä), nyt nukkumaan)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

Debianissa ja siihen pohjautuvissa jakeluissa (esim. Ubuntussa) käytetään Apt-paketinhallintajärjestelmää. Apt:ssä paketit ovat .deb-tiedostoja, jotka sisältävät itse ohjelman lisäksi mm. tiedot paketin riippuvuuksista ja siitä, mihin ohjelma asennetaan. Deb-pakettien tekeminen ei ole mitenkään ylivoimainen tehtävä, kunhan perusasiat ovat hallussa.

Tässä oppaassa luodaan malliksi yksinkertainen paketti GNU Hello -ohjelmasta, joka on GNU-projektin esimerkkiohjelma. Ohjelman lähdekoodipaketin voi ladata GNU:n palvelimelta.

Valmistelut

Aluksi on asennettava muutamia perustyökaluja, jotka löytyvät seuraavista paketeista

  • dpkg-dev
  • autoconf
  • dh-make
  • devscripts
  • fakeroot
  • gnupg
  • build-essential
  • lintian
  • linda

Kun tarvittavat paketit on asennettu, lataa Hello-ohjelman lähdekoodi ja pura se työhakemistoosi. Nyt sinulla pitäisi olla työhakemistossasi tiedosto hello-2.2.tar.gz ja hakemisto hello-2.2.

Valmistelu

Aluksi kannattaa kokeilla, että saat ohjelman käännettyä ja ajettua. Sinun pitäisi osata tehdä tämä, jos luet tätä opasta, mutta lyhykäisyydessään voit asentaa Hellon hakemistoon ~/hello seuraavasti:

./configure --prefix=/home/käyttäjä/hello
make
make install

Nyt hakemistosta ~/hello pitäisi löytyä alihakemistot bin ja share, joissa Hellon tiedostot ovat.

Putsaa nyt hakemisto, jossa käänsit Hellon komennolla

make distclean

Nyt jos ohjelma kääntyi oikein, voimme aloittaa itse paketin tekemisen.

Pohja

Siirry ohjelman hakemistoon (hello-2.2) ja aja komento

dh_make -e sinun@sähköpostiosoitteesi -f ../hello-2.2.tar.gz

Toinen parametri on siis paketin tekijän sähköpostiosoite ja neljäs alkuperäinen lähdekooditiedosto. Kysyy aluksi, minkätyyppistä pakettia olemme luomassa:

Type of package: single binary, multiple binary, library, kernel module or cdbs?
[s/m/l/k/b]  

Vastaa tähän s (single binary), sillä olemme luomassa yksinkertaista yhden ohjelman käsittävää pakettia. Tämän jälkeen vahvista tiedot entterillä, jonka jälkeen dh_make luo hakemistoon debian-alihakemiston, joka sisältää tiedostot, joiden perusteella varsinainen paketti luodaan. Se myös luo ylähakemistoon tiedoston paketti_versio.orig.tar.gz, tässä tapauksessa siis hello_2.2.orig.tar.gz joka sisältää alkuperäisen lähdekoodipaketin.

Huomaa, että dh_make kuuluu ajaa vain kerran! Tulevien muutosten jälkeen sitä ei tarvitse (eikä saa) ajaa.

Asennushakemisto

Paketin luova työkalu päättelee paketin tiedostot siten, että ohjelma asennetaan sen valvonnassa väliaikaiseen alihakemistoon. Yleensä tämä alihakemisto on debian/paketin_nimi, jonne paketti asennetaan aivan normaalisti: esimerkiksi Hellon binääri menisi hakemistoon debian/hello-2.2/usr/bin/hello.

Autoconfia käyttävien pakettien kanssa (pääasiassa ohjelmat, jotka asennetaan komennolla ./configure && make && make isntall) paketin luoma työkalu osaa hoitaa tämän automaattisesti, eikä sinun tarvitse tässä vaiheessa tehdä mitään. Kuten huomasit asentaessamme ohjelmaa oppaan alussa, annoimme configure-skriptille parametrin --prefix=/hakemisto/jonne/ohjelma/asennetaan. Paketoija antaa configurelle samalla tavalla sopivan parametrin, jolloin ohjelma asentuu oikeaan paikkaan.

Mitä jos ohjelma ei käytä autoconfia?

Asetustiedostot

Dh_make loi debian-hakemiston, joka sisältää monia tiedostoja, joiden perusteella itse paketti luodaan. Tässä vaiheessa on käytävä ne läpi ja muokattava sopiviksi.

control

Tiedostossa debian/control kerrotaan perustiedot paketista ja sen riippuvuuksista. Meidän tapauksessamme dh_make loi seuraavanlaisen pohjan (rivinumerot lisätty):

1  Source: hello
2  Section: unknown
3  Priority: extra
4  Maintainer: Paketin Tekijä <foo@bar.com>
5  Build-Depends: debhelper (>= 5), autotools-dev
6  Standards-Version: 3.7.2
7
8  Package: hello
9  Architecture: any
10 Depends: ${shlibs:Depends}, ${misc:Depends}
11 Description: <insert up to 60 chars description>
12 <insert long description, indented with spaces>

Riveillä 1-6 on lähdekoodipaketin (engl. source) perustiedot:

  • Rivillä 1 on lähdekoodipaketin nimi
  • Rivillä 2 kerrotaan, mihin osioon paketti kuuluu. Debianissa paketit osioihin, joita ovat mm. main (vapaat ohjelmat), non-free (ohjelmat, jotka eivät ole vapaita) ja contrib (ohjelmat, jotka riippuvat vapaista ohjelmista). Nämä ohjelmat on yhä jaettu pienempiin osioihin, kuten devel (kehitystyökalut) ja mail (sähköpostiohjelmat). Hellolle on vähän hankala keksiä sopivaa osiota, laitetaan siihen nyt vaikka main.
  • Kolmannella rivillä kerrotaan, kuinka tärkeää käyttäjälle on asentaa tämä paketti. Vaikka "Terve maailma!" -viestin tulostava ohjelma voi tuntua tärkeältä, ehkäpä se ei kuitenkaan ole yhtä tärkeä kuin vaikka ydin, joten jätetään sen tärkeysasteeksi extra.
  • Neljännellä rivillä on paketin tekijän nimi ja sähköpostiosoite
  • Rivillä 5 listataan pilkulla erotettuna paketit, jotka tarvitaan tämän paketin kääntämiseen. Jos ohjelmasta on oltava tietty versio, haluttu versio voidaan ilmoittaa sulkeissa (esimerkissä tarvitaan debhelper-paketin versio 5 tai uudempi). Käytännössä aina tarvittavia paketteja (esim. gcc ja make) ei tarvitse luetella, sillä ne otetaan mukaan automaattisesti. Kuitenkin kaikki muut kääntämisessä tarvittavat vähänkin harvinaisemmat paketit on lueteltava. Tässä vaiheessa voitaisiin myös samalla tavalla luetella paketit, jotka estävät kääntämisen (Build-Conflicts: paketti1, paketti2). Hello on sen verran helppo kääntää, ettei meidän tarvitse nyt lisätä tähän mitään ylimääräisiä paketteja.
  • Rivillä 6 kerrotaan, minkä Debian Policy -standardin version mukainen paketti on. Tähän ei tarvitse koskea.
  • Rivillä 8 on varsinaisen binääripaketin nimi. Yleensä se on sama kuin lähdekoodipaketin nimi.
  • Rivillä 9 kerrotaan, millä arkkitehtuurilla paketti toimii. Jätetään tämä arvoon "any", jolloin paketin tekevä työkalu huolehtii arkkitehtuurista. Jos paketti toimii kaikilla arkkitehtuureilla (esim. se on ohjepaketti tai Perl-skripti), arkkitehtuuriksi laitetaan "all".
  • Rivillä 10 listataan paketit, jotka ovat binääripaketin riippuvuuksia. Koska Hello ei tarvitse mitään erityisiä paketteja, jätetään tämä tyhjäksi. "${shllibs:Debends}" huolehtii siitä, että kriittisimmät paketit, kuten libc, ovat asennettuina.
  • Lopuksi paketille annetaan vielä lyhyt (suositus noin 60 merkkiä) ja pitkä kuvaus. Pitkä kuvaus kirjoitetaan tiedoston loppuun siten, että jokaisen rivin alussa on välilyönti. Näin lopullinen control-tiedosto voisi näyttää tältä:
Source: hello
Section: main
Priority: extra
Maintainer: Tekijä <foo@bar.com>
Build-Depends: debhelper (>= 5), autotools-dev
Standards-Version: 3.7.2

Package: hello
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Hello world -ohjelma
 Klassinen Hello world -ohjelma, jonka avulla opettelemme 
 deb-pakettien tekemistä.

copyright

changelog

rules

.ex-päätteiset tiedostot

Tehdään paketti!

Lintian ja linda: onnistuiko paketti?

Pbuilder