dpkg-source(1) | dpkg suite | dpkg-source(1) |
dpkg-source - Verktyg för att manipulera Debiankällkodspaket (.dsc)
dpkg-source [flagga...] åtgärd
dpkg-source packar och packar upp Debiankällkodsarkiv.
Inga av dessa kommandon tillåter att flera flaggor kombineras till ett, och de tillåter inte att värdet på en flagga anges som ett separat argument.
dpkg-source läser namnen på de övriga filer som ingår i källkodspaketet från styrfilen; de antas vara i samma katalog som .dsc-filen.
Filerna i det extraherade paketet kommer att ha behörighet och ägare satta till det som kunde förväntas om filerna och katalogerna bara hade skapats - kataloger och körbara filer kommer ha 0777 och enkla filer 0666, båda modifierade av uppackarens umask; om föräldrakatalogen är setgid kommer de extraherade katalogerna också att vara det, och samtliga filer och kataloger kommer ärva dess gruppägarskap.
Om källkodspaketet använder ett annat format än standardformatet (gäller för närvarande alla format förutom ”1.0”), kommer dess namn att lagras som debian/source/format så att det används som standard när källkodspaketet byggs på nytt.
dpkg-source kommer bygga källkodspaketet med det första format som fungerar från denna lista i denna ordning: formatet som anges med kommandoradsflaggan --format, formatet som anges i debian/source/format, ”1.0”. Standardvärdet ”1.0” rekommenderas ej och kommer att tas bort en gång i framtiden, du bör alltid dokumentera det önskade källkodsformatet i debian/source/format. Se avsnittet "FORMAT PÅ KÄLLKODSPAKET" för en utförlig beskrivning av de olika källkodspaketformaten.
-i ensamt aktiverar inställningen, med ett standardvärde (bibehåller modifieringar till standarduttrycket som gjorts med tidigare användning av --extend-diff-ignore) som filtrerar ut styrfiler och kataloger från de flesta vanliga versionshanteringssystem, säkerhetskopior, växlingsfiler och Libtool-byggutdatakataloger. Endast ett reguljärt kan vara aktivt, om du anger flera -i-flaggor är det den sista som gäller.
Flaggan är mycket användbar för att utesluta extrafiler som kommer med i diffen, till exempel om du underhåller din källkod i ett versionshanteringssystem och vill använda en utcheckning för att bygga ett källkodspaket utan att ta med de ytterligare filer och det normalt innehåller (t.ex CVS/, .cvsignore, .svn/). Det förvalda reguljära uttrycket täcker redan in många av dessa, men om du ändrar det, kom ihåg att det som standard kan träffa alla delar av filnamnet. Så, om du träffa bara början av ett filnamn eller hela filnamn måste du själv lägga till de förankringar som är nödvändiga (t.ex ”(^|/)”, ”($|/)”).
-I ensamt lägger till standard --exclude-flaggor som filtrerar ut styrfiler och kataloger från de flesta vanliga versionshanteringssystemen, säkerhetskopior, växlingsfiler och Libtool-byggutdatakataloger.
Observera: Även om de används till liknande ändamål, så har -i och -I väldigt olika syntax och semantik. -i kan endast anges en gång och tar ett perl-kompatibelt reguljärt uttryck, vilket matchas mot den kompletta relativa sökvägen för varje fil. -I kan anges flera gånger och tar ett filnamnssökmänster med skaljokertecken. Mönstret matchas mot den kompletta relativa sökvägen, men även individuellt mot varje komponent i sökvägen. Den exakta semantiken för tar:s --exclude-flagga är något komplicerad, se <https://www.gnu.org/software/tar/manual/tar.html#wildcards> för fullständig dokumentation.
Förvalt reguljärt uttryck och sökmönster för de bägge flaggorna kan ses i utdata för --help-kommandot.
Om du inte vet vilket källkodspaketformat du ska använda, bör du antagligen välja antingen ”3.0 (quilt)” eller ”3.0 (native)”. "/wiki.debian.org/Projects/DebSrc3.0" in Se https: för information om hur dessa format sätts i produktion i Debian.
Ett källkodspaket i detta format består antingen av en .orig.tar.gz, förbunden med en .diff.gz, eller en ensam .tar.gz (i så fall anses paketet vara eget, ”native”). Original-tarbollen kan också valfritt åtföljas av en friliggande uppströmssignatur .orig.tar.gz.asc, uppackning stöds sedan dpkg 1.18.5.
Uppackning
Att packa upp ett Debianeget paket innebär att packa upp den ensamma tarbollen i målkatalogen. Att packa upp ett icke-eget paket innebär att först packa upp .orig.tar.gz-filen och sedan genom att tillämpa patchen som finns i .diff.gz-filen. Tidsstämplarna för alla patchade filer nollställs till den tidpunkt då källkodspaketet extraherades (vilket undviker tidsstämpelförskjutningar som kunde leda till problem när autogenererade filer patchas). Diffen kan skapa nya filer (hela debian-katalogen skapas på det sättet), men kan inte ta bort filer (tomma filer kommer lämnas kvar) och kan inte skapa eller ändra symboliska länkar.
Bygga
Att bygga ett Debianeget paket innebär bara att skapa en ensam tarboll med källkodskatalogen. Att bygga ett icke-eget paket innefattar att extrahera original-tarbollen i en separat ”.orig”-katalog och skapa .diff.gz-filen på nytt genom att jämföra källkodspaketets katalog med .orig-katalogen.
Byggflaggor (med --build):
Om ett andra argument som inte är en flagga anges ska det vara namnet på originalkällkodskatalogen eller -tarfilen eller den tomma strängen om paketet är Debianspecifikt och därför inte har några debianiserings-diffar. Om inget andra argument anges kommer dpkg-source att leta efter originalkällkodstarfilen paket_uppströmsversion.orig.tar.gz eller originalkällkodskatalogen paket.orig beroende på -sX-flaggorna.
-sa, -sp, -sk, -su och -sr skriver inte över befintliga tar-filer och kataloger. Om det önskas bör -sA, -sP, -sK, -sU och -sR anges i stället.
Extraheringsflaggor (med --extract):
Oavsett kommer ett befintligt källkodsträd att tas bort.
Alla -sX-flaggor är ömsesidigt uteslutande. Om du anger mer än en kommer endast den sista att användas.
Uppackning stöds sedan dpkg 1.13.9, byggning stöds sedan dpkg 1.14.8. Även känt som wig&pen. Detta format rekommenderas inte för allmän användning, formatet ”3.0 (quilt)” ersätter det. Wig&pen var den första specifikationen av en ny generation av källkodspaketformat.
Beteendet för detta format är detsamma som för ”3.0 (quilt)”-formatet, förutom att det inte använder en explicit förteckning patchar. Alla filer i debian/patches/ som motsvarar det Perl-reguljära uttrycket [\w-]+ måste vara giltiga patchar: de appliceras när paketet packas upp.
När du bygger ett nytt källkodspaket kommer eventuella ändringar på uppströmskällkoden att lagras i en patch som kallas zz_debian-diff-auto.
Stöds sedan dpkg 1.14.17. Detta format är en utökning av det egna paketformatet som anges av 1.0-formatet. Det stöder alla komprimeringsmetoder och kommer att som standard ignorera alla VCS-specifika filer och kataloger, samt många temporärfiler (se standardvärdet som är knutet till flaggan -i i texten för --help).
Stöds sedan dpkg 1.14.17. Ett källkodspaket i detta format innehåller åtminstone en original-tarboll (.orig.tar.ext, där ext kan vara gz, bz2, lzma eller xz) och en Debiantarboll (.debian.tar.ext). Den kan även innehålla ytterligare original-tarbollar (.orig-komponent.tar.ext). komponent kan endast innehålla alfanumeriska (”a-zA-Z0-9”) tecken och bindestreck (”-”). Varje original-tarboll kan också valfritt åtföljas av en friliggande uppströmssignatur (.orig.tar.ext.asc och .orig-komponent.tar.ext.asc), uppackning stöds sedan dpkg 1.17.20, byggning stöds sedan dpkg 1.18.5.
Uppackning
Huvud-originaltarbollen packas upp först, därefter packas alla ytterligare originaltarbollar upp i underkataloger med namn efter komponent-delen i sitt filnamn (eventuella redan befintliga kataloger ersätts). Debian-tarbollen packas sedan upp ovanpå källkodskatalogen efter att en redan befintlig debian-katalog har tagits bort först. Observera att debian-tarbollen måste bestå av en debian-underkatalog, men att den även kan innehålla binärfiler utanför den katalogen (se flaggan --include-binaries).
Alla patchar listade i debian/patches/återförsäljare.series eller debian/patches/series tillämpas sedan, där återförsäljare är namnet på den aktuella återförsäljaren skrivet med små bokstäver, eller debian om ingen har angivits. Om den förstnämnda filen används och den sistnämnda inte existerar (eller är en symbolisk länk), kommer den senare att ersättas av en symbolisk länk till den första. Tanken är att göra det enklare att använda quilt till att hantera patchuppsättningen. Återförsäljarspecifika series-filer är tänkta att göra det möjligt att serialisera flera utvecklingsgrenar baserade på återförsäljaren, på ett deklarativt sätt, istället för att öppet koda den här hanteringen i debian/rules. Detta är speciellt användbart när källkoden behöver patchas olika eftersom de rörda filerna inte stöder inbyggd villkorlig tillämpning. Observera att, även om dpkg-source korrekt tolkar series-filer som använder explicita flaggor till patch-programmet (lagrade på kommandoraden efter patch-filnamnet och ett eller flera blanksteg), så ignoreras dessa flaggor och det förväntar sig att patchar kan tillämpas med flaggan -p1 till patch. Det kommer därför visa en varning sådana flaggor upptäcks, och bygget kommer troligen att misslyckas.
Oberbera att lintian(1) kommer skapa ovillkorliga varningar när återförsäljarserier används på grund av en kontroversiell Debian-specifik dom, vilket inte bör påverka extern användning; för att tysta dessa kan dpkg:s lintianprofil användas genom att ge parametern ”--profile dpkg” till lintian(1).
Tidsstämplarna för alla patchade filer nollställs till den tidpunkt då källkodspaketet extraherades (vilket undviker tidsstämpelförskjutningar som kunde leda till problem när autogenererade filer patchas).
Till skillnad mot quilt:s originalbeteende förväntas det att patchar kan appliceras utan någon ”fuzz”. När så inte är fallet bör du uppdatera patcharna med hjälp av quilt, om inte kommer dpkg-source rapportera ett felmeddelande när det försöker tillämpa dem.
Patchar kan även ta bort filer, på samma sätt som quilt normalt fungerar.
Filen .pc/applied-patchers skapas om patchar tillämpades vid uppackningen.
Bygga
Alla original-tarbollar som finns i den aktuella katalogen packas upp i en temporär katalog med samma logik som i uppackningen, debian-katalogen kopieras över i den temporära katalogen och alla patchar, förutom den automatiska patchen (debian-changesversion eller debian-changes, beroende på --single-debian-patch) tillämpas. Temporärkatalogen jämförs därefter mot källkodskatalogen. Om diffen inte är tom misslyckas bygget, såvida inte --single-debian-patch eller --auto-commit använts, i vilket fall diffen lagras i den automatiska patchen. Om den automatiska patchen skapas/tas bort, läggs den till/tas bort från series-filen och från quilt-metadata.
Eventuella ändringar på binärfiler kan inte representeras i en diff och kommer därmed att leda till ett felmeddelande, såvida inte paketansvariga medvetet väljer att inkludera den modifierade binärfilen i debian-tarbollen (genom att lista den i debian/source/include-binaries). Byggningen kommer även att misslyckas om binärfiler upptäcks i debian-underkatalogen, såvida de inte har tillåtits i debian/source/include-binaries.
Den uppdaterade debiankatalogen, och listan över modifierade binärer, används sedan för att skapa debian-tarbollen.
Den automatiskt genererade diff-filen innehåller inte ändringar för VCS-specifika filer eller för många temporära filer (se standardvärdet som är knutet till flaggan -i i texten för --help). Detta gäller speciellt katalogen .pc som används av quilt, katalogen kommer att ignoreras när den automatiska patchen skapas.
Observera: dpkg-source --before-build (och --build) ser till att alla patchar som anges i seriefilen tillämpas så att paketbygget alltid har alla patchar tillämpade. Detta görs genom att hitta alla icke-tillämpade patchar (som anges i filen series men inte i .pc/applied-patches), och om den första patchen i listan kan tillämpas utan fel kommer samtliga att tillämpas. Flaggan --no-preparation kan användas för att slå av detta beteende.
Lagra ändringar
Det är oftast nyttigt att sända med patchfil efter att ett bygge där filen skapats i förväg misslyckas, och att patchfilen därför ska tas bort efter integrering. Observera även att ändringarna som finns i patchfilen redan måste ha applicerats på trädet och att filerna som modifieras av patchen inte får innehålla ytterligare ej beskrivna ändringar.
Om genereringen av patchar upptäcker ändringar i binärfiler kommer de automatiskt att läggas in i debian/source/include-binaries så att de dyker upp i debian-tarbollen (precis som dpkg-source --include-binaries --build skulle gjort).
Byggflaggor
Extraheringsflaggor
Stöds sedan dpkg 1.14.17. Detta formatet är speciellt. Det anger inte ett riktigt källkodspaketformat, utan kan användas för att skapa källkodspaket med godtyckliga filer.
Byggflaggor
Alla argument som inte är flaggor tas som filer som ska integreras i det skapade källkodspaketet. De måste finnas, och helst i aktuell katalog. Åtminstone en fil måste anges.
Stöds sedan dpkg 1.14.17. Formatet är experimentellt.
Ett källkodspaket i detta format består av en ensam bunt (”bundle”) från ett git-arkiv .git, vilket innehåller paketets källkod. Filen .gitshallow, som innehåller revisioner för grunda git-kloner, kan även förekomma.
Uppackning
Bunten klonas som ett git-arkiv till målkatalogen. Om filen gitshallow finns installeras den som .git/shallow i det klonade git-arkivet.
Observera att det nya arkivet som standard kommer att ha samma gren utcheckad som den som var utcheckad i det ursprungliga källkodsträdet. (Typiskt ”main”, men kan vara vad som helst.) Eventuella andra grenar kommer också att vara tillgängliga, under remotes/origin/.
Bygga
Innan uppackningen fortsätter kommer en del tester att utföras för att se till att vi inte har några ej ignorerade ej incheckade ändringar.
git-bundle(1) används för att generera en bunt från git-arkivet. Som standard tas alla grenar och taggar i arkivet med i bunten.
Byggflaggor
Stöds sedan dpkg 1.14.17. Detta format är experimentellt. Det genererar en ensam tarboll som innehåller bzr-arkivet.
Uppackning
Tarbollen packas upp och bzr används sedan för att hämta ut den aktuella grenen.
Bygga
Innan uppackningen fortsätter kommer en del tester att utföras för att se till att vi inte har några ej ignorerade ej incheckade ändringar.
De VCS-specifika delarna av källkodskatalogen kommer därefter att kopieras över till en temporär katalog. Innan den temporära katalogen packas i en tarboll utförs viss städning för att spara plats.
Filen debian/source/format bör alltid finnas och ange det önskade källkodsformatet. För bakåtkompatibilitet antar formatet ”1.0” om filen inte finns, men du bör inte förlita dig på detta: vid någon punkt i framtiden kommer dpkg-source att justeras så att det misslyckas om filen inte finns.
Resonemanget bakom detta är att formatet ”1.0” inte längre är det rekommenderade formatet, du bör normalt välja ett av de nyare formaten (”3.0 (quilt)”, ”3.0 (native)”), men dpkg-source gör inte detta automatiskt åt dig. Om du vill fortsätta använda det gamla formatet bör du ange det explicit genom att skriva ”1.0” i debian/source/format.
När du använder källkodsformatet ”1.0” är det oftast inte någon bra idé att modifiera uppströmsfiler direkt eftersom ändringarna döljs och i huvudsak är odokumenterade i diff.gz-filen. Du bör istället spara dina ändringar som patchar i debian-katalogen och applicera dem när paketet ska byggas. För att undvika den här komplexiteten kan du även använda formatet ”3.0 (quilt)” som låter dig göra det här automatiskt.
Ändringar på uppströmsfiler sparas normalt som patchfiler, men inte alla ändringar kan representeras med patchar: de kan endast ändra innehållet i vanliga textfiler. Om du försöker ersätta en fil med något som har en annan typ (till exempel ersätta en vanlig fil med en symbolisk länk eller en katalog) får du det här felmeddelandet.
Tomma filer kan inte skapas med patchfiler. Ändringen kommer därmed inte att sparas i källkodspaketet och du får en varning om det.
Patchfiler beskriver inte läget på filer och exekveringsbehörigheter sparas därmed inte i källkodspaketet. Den här varningen påminner dig om detta.
Patchfiler beskriver inte läget på filer och ändrade lägen sparas inte i källkodspaketet. Den här varningen påminner dig om detta.
Since dpkg 1.18.11.
Filen innehåller på en ensam rad det format som ska användas för att bygga källkodspaketet (möjliga format beskrivs ovan). Varken ledande eller avslutande blanksteg tillåts.
Filen innehåller en förteckning med sökvägsnamn för binärfiler (en per rad) relativt till källkods-rotkatalogen som ska tas med i debian-tarbollen. Inledande och avslutande blanksteg tas bort. Rader som börjar med ”#” är kommentarer och hoppas över. Tomma rader ignoreras.
Filen innehåller en lista över långa flaggor som automatiskt sätts in före kommandoradsflaggorna som anges i ett anrop til dpkg-source --build eller dpkg-source --print-format. Flaggor som --compression och --compression-level är passande att lägga in i den här filen.
Ange varje flagga på en egen rad. Tomma rader och rader som börjar med ”#” ignoreras. Inledande ”--” ska tas bort och korta flaggor är inte tillåtna. Blanksteg tillåts runt ”=”-tecknet och citattecken tillåts runt värdet. Här är ett exempel på en sådan fil:
# låt dpkg-source skapa en debian.tar.bz2 med maximal komprimering compression = "bzip2" compression-level = 9 # använd debian/patches/debian-changes som en automatisk patch single-debian-patch # ignorera ändringar i config.{sub,guess} extend-diff-ignore = "(^|/)(config.sub|config.guess)$" B<Observera>: B<format>-flaggor tillåts inte i den här filen, du bör använda filen B<debian/source/format> istället.
Precis som debian/source/options förutom att filen inte inkluderas i det genererade källkodspaketet. Det kan vara användbart för att spara ett val som gäller för paketansvariga eller VCS-systemet källkodspaketet hanteras i.
Friformstext som läggs in på toppen av den automatiskt genererade patchen i formaten ”2.0” eller ”3.0 (quilt)”. local-patch-header tas inte med i det genererade källkodspaketet medan patch-header tas med.
Listar alla patchar som måste tillämpas (i den givna ordningen) ovanpå uppströmskällkodspaketet. Inledande och avslutande blanksteg tas bort. återförsäljare är namnet på aktuell återförsäljare skrivet med små bokstäver. Om den återförsäljarspecifika series-filen inte existerar, kommer den återförsäljarlösa series-filen att användas istället. Rader som börjar med ”#” är kommentarer och ignoreras. Tomma rader ignoreras. De rader som är kvar inleds med filnamnet på en patchfil (relativt till debian/patches/-katalogen) upp till det första blankstegstecknet eller slutet på raden. Valfria flaggor till quilt kan följa fram till slutet av raden eller det första ”#” som följer på ett eller flera blanksteg (vilket anger början på en kommentar fram till slutet av raden).
Att utforska obetrodda källkodspaket eller att packa upp dem till en mellanstation kan anses som en säkerhetsgräns, och eventuellt brytande av gränser som uppstår av dessa operationer bör anses som en säkerhetssårbarhet. Men hantering av obetrodda källkodspaket bör inte tas lätt på, eftersom den exponerade ytan innehåller eventuella stödda komprimeringskommandon, kommandon för att hantera specifika dataformat (såsom tar(1) eller patch(1)) i tillägg till själva källkodformatet och styrfilerna. Att utföra dessa operationer på obetrodda data som root avråds å det bestämdaste från.
Bygga källkodspaket bör endast utföras över betrodda data.
Tidpunkten på fältöverstyrning inträffar jämfört med inställning av vissa standardutdatafält är ganska förvirrad.
deb-src-control(5), deb-changelog(5), deb-substvars(5), dsc(5).
Peter Krefting och Daniel Nylander.
2024-09-26 | 1.22.6 |