dpkg-source
narzędzia do zarządzania źródłowymi pakietami Debiana (.dsc)
- Provided by: dpkg-dev (Version: 1.17.5ubuntu5.8)
- Source: dpkg
- Report a bug
narzędzia do zarządzania źródłowymi pakietami Debiana (.dsc)
dpkg-source [opcja...] polecenie
dpkg-source tworzy i rozpakowuje źródłowe archiwa (pakiety) Debiana.
Żadne z tych poleceń nie pozwala na łączenie wielu opcji w jedną, nie pozwalają również na podawanie wartości opcji jako oddzielnego parametru.
dpkg-source odczyta nazwy innych plików tworzących pakiet źródłowy z pliku kontrolnego; zakładane jest, że są one w tym samym katalogu co .dsc.
Pliki w rozpakowanym pakiecie będą mieć uprawnienia i właściciela zgodnie z typowymi, oczekiwanymi wartościami jak przy zwykłym tworzeniu plików i katalogów - katalogi i pliki wykonywalne będą mieć prawa 0777, zaś zwykłe pliki będą mieć prawa 0666 (w obu przypadkach modyfikowane przez umask rozpakowującego). Ponadto jeśli katalog nadrzędny ma ustawiony bit setgid, rozpakowane katalogi także będą go mieć, zaś wszystkie pliki i katalogi przejmą ustawienia grupy katalogu nadrzędnego.
Jeśli pakiet źródłowy używa niestandardowego formatu (aktualnie oznacza to wszystkie formaty poza "1.0"), jego nazwa będzie umieszczona w pliku debian/source/format. Dzięki temu przy następnych budowach pakietu źródłowego będzie domyślnie używany ten sam format.
dpkg-source będzie budować pakiet źródłowy z użyciem pierwszego znalezionego formatu z następującej listy, w kolejności: format(y) określony(e) za pomocą opcji --format, format określony w pliku debian/source/format, "1.0". Powrót do "1.0" jest uważany za przestarzały i kiedyś zostanie usunięty, dlatego należy zawsze dokumentować żądany format źródła w pliku debian/source/format. W sekcji FORMATY PAKIETÓW ŹRÓDŁOWYCH można znaleźć wyczerpujący opis różnych formatów pakietów źródłowych.
The -i option by itself enables this setting with a default regex (preserving any modification to the default regex done by a previous use of --extend-diff-ignore) that will filter out control files and directories of the most common revision control systems, backup and swap files and Libtool build output directories. There can only be one active regex, of multiple -i options only the last one will take effect.
This is very helpful in cutting out extraneous files that get included in the diff, e.g. if you maintain your source in a revision control system and want to use a checkout to build a source package without including the additional files and directories that it will usually contain (e.g. CVS/, .cvsignore, .svn/). The default regex is already very exhaustive, but if you need to replace it, please note that by default it can match any part of a path, so if you want to match the begin of a filename or only full filenames, you will need to provide the necessary anchors (e.g. '(^|/)', '($|/)') yourself.
-I by itself adds default --exclude options that will filter out control files and directories of the most common revision control systems, backup and swap files and Libtool build output directories.
Note: While they have similar purposes, -i and -I have very different syntax and semantics. -i can only be specified once and takes a perl compatible regular expression which is matched against the full relative path of each file. -I can specified multiple times and takes a filename pattern with shell wildcards. The pattern is applied to the full relative path but also to each part of the path individually. The exact semantic of tar's --exclude option is somewhat complicated, see https://www.gnu.org/software/tar/manual/tar.html#wildcards for a full documentation.
The default regex and patterns for both options can be seen in the output of the --help command.
Jeśli nie wiadomo którego formatu źródeł użyć, powinno się wybrać prawdopodobnie "3.0 (quilt)" lub "3.0" (native)". Więcej informacji o wdrażaniu tych formatów w Debianie można znaleźć na stronie https://wiki.debian.org/Projects/DebSrc3.0.
Pakiet źródłowy w tym formacie składa się z pliku .orig.tar.gz powiązanego z plikiem różnic .diff.gz, lub z pojedynczego pliku .tar.gz (w takim przypadku mówi się, że pakiet jest natywny).
Rozpakowywanie
Rozpakowanie pakietu natywnego to proste rozpakowanie pojedynczego pliku archiwum w katalogu docelowym. Rozpakowanie pakietu w stylu Debiana (non-native) odbywa się poprzez najpierw rozpakowanie pliku .orig.tar.gz a następnie nałożenia łatek zawartych w pliku .diff.gz. Czasy modyfikacji wszystkich łatanych plików są ustawiane na wartość odpowiadającą czasowi rozpakowania pakietu źródłowego (zapobiega to przesunięciom czasów, które prowadzą do problemów przy łataniu plików generowanych automatycznie). Plik różnic (diff) może tworzyć nowe pliki (cały katalog "debian" jest tak tworzony), ale nie może usuwać plików (pozostawiane są puste pliki o zerowej długości).
Budowanie
Budowanie pakietu natywnego to proste stworzenie pojedynczego pliku archiwum z katalogu źródeł. Budowanie pakietu w stylu Debiana (non-native) obejmuje rozpakowanie oryginalnego archiwum do oddzielnego katalogu z przyrostkiem ".orig" i regenerację pliku .diff.gz poprzez porównanie katalogu pakietu źródłowego z katalogiem ".orig".
Opcje budowania (z -b):
Buduje pakiet źródłowy. Należy podać jeden lub dwa argumenty, nie będące opcjami. Pierwszym z nich jest nazwa katalogu zawierającego rozpakowane źródła. Jeżeli podano drugi argument, to powinien on być nazwą oryginalnego katalogu ze źródłami lub archiwum tar albo pustym łańcuchem znaków, jeśli pakiet jest specyficzny dla Debiana i nie ma pliku różnic. Jeżeli nie podano drugiego argumentu, to dpkg-source - w zależności od argumentów -sX - będzie szukał albo archiwum tar z oryginalnymi źródłami pakiet_wersja_upstream.orig.tar.rozszerzenie (gdzie rozszerzenie jest jednym z gz,bz2 lub lzma), albo katalogu z oryginalnymi źródłami katalog.orig.
-sa, -sp, -sk, -su oraz -sr nie nadpiszą istniejących archiwów tar lub katalogów. Jeśli jest to wymagane, należy użyć -sA, -sP, -sK, -sU i -sR.
Opcje rozpakowywania (z -x):
We wszystkich przypadkach, istniejące oryginalne drzewo ze źródłami będzie usunięte.
Wszystkie spośród opcji -s-X się wzajemnie wykluczają. Jeśli zostanie podana więcej niż jedna, to zostanie użyta ostatnia z nich.
Znany również jako wig&pen. Ten format nie jest zalecany do szerokiego stosowania, zastępuje go format "3.0 (quilt)". Wig&pen był pierwszą specyfikacją nowej generacji formatu pakietów źródłowych.
Zachowanie dla tego formatu jest takie samo jak dla "3.0 (quilt)" z tą różnicą, że nie używa jawnej listy łatek. Wszystkie pliki w katalogu debian/patches/ pasujące do wyrażenia regularnego Perla [\w-]+ muszą być prawidłowymi łatkami: są one nakładane podczas rozpakowywania.
Podczas budowania nowego pakietu źródłowego, wszystkie zmiany w stosunku do kodu źródłowego pochodzącego od autorów programu są zapisywane w łatce o nazwie zz_debian-diff-auto.
Ten format jest rozszerzeniem natywnego formatu pakietów zdefiniowanego w formacie w wersji 1.0. Obsługuje wszystkie metody kompresji i domyślnie ignoruje pliki i katalogi specyficzne dla systemów kontroli wersji, jak również wiele typów plików tymczasowych (proszę sprawdzić opis domyślnej wartości opcji -I w informacjach uzyskiwanych poleceniem --help).
A source package in this format contains at least an original tarball (.orig.tar.ext where ext can be gz, bz2, lzma and xz) and a debian tarball (.debian.tar.ext). It can also contain additional original tarballs (.orig-component.tar.ext). component can only contain alphanumeric characters and hyphens ("-").
Rozpakowywanie
Najpierw rozpakowywane jest główne oryginalne archiwum tar, następnie rozpakowywane są dodatkowe oryginalne archiwa tar do podkatalogów nazwanych od części komponent z ich nazwy pliku (istniejące katalogi o takich nazwach są zamieniane). Na końcu rozpakowywane jest archiwum debian, po uprzednim usunięciu katalogu debian (jeśli taki istniał). Należy zauważyć, że archiwum debian musi zawierać podkatalog debian, ale może również zawierać pliki binarne poza tym katalogiem (proszę sprawdzić opcję --include-binaries).
All patches listed in debian/patches/debian.series or debian/patches/series are then applied. If the former file is used and the latter one doesn't exist (or is a symlink), then the latter is replaced with a symlink to the former. This is meant to simplify usage of quilt to manage the set of patches. Note however that while dpkg-source parses correctly series files with explicit options used for patch application (stored on each line after the patch filename and one or more spaces), it does ignore those options and always expect patches that can be applied with the -p1 option of patch. It will thus emit a warning when it encounters such options, and the build is likely to fail.
Contrary to quilt's default behaviour, patches are expected to apply without any fuzz. When that is not the case, you should refresh such patches with quilt, or dpkg-source will error out while trying to apply them.
Similarly to quilt's default behaviour, the patches can remove files too.
Jeśli podczas rozpakowywania zostały nałożone jakieś łatki, tworzony jest plik .pc/applied-patches.
Budowanie
All original tarballs found in the current directory are extracted in a temporary directory by following the same logic as for the unpack, the debian directory is copied over in the temporary directory, and all patches except the automatic patch (debian-changes-version or debian-changes, depending on --single-debian-patch) are applied. The temporary directory is compared to the source package directory. When the diff is non-empty, the build fails unless --single-debian-patch or --auto-commit has been used, in which case the diff is stored in the automatic patch. If the automatic patch is created/deleted, it's added/removed from the series file and from the quilt metadata.
Żadne zmiany w jakimkolwiek pliku binarnym nie mogą być odwzorowane w pliku zmian, co doprowadzi do niepowodzenia - chyba, że opiekun pakietu rozmyślnie zdecydował o włączeniu tak zmodyfikowanego pliku binarnego do archiwum debian (wskazując go w debian/source/include-binaries). Proces budowania nie powiedzie się także jeśli zostaną znalezione pliki binarne w podkatalogu debian, chyba że zostały one uprzednio wymienione w debian/source/include-binaries.
Zaktualizowany katalog debian oraz lista zmodyfikowanych plików binarnych są następnie używane do powtórnego wygenerowania archiwum debian.
The automatically generated diff doesn't include changes on VCS specific files as well as many temporary files (see default value associated to -i option in the --help output). In particular, the .pc directory used by quilt is ignored during generation of the automatic patch.
Uwaga: dpkg-source --before-build (i -b) upewni się, że drzewo ze źródłami będzie mieć nałożone wszystkie łatki określone w pliku series podczas generowania pakietu źródłowego. Czyni to odnajdując niezaaplikowane łatki (są one wypisane w pliku series, lecz nie są w .pc/applied-patches), a jeśli pierwsza łatka z tego zestawu może być zaaplikowana bez błędów, zostaną zaaplikowane wszystkie. Opcja --no-preparation może być użyta, aby wyłączyć to zachowanie.
Zapisywanie zmian
Podanie pliku-łatki jest przydatne głównie po nieudanym budowaniu, które pre-wygenerowało ten plik i na tej podstawie podany plik jest usuwany po integracji. Proszę zauważyć, że zmiany zawarte w pliku łatki muszą być już zaaplikowane w drzewie i że pliki zmodyfikowane przez łatkę nie mogą zawierać uzupełniających, niezapisanych zmian.
Jeśli przy generowaniu łatki wykryte zostaną zmodyfikowane pliki binarne, zostaną one automatycznie dodane do debian/source/include-binaries, przez co znajdą się one w archiwum debian (dokładnie jak zrobiłoby dpkg-source --include-binaries -b).
Opcje budowania
Opcje rozpakowywania
Ten format jest szczególny. Nie jest prawdziwym formatem pakietu źródłowego, ale może być użyty do utworzenia pakietu źródłowego zawierającego dowolne pliki.
Opcje budowania
Wszystkie argumenty nie będące opcjami są uważane za pliki, które mają być zintegrowane z generowanym pakietem źródłowym. Pliki te muszą istnieć i najlepiej powinny być w bieżącym katalogu. Musi być podany przynajmniej jeden plik.
Jest to format eksperymentalny.
Pakiet źródłowy w tym formacie składa się z pojedynczej kopii repozytorium git .git, przechowującego źródła pakietu. Może zawierać również plik .gitshallow, wypisujący wersje do płytkiej kopii gita.
Rozpakowywanie
Kopia jest tworzona jako repozytorium git do katalogu docelowego. Jeśli istnieje plik gitshallow, to jest instalowany jako ".git/shallow" wewnątrz sklonowanego repozytorium git.
Proszę zauważyć, że domyślnie nowe repozytorium będzie przełączone na tę samą gałąź co oryginalne źródło (zwykle jest to "master", ale może być również coś innego). Wszystkie inne gałęzie będą dostępne jako "remotes/origin/".
Budowanie
Nie zagłębiając się dalej, wykonywane są pewne testy aby upewnić się, czy nie ma żadnych niezatwierdzonych zmian, które nie są ignorowane.
git-bundle(1) jest używany do utworzenia kopii repozytorium git. Domyślnie dołączane są wszystkie gałęzie i tagi.
Opcje budowania
Ten format jest eksperymentalny. Generuje pojedyncze archiwum zawierające repozytorium bzr.
Rozpakowywanie
Archiwum tar jest rozpakowywane i używany jest bzr aby pobrać aktualną gałąź kodu.
Budowanie
Nie zagłębiając się dalej, wykonywane są pewne testy aby upewnić się, czy nie ma żadnych niezatwierdzonych zmian, które nie są ignorowane.
Następnie część katalogu źródeł specyficzna dla systemu kontroli wersji jest kopiowana do katalogu tymczasowego. Przed tym katalog tymczasowy jest pakowany do archiwum tar i wykonywane są różne czynności porządkowe, aby zaoszczędzić miejsce.
The file debian/source/format should always exist and indicate the desired source format. For backwards compatibility, format "1.0" is assumed when the file doesn't exist but you should not rely on this: at some point in the future dpkg-source will be modified to fail when that file doesn't exist.
Powodem jest to, że format "1.0" nie jest już formatem rekomendowanym; należy z reguły wybrać któregoś z nowszych formatów ("3.0 (quilt)", "3.0 (native)"), lecz dpkg-source nie zrobi tego automatycznie za opiekuna. Aby wciąż używać starego formatu, należy wyrażnie tego zażądać umieszczając "1.0" w debian/source/format.
Jeżeli używa się formatu "1.0" źródeł, to zwykle złym pomysłem jest bezpośrednie modyfikowanie plików macierzystych, jako że na końcu zmiany będą ukryte i w większości nieudokumentowane w pliku .diff.gz. Zamiast tego należy przechowywać swe zmiany jako łatki w katalogu debian i aplikować je w trakcie budowania. Aby zapobiec temu złożonemu procesowi, można również użyć formatu "3.0 (quilt), który oferuje to natywnie.
Zmiany w źródłach macierzystych są zwykle przechowywane w postaci łatek, lecz nie wszystkie zmiany mogą być tak reprezentowane: łatki mogą zmieniać zawartość jedynie plików tekstowym. Jeśli próbuje się zastąpić plik czymś innego typu (np. zastąpić czysty plik dowiązaniem symbolicznym lub katalogiem), otrzyma się ten komunikat o błędzie.
Puste pliki nie mogą być tworzone za pomocą plików łatek. W związku z tym, ta zmiana nie jest przechowywana w pakiecie źródłowym, a to ostrzeżenie o tym przypomina.
Patch files do not record permissions of files and thus executable permissions are not stored in the source package. This warning reminds you of that fact.
Pliki łatek nie przechowują informacji o uprawnieniach plików i w związku z tym, zmodyfikowane uprawnienia nie są przechowywane w pakiecie źródłowym. To ostrzeżenie przypomina o tym fakcie.
Plik ten zawiera w pojedynczej linii określenie formatu, który powinien zostać użyty do zbudowania pakietu źródłowego (dostępne formaty opisane są wyżej). Niedozwolone są początkowe i końcowe znaki spacji.
Plik ten zawiera listę plików binarnych (po jednym w każdej linii), które powinny być zawarte w archiwum debian. Początkowe i końcowe znaki spacji są usuwane. Linie rozpoczynające się od "#" są traktowane jak komentarze i są pomijane, puste linie są ignorowane.
Plik zawiera listę długich opcji, które powinny być automatycznie dodawane na początku zestawu opcji wiersza polecenia wywołania dpkg-source -b lub dpkg-source --print-format. Do tego pliku świetnie nadają się opcje takie jak --compression i --compression-level.
Każda opcja powinna być umieszczona w osobnym wierszu. Puste wiersze i wiersze zaczynające się od znaku "#" są ignorowane. Początkowe "--" powinno być usunięte, niedozwolone są opcje któtkie. Wokół symbolu "=" dozwolone są opcjonalne spacje, a wokół wartości dozwolone są opcjonalne cudzysłowy. Oto przykład takiego pliku:
# let dpkg-source create a debian.tar.bz2 with maximal compression
compression = "bzip2"
compression-level = 9
# use debian/patches/debian-changes as automatic patch
single-debian-patch
# ignore changes on config.{sub,guess}
extend-diff-ignore = "(^|/)(config.sub|config.guess)$"
Uwaga: opcje format nie są akceptowane w tym pliku, należy w zamian używać debian/source/format.
Dokładnie jak debian/source/options z tym wyjątkiem, że plik nie jest dołączany do wygenerowanego pakietu źródłowego. Może być przydatny aby przechować preferencje opiekuna lub repozytorium VCS, gdzie pakiet źródłowy jest zarządzany.
Tekst w dowolnej postaci, który zostanie umieszczony na górze łatki wygenerowanej automatycznie, w formacie "2.0" lub "3.0 (quilt). local-patch-header nie jest dołączone w generowanym pakiecie źródłowym, natomiast patch-header jest.
This file lists all patches that have to be applied (in the given order) on top of the upstream source package. Leading and trailing spaces are stripped. Lines starting with "#" are comments and are skipped. Empty lines are ignored. Remaining lines start with a patch filename (relative to the debian/patches/ directory) up to the first space character or the end of line. Optional quilt options can follow up to the end of line or the first "#" preceded by one or more spaces (which marks the start of a comment up to the end of line).
Punkt, w którym następuje nadpisywanie pól w porównaniu do pewnych standardowych ustawień pól wyjściowych jest dość zagmatwany.
Piotr Roszatycki <dexter@debian.org>, 1999
Bartosz Feński <fenio@debian.org>, 2004-2005
Robert Luberda <robert@debian.org>, 2006-2008
Wiktor Wandachowicz <siryes@gmail.com>, 2008
Michał Kułach <michal.kulach@gmail.com>, 2012