Jak utworzyć pakiet deb, który instaluje serię plików

23

Chciałbym stworzyć zupełnie nowy pakiet deb, aby zainstalować serię plików. Jeśli to w ogóle możliwe, chciałbym rozpakować folder zawierający te pliki w ramach instalacji do znanej lokalizacji folderów. W przeciwnym razie bardzo przydatna byłaby wiedza na temat pakowania folderów źródłowych i plików.

Pytanie brzmi - czy jest to możliwe, a jeśli tak - w jaki sposób?

Podajmy przykład:

~/mypluginfolder/zawiera pliki x, ypodfolder o nazwie abci wewnątrz tego innego pliku o nazwie z.

Chcę tar tego folderu: tar -cvf myfiles.tar ~/mypluginfolder

Zakładam, że wyglądałby mój pakiet debian

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

Czy można w jakiś sposób rozpakować myfiles.tardo znanej lokalizacji folderu na przykład

/usr/share/rhythmbox/plugins/

Zatem końcowy wynik byłby:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Jeśli - zakładając, że starter potrzebuje źródła, szuka się porady, gdzie powinienem upuścić foldery i pliki źródłowe do struktury pakietu deb.


To ostatecznie stanie się serią indywidualnych pakietów PPA startera.

To, co wolę (ale może nie być w stanie osiągnąć ...), to ograniczenie mojego opakowania do minimum - utwórz serię pakietów z szablonu i dostosuj absolutne minimum (dziennik zmian itp. Struktura pliku / pliku tar i folderu tar) .

fossfreedom
źródło
Um ... dlaczego chcesz, aby .deb przeprowadził ekstrakcję smoły ? Dlaczego po prostu nie pobrać kodu źródłowego z tar i stworzyć deb od zera ze źródłem?
Thomas Ward
2
Możliwe, że wyśledzisz archiwum z innego miejsca, w stylu Adobe Flash.
jrg
@jrg, który pobiera instalator .bin, a nie archiwum. styl pakowania Adobe nie zapewnia źródła (jego zamkniętego źródła). Koncepcja jest jednak nadal taka sama, pobierz kod z innego miejsca, a następnie wypakuj / zainstaluj (jestem nit = wybredny tutaj: P)
Thomas Ward
@LordofTime Taka sama różnica. ; p
jrg

Odpowiedzi:

31

Poniżej zakładam, że źródło jest otwarte (np. Skrypty Pythona), które w związku z tym nie są powiązane z żadną architekturą (np. Amd64 lub i386), stąd „wszystko”. Jeśli masz jakieś źródło C, musisz użyć Architecture: amd64 i386w swoim controlpliku źródłowym .


tworzenie pakietu gotowego na Launchpad

To ostatecznie stanie się serią indywidualnych pakietów PPA startera.

To, co wolę (ale może nie być w stanie osiągnąć ...), to ograniczenie mojego opakowania do minimum - stwórz serię pakietów na podstawie szablonu i dostosuj absolutne minimum (dziennik zmian + plik tar).

Launchpad akceptuje tylko pakiety źródłowe, więc utwórz plik, rulesktóry instaluje pliki we właściwych miejscach. Dla wygody skorzystam z debhelpera . Katalog z twoimi plikami powinien wyglądać następująco:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

debian/copyrightPlik może być również użyteczny dla informowania użytkowników o pozwoleniach związanych z pakietem. Nie sądzę, że potrzebujesz postinstskryptu, ponieważ musisz tylko wyodrębnić niektóre pliki. compatpowinien zawierać poziom kompatybilności debhelpera, powiedz „8”. ( więcej szczegółów znajduje się na stronie podręcznika debhelpera )

changelogPlik można edytować z dchpoleceniem, dostępny z devscriptspakietem. rules( Za pomocą debhelpera) powinien zawierać:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Zrób to za pomocą chmod 755 debian/rules. Pakiet źródłowy można zbudować za pomocą debuild -S. Pamiętaj, aby znajdować się w katalogu o nazwie <package-name>-<version>. Więcej informacji na temat override_zachowania i dhpolecenia można znaleźć na stronie podręcznika .

Przewodnik dla nowych opiekunów pakietów Debiana był dla mnie bardzo cenny, aby to zrozumieć, zaleca się przeczytanie. Przykładowe opakowanie można znaleźć na https://github.com/Bumblebee-Project/bumblebee-ppa .


tworzenie pakietu z istniejącego drzewa plików

dpkg-deb -bmoże być użyty do tworzenia tarballi z istniejącego drzewa plików. Najpierw zacznij od utworzenia katalogu, który powinien nosić nazwę od twojego pakietu. Zakładam, że chcesz to nazwać myplugini włożyć /usr/share/rhythmbox/plugins/mypluginfolder. Ponadto utwórz DEBIANkatalog (wielkie litery!) Do przechowywania informacji o pakiecie:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Skopiuj swoje pliki:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Następnie potrzebujesz tak zwanego pliku kontrolnego , w myplugin/DEBIAN/controlktórym znajduje się opis pakietu. Zawartość takiego pliku znajduje się poniżej:

Package: myplugin
Version: 1.0-1
Maintainer: You <[email protected]>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Teraz możesz opcjonalnie zweryfikować zawartość paczki. Następne polecenie wyświetla listę wpisów w pliku i katalogu myplugin:

find myplugin -ls

Jeśli jesteś zadowolony, skompiluj pakiet w bieżącym katalogu:

dpkg-deb -b myplugin .

Pojawi się nowy plik o nazwie jak <package>_<version>_<architecture>.debw tym przykładzie myplugin_1.0-1_all.deb. Możesz użyć lessprogramu, aby zajrzeć do pliku. Na przykład less myplugin_1.0-1_all.deb.

Lekensteyn
źródło
3
+1 absolutny geniusz - kłaniam się panu. Dzięki!
fossfreedom
Dzięki za tę wspaniałą pomoc! Miałem jednak pewne problemy z plikiem kontrolnym, w końcu zadziałało, ale nie pytaj mnie jak;)
Gerhard Burger