- Pakiet .deb zawiera pliki binarne, konfigurację i metadane. W systemach Debian, Ubuntu i pochodnych można nim zarządzać za pomocą narzędzi dpkg i APT.
- Do poprawnego pakowania używane jest drzewo zawierające katalog DEBIAN, plik kontrolny i skrypty konserwacyjne, a wszystko to przy udziale debhelper i dpkg-buildpackage.
- Jakość pakietów jest gwarantowana dzięki narzędziom takim jak lintian, czystym środowiskom kompilacji oraz podpisywania pakietów i repozytoriów przy użyciu GPG.
- Lokalne repozytoria z repozytorium i narzędziami takimi jak alien, checkinstall lub dh-make-perl rozszerzają opcje dystrybucji i kompatybilności.
Tworzenie i podpisywanie pakietów .deb w systemach Debian, Ubuntu i pochodnych Nie jest to rozwiązanie tylko dla doświadczonych programistów. Z odpowiednimi narzędziami, odrobiną organizacji i zrozumieniem czterech kluczowych koncepcji, każdy, kto swobodnie korzysta z terminala, może spakować własne oprogramowanie i mieć nad nim kontrolę, tak jak nad każdym innym pakietem w dystrybucji.
Jeśli masz dość instalowania rzeczy na /usr/local lub /opt bez kontroli pakietówZamiast radzić sobie z „osieroconymi” plikami binarnymi, których pochodzenia nie pamiętasz, lub polegać na kimś, kto spakuje program za Ciebie, gdy masz jedynie kod źródłowy lub plik .tar.gz, rozwiązaniem jest nauka tworzenia pakietów .deb. Co więcej, jeśli ukończysz proces z dobrym podpisem GPG i, jeśli chcesz, własnym małym repozytorium, uzyskasz czysty, powtarzalny i łatwy w utrzymaniu system.
Czym właściwie jest pakiet .deb i jak jest obsługiwany?
Plik z rozszerzeniem .deb to standardowy format pakietów Debiana. i cała jego rodzina: Ubuntu, Linux Mint itd. Wewnątrz znajdują się pliki binarne, biblioteki, pliki konfiguracyjne, dokumentacja i metadane opisujące sposób instalacji i zarządzania programem.
Sercem systemu jest dpkg (Menedżer pakietów Debiana)Narzędzie niskiego poziomu, które instaluje, wyświetla, sprawdza i usuwa pakiety .deb. Bardziej przyjazne dla użytkownika narzędzia, takie jak APT, Aptitude czy interfejsy graficzne (Synaptic, GDebi, centra oprogramowania itp.), bazują na nim, oferując automatyczne rozwiązywanie zależności i lepsze wrażenia użytkownika.
Kiedy zainstaluj gotowy plik .deb Masz kilka opcji. Z dpkg:
sudo dpkg -i paquete.deb
Jeśli pojawią się błędy zależności, zazwyczaj koryguje się je za pomocą:
sudo apt --fix-broken install
Dzięki nowoczesnemu APT możesz bezpośrednio zainstalować plik lokalny i pozwolić mu rozwiązać zależności:
sudo apt install ./paquete.deb
A jeśli wolisz coś skupionego na .deb, GDebi (w trybie CLI lub graficznym) jest bardzo wygodnym instalatorem:
sudo apt install gdebi
sudo gdebi paquete.deb
Podstawowa struktura wewnętrzna pakietu .deb

Plik .deb jest w rzeczywistości plikiem AR zawierającym dwa pliki tarball: control.tar.* i data.tar.*Aby zbudować go „ręcznie”, prościej jest pomyśleć o drzewie katalogów, które następnie jest pakowane dpkg-deb.
Wyobraź sobie, że chcesz utworzyć pakiet o nazwie źródła osobiste który instaluje czcionki w /usr/share/fonts/fuentes-personalesNajpierw należy utworzyć drzewo w katalogu roboczym, takie jak to:
fuentes-personales/
DEBIAN/
usr/share/fonts/fuentes-personales/
Folder DEBIAN (Obowiązkowa nazwa wielkimi literami) będzie zawierać metadane i skrypty sterujące; reszta drzewa dokładnie odzwierciedla ostateczną ścieżkę w systemie, w której będą znajdować się zainstalowane pliki. W usr/share/fonts/fuentes-personales/ Podałbyś same źródła.
W książce adresowej DEBIAN Istnieje kilka kluczowych plików, o których powinieneś wiedzieć:
- kontrola: karta danych technicznych pakietu (nazwa, wersja, zależności, opis itp.).
- postinst: skrypt uruchamiany po instalacji lub rozpakowaniu.
- poczta:skrypt uruchamiany po usunięciu pakietu.
- konfficie:lista plików konfiguracyjnych traktowanych ze szczególną ostrożnością podczas aktualizacji.
Skrypty konserwacyjne, takie jak postinst i postrm muszą być wykonywalnez uprawnieniami pomiędzy 05:55 a 07:55. Zwykle są to skrypty powłoki, choć nie jest konieczne dołączanie wiersza #!/bin/bash jeśli użyto z dpkg.
Plik/kontrolka DEBIAN: pola podstawowe i relacje

Plik DEBIAN/control jest deklaratywnym sercem pakietuTutaj masz nazwę, wersję, osobę zarządzającą, architekturę, opis i, co najważniejsze, zależności i relacje z innymi pakietami.
W przypadku prostego pakietu czcionek, minimalna kontrola mogłaby wyglądać mniej więcej tak (na przykład, przepisana):
Package: fuentes-personales
Version: 1.0-3
Section: misc
Priority: optional
Maintainer: Nombre Apellido <[email protected]>
Architecture: all
Replaces: fuentes-personales (<= 1.0-2)
Description: Colección de fuentes personales
Instala un conjunto de tipografías adicionales para el sistema.
Oto kilka kluczowych obszarów, które powinieneś opanować:
- Pakiet: nazwa pakietu binarnego (bez spacji, małe litery, rozsądna długość).
- Wersja:normalnie
version_upstream-revision(na przykład1.0-3). - Sekcja:kategoria w pliku (admin, devel, net, x11, games, libs, misc, itd.).
- Priorytet:ważność (wymagane, ważne, standardowe, opcjonalne, dodatkowe).
- Architektura: każdy (skompilowane zgodnie z architekturą), cała kolekcja (niezależnych, np. źródła, skrypty) lub określonej architektury (amd64, i386…).
- Zależy, Poleca, Wskazuje, Konflikty, Zapewnia, Zastępuje, Pre-zależy:relacje między pakietami.
System zależności Debiana jest bardzo dopracowany. Zależy Aby ten pakiet działał, wymuszasz instalację innych pakietów; Zalecenia i sugestie Podajesz APT i dselect wskazówki dotyczące pakietów, które uzupełniają Twoje; Konflikty i zastąpienia Kontrolujesz niekompatybilne lub udostępniające pliki pakiety; i z Zapewnia Reklamujesz, że oferujesz funkcjonalność „wirtualną” (taką jak „mail-transport-agent”).
W przypadku bibliotek współdzielonych powszechnie stosuje się ${shlibs:Depends} w Depends, który następnie zostanie automatycznie zastąpiony przez dh_shlibdeps podczas generowania pakietu, w zależności od bibliotek, z których faktycznie korzysta Twój plik binarny.
Ręczne budowanie pliku .deb za pomocą dpkg-deb
Jeśli masz już gotowe drzewo katalogów, DEBIAN/check poprawnie wypełniony i pliki na miejscuUtworzenie pliku .deb przy użyciu podstawowych narzędzi jest bardzo proste:
dpkg-deb -b fuentes-personales
To wygeneruje fuentes-personales.deb, pakiet instalacyjny. Możesz sprawdzić jego metadane za pomocą:
dpkg --info fuentes-personales.deb
Zobaczysz coś takiego: rozmiar, kontrolkę, skrypty postinst/postrm (jeśli występują) i podsumowanie zawartości. Aby zobaczyć drzewo plików w pakiecie, po prostu:
dpkg -c fuentes-personales.deb
Po uzyskaniu satysfakcjonującego efektu instalujesz go jak każdy inny:
sudo dpkg -i fuentes-personales.deb
i sprawdzasz, czy w tym przykładzie źródła zostały umieszczone w /usr/share/fonts/personal-fonts Dokładnie tak jak się spodziewałeś.
Narzędzia programistyczne do pakowania złożonego oprogramowania
Gdy przechodzisz od prostych pakietów (takich jak garść plików źródłowych) do kompletnych aplikacji z kompilacją, bibliotekami, dokumentacją itd., zaleca się wykorzystanie całego ekosystemu Narzędzia programistyczne Debiana.
Niektóre niezbędne pakiety do tworzenia pakietów .deb „poważnych” programów:
- dpkg-devNarzędzia do rozpakowywania, budowania i przesyłania pakietów źródłowych.
- binutils, gcc, make, libc6-dev:standardowy zestaw narzędzi kompilacji w C/C++.
- autoconf, automake, autotools-dev:wsparcie dla projektów z systemem „configure & make”.
- debhelper, dh-make:zbiór skryptów automatyzujących pakowanie.
- devscripts: narzędzia dla osób odpowiedzialnych za utrzymanie (debuild, uscan, dch itp.).
- fałszywy korzeń: emuluje uprawnienia roota podczas konstrukcji, nie wymagając przy tym żadnych rzeczywistych uprawnień.
- Lintian, Linda: automatyczne sprawdzanie jakości opakowań.
- debian-policy, developer-reference:oficjalna dokumentacja tego, jak powinny wyglądać pakiety.
Chodzi o to, żeby nie wykonywać dpkg-deb -ba hair dla wszystkiego, co jest średnio złożoneZamiast tego należy użyć standardowego przepływu Debiana: pakiet źródłowy, katalog debian/ z zasadami i konstrukcją za pomocą dpkg-buildpackage lub debuild.
Od kodu źródłowego do pakietu Debiana: ogólny przepływ
„Typowy” proces opisany w Podręczniku opiekuna nowego Debiana można podsumować następująco (uproszczając, ale nie pomijając ważnych elementów):
- Zainstaluj narzędzia do pakowania (te, które właśnie wymieniliśmy).
- Pobierz i wypróbuj program Skompiluj plik źródłowy (tar.gz itp.), zainstaluj go w /usr/local i sprawdź, czy działa.
- Przygotuj katalog roboczy, zwykle w
/usr/local/src/nombreRozpakuj kod i jeśli to konieczne zmień jego nazwę na coś takiegonombre-versión. - Dostosuj projekt do hierarchii Debiana: nic w /usr/local, wszystko w /usr, /etc, /var zgodnie z FHS.
- Utwórz szkielet Debiana za pomocą dh-makektóry doda katalog
debian/z szablonami. - Wypełnij i dostosuj pliki Debiana/: kontrola, zasady, prawa autorskie, dziennik zmian, pliki konfiguracyjne itp.
- Zbuduj pakiet za pomocą dpkg-buildpackage, najlepiej używając fakeroot.
- Przejrzyj plik .deb z Lintianem i Lindą, napraw problemy i odbuduj, aż będzie czysto.
- Przetestuj instalację, aktualizację i odinstalowanie w czystej maszynie lub klatce (chroot, pbuilder, cowbuilder).
- (Opcjonalny) Prześlij pakiet do repozytorium oraz, jeśli ma to zastosowanie, do Debiana/Ubuntu poprzez oficjalny kanał.
Przepływ ten uzupełniają dobre praktyki, takie jak korzystanie z system kontroli wersji (Subversion, Git itp.), przygotuj klatkę wyczyść chroot za pomocą pbuilder/cowbuilder do odtwarzania konstrukcji i składania małych lokalne repozytorium APT z reprepro aby rozpowszechniać własne pliki .deb i testować, czy APT je prawidłowo rozpoznaje.
Praca z dh-make, debhelper i debian/rules
Pierwszy duży krok nastąpi, gdy porzucisz pakiety „ręczne” i przyjmiesz Standard Debiana oparty na debhelper i pliku debian/rules, który jest specjalnym plikiem Makefile opisującym sposób kompilowania i instalowania pakietu.
Części kodu źródłowego programu (na przykład, gentoo-0.9.12/) i wykonujesz:
dh_make
Program zapyta Cię o typ pakietu, którego potrzebujesz (prosty pakiet binarny, pakiet multibinarny, biblioteka itp.) i utworzy dla Ciebie katalog. debian/ z szablonami: kontrolki, reguły, prawa autorskie, dziennik zmian, przykładowe skrypty, pliki .docs, .menu, .manpage.ex itp.
plik debian/zasady Wygenerowano za pomocą debhelper, zawiera takie cele jak: build, clean, install, binary-arch y binary-indep. W części binary-arch Wywołuje się baterię poleceń dh_*:
- dh_installdocs: instaluje dokumentację w
/usr/share/doc/paquete. - dh_installexamples:skopiuj przykłady do odpowiedniego folderu.
- dh_installmanpages:umieszcza strony podręcznika i ich łącza.
- dh_installchangelogs: instaluje dzienniki zmian.
- dh_strip, dh_compress, dh_fixperms:optymalizacja rozmiaru i poprawne uprawnienia.
- dh_shlibdeps, dh_gencontrol, dh_builddeb:obliczanie zależności, tworzenie kontrolek i ostateczna konstrukcja pliku .deb.
Piękno tego polega na tym, że te skrypty przeczytaj inne pliki w Debian/ (na przykład paquete.docs, paquete.manpagesitd.) i postępuj zgodnie z nimi. W ten sposób plik debian/rules może być dość krótki i czytelny, a jeśli później coś zmienisz, wystarczy dostosować tylko pliki pomocnicze.
Kontrola jakości: Lintian, Linda i testowanie w czystym środowisku
To, że pakiet kompiluje się i instaluje na Twoim komputerze, nie oznacza, że jest poprawny. Aby zbliżyć się do standardów Debiana, konieczne jest jego uruchomienie. narzędzia do analizy statycznej, takie jak Lintian i Linda.
Na przykład:
lintian -i paquete_1.0-1_i386.deb
linda -i paquete_1.0-1_i386.deb
Oba narzędzia generują ostrzeżenia (W) i błędy (E) z dość szczegółowymi wyjaśnieniami. Wykrywają typowe problemy, takie jak:
- Strony podręcznika zainstalowane w /usr/man zamiast /usr/share/man (łamie FHS).
- Duplikaty licencji w /usr/share/doc, który powinien znaleźć się wyłącznie w debian/copyright.
- Skrypt konserwacyjny z błędami, nieprawidłowymi uprawnieniami lub odwołaniami do przestarzałych narzędzi.
- Pakiety naruszające zasady sekcji, priorytetu lub struktury plików.
Ponadto zdecydowanie zaleca się Przetestuj pakiet w klatce chroot utworzonej za pomocą pbuilder/cowbuildergdzie instalowane będą tylko zadeklarowane zależności. Pozwala to wykryć zapomniane zależności (elementy, które znajdują się w systemie, ale nie zostały zadeklarowane jako kontrolowane) oraz zweryfikować proces instalacji, aktualizacji i czyszczenia w odtwarzalnym środowisku.
Podpisywanie pakietów i repozytoriów za pomocą GPG
Jeśli zamierzasz udostępniać pliki .deb innym osobom, nie jest dobrym pomysłem robienie tego bez wcześniejszego przygotowania. Najlepiej byłoby… Podpisz swoje pakiety i repozytorium kluczem GPGdzięki temu użytkownicy mogą mieć pewność, że instalowane przez nich oprogramowanie rzeczywiście pochodzi od Ciebie i nie zostało zmodyfikowane w trakcie instalacji.
Schemat jest prosty: generujesz Klucz GPG (para kluczy publicznych/prywatnych) – podpisuje się kluczem prywatnym, a następnie publikuje się klucz publiczny, aby wszyscy mogli go zaimportować. Zazwyczaj podpisuje się nie bezpośrednio plik .deb, ale pliki zmian (.changes), deskryptory źródłowe (.dsc) oraz plik wydania repozytorium.
W repozytorium APT zamontowanym za pomocą naganaNa przykład plik dists/<distribución>/Release towarzyszy Release.gpgKtóry jest podpisem. Gdy użytkownik dodaje Twoje repozytorium i importuje klucz, APT automatycznie weryfikuje ten podpis za każdym razem, gdy aktualizuje listę pakietów. Jeśli coś nie pasuje (zmanipulowany plik, niepoprawny klucz), APT wydaje alert bezpieczeństwa i nie ufa nikomu.
Dla programisty idealną integracją jest użycie debuild lub pdebuild z auto-debsigntak aby po zakończeniu budowania pakietów program poprosił o podanie hasła klucza GPG i podpisał niezbędne pliki bez konieczności robienia tego pojedynczo.
Lokalne repozytoria i publikacje: reprepro, Apache, rsync…
Gdy masz wiele pakietów, śledzenie każdego z nich z osobna staje się uciążliwe. Naturalnym rozwiązaniem jest stworzenie własnego. lokalne repozytorium APTnawet jeśli znajduje się na Twoim komputerze lub serwerze domowym. W ten sposób każdy klient (w tym Ty) może z niego korzystać. apt install paquete jak w przypadku każdego oficjalnego repozytorium.
Istnieje kilka narzędzi do tego celu, ale jednym z najbardziej popularnych jest nagana, który jest odpowiedzialny za generowanie całej struktury dists/ y pool/Plik wydania i jego podpis. Typowy obieg pracy składa się z:
- Na przykład utwórz drzewo bazowe
/var/packages/ubuntu. - Skonfiguruj dystrybucje (gutsy, stable, testing itd.) w plikach reprepro.
- Dodaj pakiety binarne za pomocą includeeb i źródła z dołączonym rozszerzeniem sc.
- Podpisz oświadczenie za pomocą klucza GPG.
Aby opublikować repozytorium w sieci, wystarczy udostępnić ten katalog za pomocą Apache lub inny serwer HTTP/FTPNastępnie w sekcji klientów dodaje się linię /etc/apt/sources.list lub graficzne okna dialogowe „Software Origins”, coś takiego:
deb http://tuservidor/ubuntu gutsy main
deb-src http://tuservidor/ubuntu gutsy main
i klucz publiczny jest importowany (apt-key add claveDebian.asc lub za pomocą interfejsu graficznego). Od tej pory repozytorium będzie działać jak każde inne, włącznie z automatycznymi aktualizacjami.
Jeśli Twój komputer nie jest zawsze włączony lub nie możesz bezpośrednio zaoferować protokołu HTTP, inną opcją jest synchronizacja zawartości /var/packages do dostawcy hostingu za pośrednictwem lustro lftp, rsync lub podobnetak, że serwer publiczny obsługuje repozytorium, ale Ty generujesz je i aktualizujesz lokalnie.
Konwersja pomiędzy formatami i alternatywami w przypadku braku pliku .deb.
Nawet jeśli używasz Debiana/Ubuntu, prędzej czy później natkniesz się na oprogramowanie spakowane wyłącznie w innych formatach. Narzędzie obcy Umożliwia konwersję między plikami .deb, .rpm, pakietami Slackware, LSB itd. Nie generuje tak dopracowanych efektów jak natywne pakowanie, ale jest dobrym obejściem tego problemu.
Praktyczne przykłady:
- Konwertuj dowolny format do .deb:
sudo alien archivo.rpm→ generujearchivo.deb. - Konwersja z .deb do .rpm:
sudo alien --to-rpm paquete_1.0-1_i386.deb.
Należy przejrzeć dane wyjściowe (skrypty konserwacyjne, ścieżki, zależności), ale w przypadku oprogramowania bez wersji natywnej może to być bardzo przydatne. Inną wygodną alternatywą podczas samodzielnej kompilacji jest checkinstall, który zaczepia fazę make installRejestruje kopiowane pliki i buduje podstawowy pakiet .deb, który natychmiast instaluje. Nie jest on ważny dla oficjalnych repozytoriów, ale zapobiega instalowaniu plików poza kontrolą dpkg.
W przypadku modułów CPAN Perl innym konkretnym narzędziem jest dh-make-perl, który generuje szkielet pakietu Debiana z modułu (na przykład dh-make-perl --cpan XML::Writer) dzięki czemu możesz go zintegrować ze swoim systemem jak każdy inny plik .deb.
Ogólnie rzecz biorąc, opanowanie konstrukcji i podpisywania Pakiety .deb dla dystrybucji Linuksa opartych na Debianie Oferuje znacznie więcej niż tylko możliwość zainstalowania programu: umożliwia tworzenie wersji własnych opracowań, bezpieczne ich wdrażanie, audyt oprogramowania zainstalowanego na komputerach, a jeśli masz na to ochotę, możesz przyczynić się do rozwoju ekosystemu, wysyłając pakiety do oficjalnych repozytoriów lub udostępniając je za pośrednictwem podpisanego pliku APT.
Pisarz z pasją zajmujący się światem bajtów i technologii w ogóle. Uwielbiam dzielić się swoją wiedzą poprzez pisanie i właśnie to będę robić na tym blogu, pokazywać Ci wszystkie najciekawsze rzeczy o gadżetach, oprogramowaniu, sprzęcie, trendach technologicznych i nie tylko. Moim celem jest pomóc Ci poruszać się po cyfrowym świecie w prosty i zabawny sposób.
