Click for English version
Szabályos Ubuntu csomag készítése a wxMaxima példáján keresztül
Somogyi András
2010. február 15.
Somogyi András
Szabályos Ubuntu csomag készítése a wxMaxima példáján keresztül
című műve Creative Commons Nevezd meg!-Ne add el!-Így add tovább! 2.5 Magyarország Licenc alá esik.
Bevezető
Ez a dokumentum pár lépesben végigvezeti az olvasót a szabályos Ubuntu csomagkészítés folyamatán. Nevezetesen, a Maxima komputer- algebrai rendszer és grafikus keretprogramja, a wxMaxima csomagolásán keresztül mutatjuk be a csomagkészítés alapjait. További részletes leírások az Ubuntu Wiki kapcsolódó szócikkében olvashatóak. Vállaltan nem adunk teljes, kimerítő leírást, hiszen a feladat komplexitása ezt nem engedi meg, viszont igyekszünk jó irányvonalat mutatni az induláshoz.
Jóllehet, vannak bőven más megoldások csomagok készítésére, ám az itt bemutatott megoldás nagyobb szabadságot és teljesebb eredményt ad. A devscripts-szel készült csomagban minden részletesen beállítható, míg a vonzóbbnak tűnő, egyszerűbb módszerek, mint a checkinstall vagy az epm csak félmegoldást adnak. Ugyan több munkával és utánaolvasással jár ezzel a módszerrel a csomagkészítés, de a befektetett munka nem vész kárba. Ezt a módszert használva rálátást kapunk arra, hogyan is készülhetnek szabványos, hivatalos csomagok. Hiszen, bár működőképesek az egyszerűbb módszerek, és létjogosultságuk is van, mert például
nem minden esetben szükséges szabványos csomagot készítenünk. Viszont ha a nyilvánosság elé szánjuk a csomagot, mindenképp érdemes megfelelő minőségben elkészíteni azt.
A devscripts a Debian fejlesztők által létrehozott szkriptgyűjtemény, mely segít a csomag elkészítésében és annak ellenőrzésében is. Az ellenőrzést a Lintian végzi, mely szintén Debian fejlesztés, így ha ez sem talál szabálytalanságot a csomagban, már bizakodhatunk.
A wxMaxima csomagolása
- Előkészítés
-
A csomagkészítéshez szükségünk lesz egy GPG-kulcsra, mellyel a csomagot aláírjuk.
Ennek létrehozásához a itt
kaphatunk segítséget.
-
Ubuntu 9.10-en teszteltük a howtot, mielőtt belekezdenénk, hajtsunk végre egy
apt-get update && apt-get upgrade
-et.
Ezenkívül szükség lesz pár csomagra.
sudo apt-get install build-essential debhelper devscripts git-core gnupg-agent autotools-dev
-
Amennyiben helyben szeretnénk csomagot készíteni, nem PPA-ban, telepítsük fel a
wxmaxima
és maxima
fordításidei függőségeit is.
sudo apt-get install libwxgtk2.8-dev sbcl texinfo libgmp3-dev libreadline5-dev automake-1.9 libncurses5-dev autoconf2.13 texlive-latex-recommended sharutils libxmu-dev libxaw7-dev
-
Érdemes a csomagkészítéshez szükséges környezeti változókat előre beállítani.Figyelem, a lenti három adat egységet alkot,a kulcs létrehozásakor kellett megadni ezeket. Ezek az adatok fognak a
debian/changelogba
is bekerülni. Kiadhatjuk terminálban is ezeket a parancsokat, de sokkal kényelmesebb lesz, ha a homekönyvtárunkban lévő .bashrc
-be írjuk őket. Az adatokat értelem szerint változtassuk meg.
Az aláíráshoz szükséges GPG-kulcs.
export GPGKEY=1D4320FD
A kulcshoz tartozó emailcím.
export DEBEMAIL="somogyi.andras@gmail.com"
A kulcshoz tartozó név.
export DEBFULLNAME="András Somogyi"
Ha a /home/.bashrc-be írtuk ezeket, akkor ki kell adnunk a
source ~/.bashrc
parancsot, hogy érvénybelépjenek a változások.
Megjegyzés:A kulcsok hordozásáról itt olvashatunk.
- A csomagolandó forrás beszerzése
-
Szerezzük be a wxmaxima forrását, például:
wget http://downloads.sourceforge.net/project/wxmaxima/wxMaxima/0.8.4/wxMaxima-0.8.4.tar.gz
-
Tömörítsük ki a tar.gz-t,
tar -xf wxMaxima-0.8.4.tar.gz
majd nevezzük át a létrejött könyvtárat kisbetűsre.
mv wxMaxima-0.8.4 wxmaxima-0.8.4
- Az
orig.tar.gz
létrehozása
-
Nevezzük át az eredeti tar-t Debian kompatibilisre.
mv wxMaxima-0.8.4.tar.gz wxmaxima_0.8.4.orig.tar.gz
- A debian fájlok beszerzése
-
Egy másik könyvtárba szerezzük be a wxmaximát a Debian git tárolójából. A parancs legutolsó paramétere lesz a könyvtár neve.
git clone git://git.debian.org/git/debian-science/packages/wxmaxima.git wxmaxima_git
-
Innen csak a
debian/
könyvtárra lesz szükségünk, ezt másoljuk is a tar.gz-ből származó forrás könyvtárába.
mv wxmaxima_git/debian/ wxmaxima-0.8.4/
- Új changelog bejegyzés
-
Lépjünk a
wxmaxima-0.8.4
könyvtárba
cd wxmaxima-0.8.4
és adjuk ki a
dch -i
parancsot. Ez -a beállított szerkesztő meghívásával- egy új changelog bejegyzést fog létrehozni a debian/changelog
fájlban.
Fontos! A könyvtár és az orig.tar.gz amellett, hogy debiankonform elnevezésű, egyeznie kell a changelogban megadott verzióval. Ha mondjuk 0.8.4-et adtunk meg a changelogban, akkor ez szerepeljen a könyvtár, és az orig.tar.gz nevében is.
Esetünkben a changelog-bejegyzés fejléce a következőképp alakul:
wxmaxima (0.8.4) karmic; urgency=low
-
Szerkesszük a megfelelő fájlokat a
/debian
könyvtárban, például a függőségeket a control
fájlban. A függőségeket vesszővel elválasztva adhatjuk meg, a vesszők után szóköz is legyen.
- A forráscsomag létrehozása
-
Amennyiben PPA-ba szánjuk a csomagot, és nem helyi fordításra, ugorjunk "Az Ubuntu PPA használata" című részhez. A forráscsomagról itt írunk részletesen.
-
Abban az esetben, ha helyben szeretnénk telepíthető csomagot készíteni, nincs szükségünk külön létrehozni forráscsomagot, a következő lépésre ugorhatunk.
- A telepíthető csomag létrehozása
-
Maradva a
wxmaxima-0.8.4
könyvtárban, futtassuk a
debuild
parancsot.
-
Megjegyzés 1: Ez létre fogja hozni a telepíthető deb csomagot. A
debian/control
fájlban megadott fordításkori függőségeket telepítenünk kell, de erre felhívja figyelmünket a debuild
kimente, ha hiányzik valami.
-
Megjegyzés 2: Ugyan az Ubuntu Wiki a
pbuilder
-t ajánlja a telepíthető csomag létrehozására, de jelen esetben túlzó megoldás lenne a chrootolt környezet használata.
-
Megjegyzés 3: Ebben a lépésben történik a jól ismert
./configure
és make
programok lefutása, úgyhogy ez a lépés el fog tartani egy ideig.
A Maxima csomagolása
A wxMaxima program a parancssoros maxima frontendje. Mivel az általunk készített wxMaxima csomag
újabb verziót tartalmazhat, gyakran kerülhetünk olyan helyzetbe, hogy a disztribúció által biztosított
maxima csomagokkal nem fog működni. A következőkben a maxima csomagolását végezzük el.
A maxima egy lisp nyelven létrehozott alkalmazás. Több lisp implementáció is elérhető,
amik segítségével lefordítható, a csomag létrehozható. Ez a howto az sbcl-t használja.
Mivel az Ubuntu csomagból fogunk kiindul, ami a gcl-lel készül, némi módosításra lesz szükségünk a rules fájlban.
Ez a fájl a forráskönyvtárban lévő debian könyvtárban található és gyakorlatilag egy makefile.
Ezt kell majd szerkesztenünk, hogy az sbcl-t (vagy épp az általunk választott lisp-et) használja a debuild a fordításhoz.
A továbbiakban nézzük lépésenként...
- A forráskód és a debian könyvtár beszerzése, előkészítés.
-
Hozzunk létre egy könyvtárat, amiben dolgozni fogunk és lépjünk be ebbe.
-
Szerezzük be a maxima forrását.
wget http://downloads.sourceforge.net/project/maxima/Maxima-source/5.20.1-source/maxima-5.20.1.tar.gz
- Tömörítsük ki.
tar -xf maxima-5.20.1.tar.gz
- Az
orig.tar.gz
létrehozása
-
Nevezzük át az eredeti tar-t Debian kompatibilisre.
mv maxima-5.20.1.tar.gz maxima_5.20.1.orig.tar.gz
- Szerezzük be az Ubuntu csomag forrását
-
Adjuk ki a következő parancsot:
apt-get source maxima
-
Ez létre fog hozni egy könyvtárat is az adott csomag forrásaival, innen másoljuk a debian könyvtárat az általunk (a tar.gz-ből) beszerzett forráskönyvtárba.
mv maxima-5.17.1/debian/ maxima-5.20.1/
- Szükséges módosítások
-
Lépjünk a forráskönyvtárba,
cd maxima-5.20.1
majd, a
dch -i
paranccsal készítsünk megfelelő bejegyzést a csomag changelog
-jába.
Figyelem! Ügyeljünk a megfelelő verziómegjelölésére! A changelog
, az orig.tar.gz
, és a forráskönyvtár nevében lévő verziómegjelöléseknek egyezniük kell!
-
Módosítsuk a
debian
könyvtárban található rules
fájlt. Értelemszerűen meg kell változtatni a fájlt, hogy gcl helyett sbcl-t, vagy más lisp megvalósítást használjon. Alapvetően a configure paraméterének kell megadni a lisp változatot. Például a
GCL_ANSI=t ./configure --enable-gcl $$(gcl -batch -eval '#-native-reloc(princ "--enable-gcl-alt-link")(bye)') \
sort módosítsuk
SBCL=t ./configure --enable-sbcl \
-ra.
(Írjuk át GCL_ANSI
összes előfordulását is, vagy mindet hagyjuk úgy. Persze, elegánsabb, ha átírjuk.)
-
Természetesen, változnak a fordításidei függőségek is, tehát a
debian
könyvtár control
fájlját is módosítsuk. Esetünkben a gcl-t ki kell cserélni sbcl-re.
-
A fordítás közben létrejövő könyvtárak, és fájlok nevében ki kell cserélnünk a gcl-t a
debian
könyvtár rules
fájljában. Keressünk rá minden előfordulására és értelemszerűen módosítsuk.
-
Az 5.17.1-s maxima kiadása óta változott a
run_testsuite();
hívás interfésze, így módosítanunk kell ezt is.
Keressük meg a rules fájlban, és javítsuk run_testsuite(display_all = false);
-ra.
(Írhatunk true
-t is, ha látni szeretnénk a tesztek teljes kimenetét.)
-
SBCL használata esetén töröljük, vagy kommenteljük ki a readline-nal kapcsolatos sort, különben a fordítás sikertelen lesz. Egyedül GCL esetén lesz rá szükségünk.
- A forráscsomag létrehozása
-
Amennyiben PPA-ba szánjuk a csomagot, és nem helyi fordításra, ugorjunk "Az Ubuntu PPA használata" című részhez. A forráscsomagról itt írunk részletesen.
-
Abban az esetben, ha helyben szeretnénk telepíthető csomagot készíteni, nincs szükségünk külön létrehozni forráscsomagot, a következő lépésre ugorhatunk.
- A telepíthető csomag létrehozása
-
Maradva a
maxima-5.20.1
könyvtárban, futtassuk a
debuild
parancsot. Ha minden jól ment, csomag létrejön.
Az Ubuntu PPA használata
A továbbiakban az csomag terjesztését megkönnyítő Ubuntu PPA-ba (Personal Package Archives) való feltöltésről lesz szó. A PPA használata több szempontból is kellemes. A felhasználók hozzáadhatják a tárolónk deb-sorát sources.list-hez, így hamar értesülnek az újabb csomagokról, és telepíteniük is könnyebb lesz. A mi dolgunkat annyiban könnyíti meg, hogy a feltöltött forráscsomagból háromféle architektúrára is készül bináris csomag: i386, amd64, lpia. A fordítás is build-szervereken fog történni, így csak a forráscsomag feltöltésére lesz szükség. A PPA igen jó dokumentációval rendelkezik, ezeket el is kell olvasnia mindazoknak, akik használni akarják, itt csak egy rövid útmutatót adok.
Néhány megjegyzés, amiket jó tudni, mielőtt belevágunk.
-
Figyelem! A Quilt segítségével patch-elt csomagok jelenleg nem támogatottak.
-
A Maxima fordjtásához az SBCL lisp megvalósítást használtuk, de ez sajnos nem elérhető lpia platformra. Az i386, illetve az amd64 architektúrákon használhatjuk.
-
A PPA létrehozása után érdemes lesz várunk egy keveset. A PPA kulcsának elkészítése sok időt vesz igénybe, így ha eddig töltünk fel forráscsomagot, és készítettünk belőle binárist, az aláírás meg fog hiúsulni. A csomag működőképes lesz, ám hitelesíteni nem fogják tudni felhasználóink.
- Előkészületek
-
Ugyan csak a forráscsomagot kell feltöltenünk, mindenképp érdemes helyben csinálnunk egy próbafordítást. A PPA rendszere sorba állítja a rábízott munkákat, így sok időnk mehet kárba, ha a nem megfelelő forráscsomagunk elutasítja, vagy ha mégis elfogadta, akkor hiba miatt nem fordul a csomag.
-
Ha még nem tettük meg, olvassuk el figyelmesen a dokumentációt.
- Verziók
-
A csomag verzióját ki kell egészítenünk egy
~ppaN
utótaggal, ahol N
egy sorozatszám. Erre azért van szükség, mert a PPA-ban lévő csomag le kell váltsa az Ubuntuban jelenleg lévőt, egy újabb hivatalos csomag pedig az általunk készítettet kell elavulttá tegye.
-
Egy példán keresztül...
Tegyük fel, hogy az Ubuntu tárolókban jelenleg a wxmaxima-0.8.2-1
a legfrissebb hivatalos csomag. Ha ebből szeretnénk egy újabbat készíteni, akkor a wxmaxima-0.8.2-2~ppa1
verziómegjelölést adjuk. Így, ha a hivatalos tárolókba bekerül a wxmaxima-0.8.2-2
verzió, leváltja majd a mi (nemhivatalos) csomagunk.
- A forráscsomag elkészítése
-
Mivel nem egy létező csomag módosított változatát fogjuk feltölteni, hanem egy új verziót, a
debuild -S -sa
parancsot kell kiadnunk a forráskönyvtárban.
Ez létrehoz minden szükséges fájlt, amit fel kell töltenünk.
- Feltöltés
-
Váltsunk abba a könyvtárba, ahol a forráskönyvtár van, és a forráscsomag fájljai.
-
A feltöltés a
dput
paranccsal történik. Ugyan a PPA oldalán megkapjuk a konkrét parancsot, amit használnunk kell, íme némi magyarázat.
dput ppa:andras-somogyi/as <source.changes>
-
A fenti parancsban az
andras-somogyi
a felhasználónevem, és az as
pedig a PPA neve. A <source.changes>
helyére pedig a létrejött .changes
fájl neve kerül.
-
A feltöltött forráscsomag elfogadásáról, vagy elutasításáról visszaigazolást kapunk emailben, ahogy a fordítás sikeréről, vagy az esetleges kudarcáról is.
- A PPA használata a felhasználó szemszögéből
-
Egy egyszerű paranccsal hozzáadható a tároló.
sudo add-apt-repository ppa:andras-somogyi/as
Ez a PPA csak egy példa, értelemszerűen módosítandó.
Ez a leírás a Nyíregyházi Főiskola Matematika és Informatika Intézetének támogatásával készült. Külön köszönettel tartozom Blahota Istvánnak a tesztelésért, észrevételekért, javításokért.