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/ależy tutaj zwrócić uwagę na format
mpview-0.4.1.tar.gz
program-wersja/archiwum programu musi mieć rozszerzenie tar.gz, jeśli nie ma, to musimy przepakować, następnie wpisujemy
program-wersja.tar.gz
export DEBFULLNAME="Imię Nazwisko"i w katalogu
mpview-0.4.1/wydajemy polecenie
dh_make -e adres@e-mail -c licencja -f ../archiwum.tar.gzprzy 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
changelogdo pliku compat wystarczy wpisać 7
compat
control
copyright
rules
watch
echo 7 > compatna początek zajmijmy się najważniejszym plikiem, którym jest control
Source: mpviewByć 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ść tutaj. Maintainer 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
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.
Description: Krótki opiswróć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
[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
#!/bin/bashnależy tutaj pamiętać o jak najbardziej optymalnym doborze parametrów do ./configure listę tych parametrów możemy zobaczyć wpisując
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
./configure --helpw 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 jest rules, 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=3ponieważ 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
http://sf.net/mpview/mpview-(.*)\.tar\.gz
mpview (0.4.1-1) unstable; urgency=loww 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
* Initial release (Closes: #469088).
-- Adam Ziaja <adam{@}ziaja.name> Thu, 26 Mar 2009 12:26:55 +0100
This package was debianized by Adam Ziaja <adam{@}ziaja.name> onnastę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
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.
debuildnastę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 *.dscw 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 *.changesw 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.

0 komentarze:
Prześlij komentarz