Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vytvořte si balíček pro Ubuntu/Debian snadno a rychle

Ubuntu i Debian pod sebou mají velkou skupinu uživatelů a základy tvorby balíčku jsou pro vývojáře nebo správce nepostradatelnou záležitostí. Začátečníci se ale tohoto kroku velmi obávají. Přitom vytvořit deb balíček není nějak složité a stačí k tomu znát pár nástrojů a zorientovat se v několika souborech.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Že potřebujete vytvořit balíček, zjistíte hned, jak nenajdete v repositářích novou verzi nějakého méně známého programu nebo potřebujete rozšířit mezi uživatele program svůj. V mém případě šlo o NoSQL databázi Redis, která je v Ubuntu i v Debianu v dost staré verzi a aniž bych se snažil pídit po nějakých neoficiálních balíčcích, rozhodl jsem se vytvořit balíček vlastní. U Redisu je ještě jeden problém, se kterým se setkáte i u jiných balíčků, a to, že autor ho udělal špatně. Pak si uživatel v dobré víře nainstaluje Redis z repositáře a zjistí, že mu chybí prakticky všechno a nemůže databázi otestovat, ani se k ní z řádky připojit.

Návod, který najdete níže, je volně převzatý z ubuntuforum­s.com a navlečený na Redis verze 2.0.2. Někde jsem něco přidal, někde něco ubral, ale nakonec jsem dostal balíček, který jsem potřeboval. Neváhejte se v diskusi podělit o vlastní postřehy a zkušenosti.

Jdeme na to

Postup je jednoduchý, najdeme zdrojové kódy a rozbalíme je. Pomocí připravených skriptů upravíme adresář, kde se nachází, tak, aby v něm bylo vše, co je potřeba pro vytvoření balíčku, upravíme skripty pro zkonfigurování, zkompilování, instalaci a spustíme skript pro vytvoření balíčku.

Nejdříve si tedy seženeme zdrojové kódy projektu, u kterého potřebujeme balíček. V tomto případě to bude již zmíněný Redis.

$ cd
$ mkdir -p src/redis_pkg
$ cd src/redis_pkg
$ wget http://redis.googlecode.com/files/redis-2.0.2.tar.gz
$ tar xf redis-2.0.2.tar.gz
$ cd redis-2.0.2 

Teď potřebujeme nějaké nástroje/skripty, které nám při vytváření balíčku pomohou.

$ sudo apt-get install dh-make debhelper devscripts 

A nic nezkazíte ještě instalací build-essential.

$ sudo apt-get install build-essential 

Jestli se všechno povedlo, přejdeme k druhému kroku vytváření balíčku, a to vygenerování adresáře debian/.

$ dh_make -e cx@initd.cz -f ../redis-2.0.2.tar.gz
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
 [s/i/m/l/k/n/b] s
 Maintainer name : Adam Strauch
 Email-Address   : cx@initd.cz
 Date            : Thu, 07 Oct 2010 18:35:01 +0200
 Package Name    : redis
 Version         : 2.0.2
 License         : blank
 Using dpatch    : no
 Using quilt     : no
 Type of Package : Single
 Hit <enter> to confirm:
 Done. Please edit the files in the debian/ subdirectory now. You should also
 check that the redis Makefiles install into $DESTDIR and not in / . 

Skript dh_make si zjistí, co může, z názvu balíku se zdrojovým kódem a z údajů v systému. Na vás pak je vybrat, jestli bude balíček knihovnou, jaderným modulem, jednou binárkou, více binárkami atd. My zatím zůstaneme u jedné binárky a vybereme tedy s. Některé informace, které vám jsou vypsány, pak můžete změnit různě v souborech v adresáři debian/. Začneme hned z kraje souborem debian/control.

Source: redis
Section: misc
Priority: optional
Maintainer: Adam Strauch <cx@initd.cz>
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.3
Homepage: http://code.google.com/p/redis/
Package: redis
Architecture: i386 amd64
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: A persistent key-value database
 Redis is an advanced key-value store. It is similar to memcached but the
 dataset is not volatile, and values can be strings, exactly like in memcached,
 but also lists, sets, and ordered sets. All this data types can be
 manipulated with atomic operations to push/pop elements, add/remove elements,
 perform server side union, intersection, difference between sets, and so
 forth. Redis supports different kind of sorting abilities. 

Zde je potřeba vyplnit sekci (seznam sekcí), prioritu (seznam priorit), domovskou stránku projektu, architektury, závislosti (v tomto případě je necháme na pomocných skriptech), krátký popis a dlouhý popis, kde každý řádek začíná mezerou.

Nyní přejdeme do souboru debian/changelog, kde upravíme to co nám vygenerovaly pomocné skripty. Pokud je to balíček jen pro vás, tak nemá smysl se moc rozepisovat.

redis (2.0.2-1) unstable; urgency=low
  * Initial release
 -- Adam Strauch <cx@initd.cz>  Thu, 07 Oct 2010 18:35:01 +0200 

Dále je potřeba vyplnit informace o licenci, resp. licencích. To se dělá v souboru debian/copyright.

This work was packaged for Debian by:
    Adam Strauch <cx@initd.cz> on Thu, 07 Oct 2010 18:35:01 +0200
It was downloaded from <http://code.google.com/p/redis/downloads/list>
Upstream Author(s):
    antirez <antirez at gmail dot com>
Copyright:
    <Copyright (C) 2010 antirez>
License:
    BSD
The Debian packaging is:
    Copyright (C) 2010 Adam Strauch <cx@initd.cz> 

Hned na začátku vyplníme název autora balíčku. Následuje adresa, odkud je zdrojový kód získán, jména všech autorů a jejich e-mailové adresy, copyright zdrojového kódu, licence zdrojového kódu a nakonec copyright pro balíček.

Tohle je asi nejnepříjemnější práce na celém balíčkování, protože správně by měly být zapsány všechny licence, pod kterými je zdrojový kód. Například jeden soubor může být pod BSD a druhý pod nějakou osobní licencí daného vývojáře a správně by tohle zde mělo být zohledněno.

Teď už přejdeme k samotné konfiguraci, kompilaci a instalaci balíčku. Měli byste vědět, jak se daný program kompiluje a podle toho pak upravíte soubor debian/rules. Jde o Makefile, který nakonec používá skript, jenž dá dohromady náš balíček. Zde najdeme několik pevně daných pravidel, ale na většinu z nich nemusíme u normálního balíčku koukat a vystačíme si s těmito:

  • configure
  • build-stamp
  • install

Jak je patrné z názvu, tak do prvního pravidla umístíme vše, co se týká konfigurace, to je staré dobré ./configure, jak ho známe z návodů. Redis žádnou konfiguraci nevyžaduje. Druhé pravidlo build-stamp je voláno z pravidla build a umístíme do něj vše co se týká sestavení binárních souborů. Skript dh_make, jenž vytvářel adresář debian/, už make doplnil, takže v případě Redisu sem nemusíte nic dávat. Co je ale potřeba u Redisu udělat, je upravit pravidlo pro instalaci. V tomto případě není Makefile u Redisu nějak nápomocný, a tak je lepší soubory nakopírovat hezky jeden po druhém, moc jich není.

install: build
    dh_testdir
    dh_testroot
    dh_prep
    dh_installdirs
    mkdir -p $(CURDIR)/debian/redis/usr/bin/
    mkdir -p $(CURDIR)/debian/redis/etc/redis/
    mkdir -p $(CURDIR)/debian/redis/etc/init.d/
    mkdir -p $(CURDIR)/debian/redis/var/lib/redis/
    cp $(CURDIR)/redis.conf $(CURDIR)/debian/redis/etc/redis/
    cp $(CURDIR)/init.d/redis-server $(CURDIR)/debian/redis/etc/init.d/
    cp $(CURDIR)/redis-benchmark $(CURDIR)/debian/redis/usr/bin/
    cp $(CURDIR)/redis-cli $(CURDIR)/debian/redis/usr/bin/
    cp $(CURDIR)/redis-check-aof $(CURDIR)/debian/redis/usr/bin/
    cp $(CURDIR)/redis-check-dump $(CURDIR)/debian/redis/usr/bin/
    cp $(CURDIR)/redis-server $(CURDIR)/debian/redis/usr/bin/ 

Nejdříve se spustí pomocné skripty. Ty se postarají o přípravu adresáře, do kterého budeme instalovat a o další věci. Pro více informací o jednotlivých skriptech použijte man. Pak už následuje samotná instalace. Po sestavení Redisu najdeme v jeho adresáři pět binárních souborů, které překopírujeme do /usr/bin v našem balíčku. Ten se tvoří v adresáři debian/nazev_ba­licku/. Pak do balíčku nakopírujeme ještě init skript a konfigurační soubor. Init skript jsem si vypůjčil z balíčku, který je v repositářích a konfigurační soubor je součástí zdrojových kódů. Pro kopírování použijeme proměnou CURDIR, ve které je uložená cesta ke zdrojovým kódům, s nimiž pracujeme.

Jediné, co nyní zbývá, je napsat poinstalační skript a vytvořit samotný balíček. Skript najdeme v souboru debian/postinst. Určitě jste si všimli stejného souboru, ale s koncovkou .ex, což je zkratka pro „example“. Stačí tedy tento soubor přejmenovat.

$ mv debian/postinst.ex debian/postinst 

A doplnit mu obsah.

    [...]
    configure)
        mkdir -p /var/lib/redis
        useradd -r -d /var/lib/redis redis
        chown redis:redis /var/lib/redis
        chown redis:redis /etc/redis
        chmod 750 /var/lib/redis
        chmod 750 /etc/redis
    ;;
    [...] 

To je přesně ta část, která se spustí, když zavoláte dpkg-reconfigure a která se zároveň spouští po instalaci balíčku.

Tím je vše připravené a můžeme začít kompilovat.

$ dpkg-buildpackage -rfakeroot 

Když vše proběhne jak má, uvidíme o adresář výš tyto soubory:

TIB2012

       
$ ls .. -l
celkem 878
drwxr-xr-x 8 cx cx   2272 2010-10-07 20:41 redis-2.0.2
-rw-r--r-- 1 cx cx 347802 2010-09-22 11:44 redis_2.0.2.orig.tar.gz
-rw-r--r-- 1 cx cx 347802 2010-09-22 11:44 redis-2.0.2.tar.gz
-rw-r--r-- 1 cx cx 172990 2010-10-07 20:41 redis_2.0.2-1_amd64.deb
-rw-r--r-- 1 cx cx   1373 2010-10-07 20:41 redis_2.0.2-1_amd64.changes
-rw-r--r-- 1 cx cx  12672 2010-10-07 20:41 redis_2.0.2-1.diff.gz
-rw-r--r-- 1 cx cx    725 2010-10-07 20:41 redis_2.0.2-1.dsc 

Mezi kterými je i náš balíček redis2.0.2–1amd64.deb. Ten můžeme nainstalovat a vše je hotovo.

$ sudo dpkg -i ../redis_2.0.2-1_amd64.deb 

Závěr

Tento článek si nekladl za cíl dopodrobna rozebrat každé zákoutí vytváření balíčků pro Ubuntu a Debian, ale s jeho pomocí pochopíte, jak se takový balíček vytváří, co to obnáší a budete připravení toho využít, když bude třeba.

Odkazy

Adam Štrauch

Adam Štrauch

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.

Školení: Zavedení Google Apps do firmy

Cílem školení je provést účastníky jednotlivými kroky zavedení Google Apps na vlastní doménu a seznámit je se základy administrace, aby byli schopni Google Apps sami udržovat a rozvíjet dle potřeb. Účastníci se také dozví, jak používat základní služby v balíku Google Apps (Gmail, Kalendář, Dokumenty a Weby Google) a jaké jsou možnosti jejich využití ve firmě.

Podrobnější informace a přihláška  

Ohodnoťte jako ve škole:
Průměrná známka 2,50

Přehled názorů

Redis v debianu
Roman Schulz 8. 10. 2010 07:40
Nový
└ 
Re: Redis v debianu
CHe 8. 10. 2010 10:42
Nový
Bezpečnost skriptů
Froggy 8. 10. 2010 08:22
Nový
├ 
Re: Bezpečnost skriptů
Bilbo 8. 10. 2010 08:45
Nový
├ 
Re: Bezpečnost skriptů
Pavel Mlčoch 8. 10. 2010 08:46
Nový
└ 
Re: Bezpečnost skriptů
Palo M. 8. 10. 2010 08:58
Nový
Ano, ale...
Palo M. 8. 10. 2010 08:44
Nový
├ 
Re: Ano, ale...
Leinad 8. 10. 2010 11:45
Nový
└ 
Re: Ano, ale...
Tydyt 8. 10. 2010 14:46
Nový
 
├ 
Re: Ano, ale...
fsdffg 8. 10. 2010 17:55
Nový
 
│
├ 
Re: Ano, ale...
balki 9. 10. 2010 22:50
Nový
 
│
└ 
Re: Ano, ale...
Tydyt 11. 10. 2010 08:59
Nový
 
└ 
Re: Ano, ale...
DNA 9. 10. 2010 16:29
Nový
Jen to ne!
PM 8. 10. 2010 08:58
Nový
├ 
Re: Jen to ne!
Peter Helcmanovsky 8. 10. 2010 09:41
Nový
│
└ 
Re: Jen to ne!
Fido 8. 10. 2010 14:10
Nový
└ 
Re: Jen to ne!
Slavko . 8. 10. 2010 12:39
Nový
Pekny clanek ale slovo zacatecnik bych radsi vynechal
_r3450n_ 8. 10. 2010 14:28
Nový
├ 
Re: Pekny clanek ale slovo zacatecnik bych radsi vynechal
partizann 8. 10. 2010 15:18
Nový
├ 
Re: Pekny clanek ale slovo zacatecnik bych radsi vynechal
Father Hurley 9. 10. 2010 04:58
Nový
├ 
Re: Pekny clanek ale slovo zacatecnik bych radsi vynechal
dolch 11. 10. 2010 22:03
Nový
└ 
Re: Pekny clanek ale slovo zacatecnik bych radsi vynechal
Ance 13. 10. 2010 12:09
Nový
checkinstall
D.A. Tiger 8. 10. 2010 15:49
Nový
└ 
Re: checkinstall
Tydyt 11. 10. 2010 09:02
Nový
 
└ 
Re: checkinstall
D.A. Tiger 11. 10. 2010 11:11
Nový
RPM.
qwertz 8. 10. 2010 16:49
Nový
├ 
Re: RPM.
DNA 9. 10. 2010 16:33
Nový
│
└ 
Re: RPM.
qwertz 9. 10. 2010 17:01
Nový
└ 
Re: RPM.
Petr Klíma 11. 10. 2010 15:45
Nový
To si delate kozy?
Boo 11. 10. 2010 10:18
Nový
└ 
Re: To si delate kozy?
dolch 11. 10. 2010 22:01
Nový
Dobrý článek
dolch 11. 10. 2010 22:06
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem