Jak zbudować pakiet Debian / Ubuntu ze źródła?

116

Mam źródło programu (pobrane z cvs / svn / git / ...) i chciałbym zbudować dla niego pakiet Debian / Ubuntu. Pakiet jest obecny w repozytoriach, ale:

  • To jest starsza wersja (brakuje potrzebnych funkcji)
  • Potrzebuję nieco innych opcji kompilacji niż domyślne.

Jak to zrobić najłatwiej? Martwię się o kilka rzeczy

  • Jak mogę sprawdzić, czy poprawnie wypisałem wszystkie zależności? (Mogę uzyskać wskazówki, patrząc na to, od czego zależała starsza wersja, ale mogły zostać dodane nowe zależności).
  • Jak mogę zapobiec instalowaniu przez system aktualizacji starszej wersji w repozytorium podczas aktualizacji?
  • Jak mogę zapobiec instalowaniu przez system nowszej wersji (gdy jest niedostępna), nadpisaniu mojego pakietu niestandardowego?
Ryszard Szopa
źródło
Podobnie na AU: askubuntu.com/questions/28372/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

78

możesz użyć specjalnego pakietu "checkinstall" dla wszystkich pakietów, których jeszcze nie ma w debianie / ubuntu.

Możesz użyć "uupdate" ( apt-get install devscripts), aby zbudować pakiet ze źródeł z istniejącymi źródłami Debiana:

Przykład dla libdrm2:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc
Paweł Gościcki
źródło
Dzięki! Właśnie użyłem tego do przeniesienia Subversion 1.6.6 na instalację Ubuntu, która ma tylko 1.6.5 jako najnowszą dostępną wersję, i działało bezbłędnie. Zaoszczędziło mi to kilku godzin majsterkowania! :)
Carlos Villela
Czy mógłbyś podać trochę więcej kontekstu na temat tych poleceń? Gdzie jest libdrm-2.3.1dokładnie? Również skąd się libdrm-2.4.1.tar.gzwzięło (moje początkowe założenie jest takie, że jest to skompilowany plik binarny aplikacji, którą chcemy spakować w pliku deb, ale zastępując istniejącą wersję, czy to prawda?)
Wheeler
Jeśli pojawi się błąd You must put some 'source' URIs in your sources.list, odkomentuj wiersze deb-src w/etc/apt/sources.list
Christian
27

Najpierw pytanie tytułowe: Zakładając, że katalog debian już tam jest, bądź w katalogu źródłowym (katalog zawierający katalog debian) i wywołaj dpkg-buildpackage. Lubię go uruchamiać z tymi opcjami:

dpkg-buildpackage -us -uc -nc

co oznacza, że ​​nie podpisuj wyniku i nie czyść.

Jak mogę sprawdzić, czy poprawnie wypisałem wszystkie zależności?

Zdobywanie zależności to czarna sztuka. „Oficjalnym” sposobem jest sprawdzenie, czy kompilacja zależy od tego, czy pakiet buduje się tylko z systemem podstawowym, pakietami „niezbędnymi do budowania” i określonymi zależnościami budowania. Nie znam ogólnej odpowiedzi na zwykłe zależności, po prostu zajrzyj :)

Jak mogę zapobiec instalowaniu przez system aktualizacji starszej wersji w repozytorium podczas aktualizacji? Jak mogę zapobiec instalowaniu przez system nowszej wersji (gdy jest niedostępna), nadpisaniu mojego pakietu niestandardowego?

Moja wiedza na ten temat może być nieaktualna, ale aby zająć się obydwoma: Użyj dpkg --set-selections. Zakładając, że nullidentd jest pakietem, który chcesz pozostać na miejscu, uruchom jako root

echo 'nullidentd hold' | dpkg --set-selections

Alternatywnie, ponieważ tworzysz ze źródła, możesz użyć epoki, aby ustawić sztucznie wysoki numer wersji i nigdy więcej się nie przejmować. Aby użyć epoki, dodaj nowy wpis do pliku debian / changelog i umieść 99: przed numerem wersji. Biorąc pod uwagę mój przykład nullidentd, pierwsza linia zaktualizowanego dziennika zmian brzmiałaby:

nullidentd (99:1.0-4) unstable; urgency=low

Odnośnik Bernarda jest dobry, zwłaszcza jeśli musisz sam stworzyć katalog debian - pomocne są również odniesienia dla programistów i strona z ogólnymi zasobami . Link Adama również wygląda dobrze, ale nie znam go.

Daniel Bungert
źródło
1
"dpkg --set-selections" nadal działa, ale obecnie lepszą metodą byłoby "aptitude hold nullidentd".
Mark Baker,
6

Do tego, co chcesz zrobić, prawdopodobnie będziesz chciał użyć różnicy źródeł Debiana, więc Twój pakiet jest podobny do oficjalnego, poza używaną wersją autorską. Możesz pobrać różnicę źródłową z packages.debian.org lub możesz ją pobrać razem z .dsc i oryginalnym archiwum źródłowym za pomocą "apt-get source".

Następnie rozpakowujesz nową wersję zewnętrznego źródła, przechodzisz do tego katalogu i stosujesz pobrany plik diff

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Następnie wprowadź zmiany, które chcesz skompilować opcje i zbuduj pakiet, wykonując

dpkg-buildpackage -rfakeroot -us -uc
Mark Baker
źródło
3
  • umieść katalog "debian" z oryginalnego pakietu w katalogu źródłowym
  • użyj " dch ", aby zaktualizować wersję pakietu
  • użyj "debuild" do zbudowania pakietu
zowers
źródło
2

Wierzę, że to jest pakiet Debiana „biblia”.

Cóż, jest to przewodnik nowego opiekuna Debiana, więc wiele z nich nie będzie miało zastosowania, ale obejmują one, co jest gdzie i gdzie jest.

Bernarda
źródło
1

Oto samouczek dotyczący budowania pakietu Debiana.

Zasadniczo musisz:

  1. Skonfiguruj strukturę folderów
  2. Utwórz plik kontrolny
  3. Opcjonalnie utwórz skrypty postinst lub prerm
  4. Uruchom dpkg-deb

Zwykle robię to wszystko w moim Makefile, więc mogę po prostu wpisać make, aby wypluć plik binarny i spakować go za jednym razem.

Adam Pierce
źródło
1

Jak mogę sprawdzić, czy poprawnie wypisałem wszystkie zależności?

pbuilderJest doskonałym narzędziem do sprawdzania zarówno zależności kompilacji i zależności poprzez utworzenie czystego systemu bazowego w środowisku chroot. Kompilując pakiet w pbuilder, możesz łatwo sprawdzić zależności kompilacji, a testując go w środowisku pbuilder, możesz sprawdzić zależności.

thiton
źródło
1

Jeśli chcesz szybko i łatwo zainstalować zależności kompilacji, użyj:

apt-get build-dep

Spowoduje to zainstalowanie zależności. W tym celu potrzebujesz linii sources w pliku sources.list:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Jeśli przenosisz pakiety z wersji testing do stabilnej, pamiętaj, że zależności mogły ulec zmianie. Polecenie apt-get build-deb instaluje zależności dla pakietów źródłowych w bieżącym repozytorium.

Ale oczywiście dpkg-buildpackage -us -uc pokaże wszystkie odinstalowane zależności.

Jeśli chcesz częściej kompilować, użyj cowbuilder.

apt-get install cowbuilder

Następnie utwórz obszar kompilacji:

sudo DIST = squeeze ARCH = amd64 cowbuilder --create

Następnie skompiluj pakiet źródłowy:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

Zobacz, gdzie cowbuilder umieszcza wynikowy pakiet.

Powodzenia!

Allard Hoeve
źródło