Budowanie paczek deb

deb – format pakietu instalacyjnego używanego przez system operacyjny Debian GNU/Linux i jego pochodne np. Ubuntu. Pakiet deb (i jego instalator dpkg) posiada zaawansowaną kontrolę powiązań i zależności pomiędzy poszczególnymi składnikami systemu – programami i używanymi przez nie bibliotekami. Dzięki temu instalując nowy program ma się pewność, że nie będzie miał miejsca konflikt z innymi zainstalowanymi programami. W przeciwnym wypadku instalowany program mógłby przerwać funkcjonowanie z powodu braku poszczególnych składników, które są wymagane do prawidłowego działania.

Po krótkim wstępie, przejdźmy do sedna sprawy, wbrew pozorom, budowa paczek deb nie należy do najłatwiejszych rzeczy, szczególnie jeśli budujemy paczki do oficjalnego repozytorium. Na początek musimy wybrać oczywiście jakiś program (bądź bibliotekę itp.) z którego chcemy zrobić paczkę w tym przykładzie omówię budowę paczki mpview, którą zbudowałem do oficjalnego repozytorium Debiana (i swoją drogą nie została dodana, przynajmniej do czasu, aż nie ukaże się nowa wersja programu, ponieważ sądzę, że projekt mpview umarł, jednak nikt nie raczył zdjąć flagę RFP – Request For Packing). Na początek oczywiście musimy pobrać program z którego będziemy robić paczkę, następnie tworzymy jakiś katalog, np. debian, przenosimy do niego archiwum ściągniętego programu. Ogólnie mówiąc w katalogu debian powinniśmy mieć teraz

mpview-0.4.1/
mpview-0.4.1.tar.gz

należy tutaj zwrócić uwagę na format

program-wersja/
program-wersja.tar.gz

archiwum programu musi mieć rozszerzenie tar.gz, jeśli nie ma, to musimy przepakować, następnie wpisujemy

export DEBFULLNAME=”Imię Nazwisko”

i w katalogu

mpview-0.4.1/

wydajemy polecenie

dh_make -e adres@e-mail -c licencja -f ../archiwum.tar.gz

przy parametrze -c możemy wybrać gpl, lgpl, artistic, bsd, jeśli program nie jest pod żadną z tych licencji, opuszczamy parametr, po wydaniu powyższego polecenia w katalogu powinien pojawić się podkatalog o nazwie debian, jeśli budujemy nieskomplikowaną paczkę potrzebne będą nam tylko pliki

changelog
compat
control
copyright
rules
watch

do pliku compat wystarczy wpisać 7

echo 7 > compat

na początek zajmijmy się najważniejszym plikiem, którym jest control

Source: mpview
Section: graphics
Priority: optional
Maintainer: Adam Ziaja <adam{@}ziaja.name>;
Build-Depends: debhelper (>= 7), autotools-dev, libbz2-1.0 (>= 1.0.5-1~), libexpat1 (>= 2.0.1-4), libfftw3-dev (>= 3.1.2-3.1), libfontconfig1 (>= 2.6.0-3), libfreetype6-dev (>= 2.3.7-2), libgmp3c2 (>= 2), libice6 (>= 2), libjpeg62-dev (>= 6b-14), libpng12-dev (>= 1.2.27-2), libsm6 (>= 2), libtiff4-dev (>= 3.8.2-11), libx11-6 (>= 2), libxau6 (>= 1), libxcb1 (>= 1.1-1.1), libxdmcp6 (>= 1), libxext6 (>= 2), libxt6 (>= 1), zlib1g-dev (>= 1), qt4-qmake, libqt4-dev
Standards-Version: 3.8.1
Homepage: http://mpview.sourceforge.net

Package: mpview
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: MP View is cross-platform image viewer with possibility of image manipulation
MP View is cross-platform image viewer with possibility of image
manipulation (crop, resize, running filters), based on CImg and Qt.

Być może zauważyłeś, że Debian jest podzielony na następujące sekcje: main (zawiera wolne oprogramowanie), non-free (zawiera oprogramowanie, które nie jest wolne) i contrib (zawiera wolne oprogramowanie, które zależy od oprogramowania, które nie jest wolne).

Dodatkowo każda z sekcji dzieli się na logiczne podsekcje, które skrótowo opisują, do czego służy dany pakiet. Mamy zatem sekcję admin, która zawiera programy przeznaczone tylko dla administratora systemu, base z podstawowymi narzędziami, devel z narzędziami programistów, doc z dokumentacją, libs z bibliotekami, mail z programami do obsługi poczty elektronicznej, net z aplikacjami sieciowymi i demonami usług sieciowych, sound z aplikacjami muzycznymi, graphics z aplikacjami graficznymi, x11 z programami dla systemów X11, które nie pasują nigdzie indziej i wiele innych. Zmieńmy zatem Section na graphics. Prefiks “main/” jest przyjmowany domyślnie, więc możemy go pominąć. W kolejnej linii mamy Priority, pełną listę priorytetów można znaleść tutajMaintainer to oczywiście, osoba, która stworzyła paczkę, Build-Depends chwilowo pomińmy, Homepage to strona domowa programu,Architecture opisuje architekturę procesora, dla którego może być skompilowany pakiet. Pozostawimy w niej any, gdyż pakiet dpkg-gencontrol(1) sam wstawi w tym miejscu odpowiednią wartość dla każdego typu maszyny, na której kompilowany jest pakiet.Description jest opisem paczki, format powinien wyglądać następująco

Description: Krótki opis
[dwie spacje odstępu]dłuższy opis, dłuższy opis, dłuższy opis, załamanie linii
[dwie spacje odstępu]dalszy ciąg opisu
[dwie spacje odstępu]opcjonalnie kolejne linie

wróćmy teraz do Build-Depends, jest to lista zależności pakietów, które wymagane są do poprawnej instalacji naszej paczki i działania samego programu. Aby stworzyć taką wstępną listę, można posłużyć się skryptem

#!/bin/bash
strace -f -o /tmp/log ./configure
# or make instead of ./configure, if the package doesn’t use autoconf
for x in `dpkg -S $(grep open /tmp/log|\
perl -pe ‘s!.* open\(\”([^\”]*).*!$1!’ |\
grep “^/”| sort | uniq|\
grep -v “^\(/tmp\|/dev\|/proc\)” ) 2>/dev/null|\
cut -f1 -d”:”| sort | uniq`; \
do \
echo -n “$x (>=” `dpkg -s $x|grep ^Version|cut -f2 -d”:”` “), “; \
done

należy tutaj pamiętać o jak najbardziej optymalnym doborze parametrów do ./configure listę tych parametrów możemy zobaczyć wpisując

./configure –help

w głownym katalogu programu, skrypt wypisze nam listę wymaganych pakietów, niestety jeśli ma to być paczka do oficjalnego repozytorium to nie jest to koniec :-P, w całej liście edytujemy ciąg znaków (występuje w wersji pakietu)

-1)

i

-1 )

zamieniając go ciągiem

-1~)

następnie usuwany pakiety, które są wymagane w systemie jak np.

locales (>= 2.7-18)

i pakiety, które są wymagane przez inne pakiety wchodzące w listę wymaganych przez nas pakietów (masło maślane ;-P), założenie jest takie, że lista powinna być jak najkrótsza i zawierać tylko rzeczywiście wymagane pakiety. Przejdźmy do kolejnego pliku którym jestrules, przy opisie poprzedniego, nie na daremno zostawiłem opis Build-Depends na koniec, teraz musimy dopisać do pliku rules w odpowiednim miejscu parametry, które dopisaliśmy w skrypcie do generowania listy wymaganych pakietów, a także inne wymagane komendy (jeśli takie były wymagane, np. export jakieś wartości) do kompilacji programu. Przejdźmy zatem do kolejnego pliku, watch jest plikiem dzięki, któremu repozytorium może kontrolować czy nie zostały wydane nowsze wersje programu, standardowo mamy w tym pliku (watch.ex od example, z ang. przykład) różne przykłady dla popularnych stron, np. dla tego programu zawartość pliku była następująca

version=3
http://sf.net/mpview/mpview-(.*)\.tar\.gz

ponieważ strona programu znajduje się na sourceforge.net (sf.net), następnym plikiem, który omówię będzie changelog, jest to plik, który powinien zawierać odnotowane wszystkie dokonywane zmiany, przykładowo plik dla tego programu wygląda

mpview (0.4.1-1) unstable; urgency=low

* Initial release (Closes: #469088).

— Adam Ziaja <adam{@}ziaja.name>; Thu, 26 Mar 2009 12:26:55 +0100

w tym wyypadku Closes: #469088 odpowiada za zamknięcie “bug’u” numer 469088, oczywiście cały plik musi mieć wyżej napisany format, czyli przykładowo w ostatniej linii na początku przed myślnikami musi być spacja itp, niczego nie robiłem, żeby ładnie wyglądało, wszystko to jest wymagane, aby oprogramowanie mogło automatycznie odczytywać treść po przez parsowanie wszystkich tych plików, ostatnim już wymaganym (przynajmniej w przypadku tego programu, w rzeczywistości może okazać się, że będzie Wam potrzeby któryś z pozostałych plików) plikiem jest copyright, w nim muszą być dodane wszystkie licencje z programu, jeśli jakiś choćby jeden plik ma inna licencję to trzeba go dopisać według obowiązującego formatu, przykładowo plik dla mojej paczki wyglądał następująco

This package was debianized by Adam Ziaja <adam{@}ziaja.name>; on
Thu, 26 Mar 2009 12:26:55 +0100.

It was downloaded from http://mpview.sourceforge.net

Upstream Author:

Martin Petricek <martin{@}petricek.net>;

Files: *

Copyright:

Copyright (C) 2007-2009 Martin Petricek

License:

This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL’.

Files:

src/cimg/CImg.h

Copyright:

Copyright (C) 2008 David Tschumperle

License:

This software is governed by the CeCILL-C license under French law and
abiding by the rules of distribution of free software. You can use,
modify and or redistribute the software under the terms of the CeCILL-C
license as circulated by CEA, CNRS and INRIA at the following URL
http://www.cecill.info“.

As a counterpart to the access to the source code and rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software’s author, the holder of the
economic rights, and the successive licensors have only limited
liability.

In this respect, the user’s attention is drawn to the risks associated
with loading, using, modifying and/or developing or reproducing the
software by the user in light of its specific status of free software,
that may mean that it is complicated to manipulate, and that also
therefore means that it is reserved for developers and experienced
professionals having in-depth computer knowledge. Users are therefore
encouraged to load and test the software’s suitability as regards their
requirements in conditions enabling the security of their systems and/or
data to be ensured and, more generally, to use and operate it in the
same conditions as regards security.

The fact that you are presently reading this means that you have had
knowledge of the CeCILL-C license and that you accept its terms.

The Debian packaging is (C) 2009, Adam Ziaja <adam{@}ziaja.name>; and
is licensed under the GPL, see above.

następnie jeśli chcielibyśmy zamieścić paczkę w oficjalnym repozytorium, trzeba posiadać klucz GPG, ale to już temat na oddzielny artykuł, wpisujemy w głównym katalogu programu

debuild

następnie podajemy dwa razy hasło do naszego klucza GPG, przy wydaniu powyższego polecenia może wystąpić wiele błędów np. jeśli jest błąd w linii 1319 to w głównym katalogu programu musi znajdować się plik o nazwie ChangeLog (dokładnie z C i L duże, jeśli jest inaczej to musimy poprawić), jeśli debuild dojdzie do końca, możemy zweryfikować poprawność paczki po przez wydanie polecenia

lintian -Ii *.dsc

w katalogu który utworzyliśmy na początku (~/debian), jeśli paczka nie zawiera żadnych błędów i chcielibyśmy dodać ją do oficjalnego repozytorium to trzeba będzie zarejestrować się na http://mentors.debian.net i dodać nasz klucz GPG, którym podpisaliśmy paczkę, opis budowy pliku konfiguracyjnego programu dupload (który służy do wysyłania paczki na serwer) znajduje się pod tym adresem. Aby załadować paczkę na serwer wydajemy polecenie

dupload -t mentors *.changes

w katalogu ~/debian, następnie logujemy się na stronę i wybieramy opcję, że szukamy sponsora (deweloper Debiana, który może dodać naszą paczkę do oficjalnego repozytorium). Uff, koniec i niech ktoś teraz powie, że budowa takiej paczki to łatwa sprawa, a są osoby (deweloperzy Debiana) które zbudowały po ~100 takich paczek, jednak opisałem tylko sposób budowy prostej paczki, budowa niektórych pakietów jest o wiele trudniejsza :-). PS: w całym opisie pozamieniałem znaczki @ na {@} aby uniknąć spamu.

 

Poprzedni post

DenyHosts – zaawansowana konfiguracja

Następny post
Richard Stallman (by sa)

Dlaczego szkoły powinny używać wolnego oprogramowania

Powiązane posty

Biblioteka popt

Chodzi tu o rozwiązanie problemów, jakie może sprawić brak tej biblioteki.

Jesli chodzi o system opensuse biblioteka ta pochodząca z pakietu popt, a własciwie jej brak blokuje uruchamianie poszczególnych modułów yast co objawia się komunikatem:

Error while creating client module sw_single.
Więcej...