utwórz pakiet .deb ze skryptów lub plików binarnych

73

Szukałem prostego sposobu tworzenia pakietów .deb dla rzeczy, które nie mają kodu źródłowego do skompilowania (config, shellscripts, oprogramowanie prawnie zastrzeżone). To był dość problem, ponieważ większość samouczków pakietu zakłada, że ​​masz źródłowy plik archiwum, który chcesz skompilować. Potem znalazłem ten krótki samouczek (niemiecki).

Następnie stworzyłem mały skrypt, aby utworzyć proste repozytorium. Lubię to:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Dodałem klucz do apt keyring i dołączyłem takie źródło:

deb http://my.default.com/my-repository/ ./

Wygląda na to, że samo repozytorium działa dobrze (natknąłem się na pewne problemy, aby je naprawić, musiałem dwukrotnie dodać pakiety i zrobić obejście pliku tymczasowego dla pliku Release). W repozytorium umieściłem również pobrany plik .deb, wygląda na to, że działają one również bez problemów. Ale moje samodzielnie utworzone pakiety nie ... Wiem sudo apt-get update, powodują one takie błędy:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Czy ktoś ma pomysł, co zrobiłem źle?

AKTUALIZACJA 2012-03-06: Tylko wskazówka dla innej osoby, która szuka łatwego sposobu tworzenia DEB: spójrz na FPM .

Thomas Deutsch
źródło
Czy dodałeś do pakietu plik DEBIAN / control, który zawiera pole Zależy:?
Bilal Akhtar
5
Btw. Teraz używam FPM do moich potrzeb związanych z pakowaniem: github.com/jordansissel/fpm
Thomas Deutsch
FWIW, dostałem ten sam komunikat o błędzie w pakiecie, który zbudowałem, ponieważ niepoprawnie podałem jedną z zależności. Napisałem „foo> = 2.1”, kiedy powinno to być „foo (> = 2.1)”. Spędziłem ponad godzinę patrząc na ostatnią połowę błędu, zanim zdałem sobie sprawę, że pierwsza połowa błędu mówiła mi dokładnie, co było nie tak ... (PS: FPM się kołysze. Ty też patrzysz na Aptly'ego).
Mark E. Haase
2
Zdecydowanie zgodziłbym się z tym, że nie ma samouczków ani przewodników dotyczących pakowania czegoś, co nie pochodzi ze smoły z plikami make itp. Bardzo trudno jest ustalić, jak to zrobić. Potrzebujemy takiego przewodnika dla osób takich jak deweloperzy Java, którzy chcą rozprowadzać wojnę za pomocą kilku skryptów i być może Liquibase, ale nie są administratorami ani opiekunami Debiana. FPM nie pomaga w tym przypadku, ponieważ również wymaga znajomości sposobu tworzenia czegoś, co można spakować.
John Little,
1
Dziękujemy bardzo za udostępnienie informacji o fpm. Działa jak urok!
Damian Nadales

Odpowiedzi:

70

Samouczek, który połączyłeś, wykorzystuje podejście niskiego poziomu do budowania pakietu. Takie podejście zwykle nie jest zalecane i może prowadzić do różnego rodzaju problemów, jeśli nie zostanie wykonane starannie.

Tworzenie .deb dla skryptu jest bardzo proste, gdy zrozumiesz podstawy pakowania. W skrócie:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Dodanie kolejnych skryptów wymaga ich skopiowania do katalogu i dodania do pliku debian / install - a następnie po prostu uruchom ponownie debuild. Powinieneś także sprawdzić i zaktualizować pliki debian / * zgodnie z wymaganiami.

Należy przeczytać strony man dla: dh_make, dh_install, idebuild

João Pinto
źródło
3
Edytuj debian / control, „Architektura: dowolna” należy zmienić na „Architektura: wszystkie”. Nie zapomnij ustawić odpowiedzi na pytanie;)
João Pinto
3
Oprócz zmiany nazwy katalogu i aktualizacji debian / changelog należy utworzyć archiwum .orig odpowiadające nowej wersji, jest to archiwum z zawartości katalogu źródłowego (bez uwzględnienia debian /).
João Pinto
1
Z katalogu include zwykle robię coś takiego: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto
1
Dodanie --indepflagi dh_makespowoduje, że pakiet „Architektura: wszystko” Również -bflaga nie istnieje w wersji 11.04 i nowszych.
andrewsomething
1
Po zbudowaniu pakietu .deb powinieneś sprawdzić błędy i ulepszenia za pomocą lintian somescripts_0.1-1_i386.deblub lintian package-source.changes- patrz: opakowanie.ubuntu.com/html/…
rubo77