programmer.sgml 120 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371
  1. <!doctype debiandoc system [
  2. <!entity % manuals-version-def system "manuals-version">
  3. %manuals-version-def;
  4. ]>
  5. <!--
  6. Debian Linux dpkg package installation tool.
  7. programmers' manual.
  8. Copyright (C)1996 Ian Jackson; released under the terms of the GNU
  9. General Public License, version 2 or (at your option) any later.
  10. -->
  11. <book>
  12. <title><prgn/dpkg/ programmers' manual
  13. <author>Ian Jackson <email/ijackson@gnu.ai.mit.edu/
  14. <version>version &manuals-version; (dpkg &dpkg-version;), <date>
  15. <abstract>
  16. This manual describes the technical aspects of creating Debian binary
  17. and source packages. It also documents the interface between
  18. <prgn/dselect/ and its access method scripts. It does not deal with
  19. the Debian Project policy requirements, and it assumes familiarity
  20. with <prgn/dpkg/'s functions from the system administrator's
  21. perspective.
  22. <copyright>Copyright &copy;1996 Ian Jackson.
  23. <p>
  24. This manual is free software; you may redistribute it and/or modify it
  25. under the terms of the GNU General Public License as published by the
  26. Free Software Foundation; either version 2, or (at your option) any
  27. later version.
  28. <p>
  29. This is distributed in the hope that it will be useful, but
  30. <em>without any warranty</em>; without even the implied warranty of
  31. merchantability or fitness for a particular purpose. See the GNU
  32. General Public License for more details.
  33. <p>
  34. You should have received a copy of the GNU General Public License with
  35. your Debian GNU/Linux system, in <tt>/usr/doc/copyright/GPL</tt>, or
  36. with the <prgn/dpkg/ source package as the file <tt>COPYING</tt>. If
  37. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  38. Cambridge, MA 02139, USA.
  39. <toc sect>
  40. <!-- Describes the technical interface between a package and dpkg.
  41. How to safely put shared libraries in a package. Details of dpkg's
  42. handling of individual files. Sections on when to use which feature
  43. (eg Replaces vs. Replaces/Conflicts vs. update-alternatives
  44. vs. diversions) Cross-references to the policy document (see below)
  45. where appropriate. Description of the interface between dselect and
  46. its access methods. Hints on where to start with a new package (ie,
  47. the hello package). What to do about file aliasing.
  48. file aliasing
  49. Manpages are required for: update-rc.d, diversions,
  50. update-alternatives, install-info in a package.
  51. -->
  52. <chapt id="scope">Introduction and scope of this manual
  53. <p>
  54. <prgn/dpkg/ is a suite of programs for creating binary package files
  55. and installing and removing them on Unix systems.<footnote><prgn/dpkg/
  56. is targetted primarily at Debian GNU/Linux, but may work on or be
  57. ported to other systems.</footnote>
  58. <p>
  59. The binary packages are designed for the management of installed
  60. executable programs (usually compiled binaries) and their associated
  61. data, though source code examples and documentation are provided as
  62. part of some packages.
  63. <p>
  64. This manual describes the technical aspects of creating Debian binary
  65. packages (<tt/.deb/ files). It documents the behaviour of the
  66. package management programs <prgn/dpkg/, <prgn/dselect/ et al. and and the
  67. way they interact with packages.
  68. <p>
  69. It also documents the interaction between <prgn/dselect/'s core and the
  70. access method scripts it uses to actually install the selected
  71. packages, and describes how to create a new access method.
  72. <p>
  73. This manual does not go into detail about the options and usage of the
  74. package building and installation tools. It should therefore be read
  75. in conjuction with those programs' manpages.
  76. <p>
  77. The utility programs which are provided with <prgn/dpkg/ for managing
  78. various system configuration and similar issues, such as
  79. <prgn/update-rc.d/ and <prgn/install-info/, are not described in
  80. detail here - please see their manpages.
  81. <p>
  82. It does <em/not/ describe the policy requirements imposed on Debian
  83. packages, such as the permissions on files and directories,
  84. documentation requirements, upload procedure, and so on. You should
  85. see the Debian packaging policy manual for these details. (Many of
  86. them will probably turn out to be helpful even if you don't plan to
  87. upload your package and make it available as part of the
  88. distribution.)
  89. <p>
  90. It is assumed that the reader is reasonably familiar with the
  91. <prgn/dpkg/ System Administrators' manual. Unfortunately this manual
  92. does not yet exist.
  93. <p>
  94. The Debian version of the FSF's GNU hello program is provided as an
  95. example for people wishing to create Debian packages.
  96. <p>
  97. <em>Note that this document is still a draft!</em>
  98. <chapt id="binarypkg">Binary packages
  99. <p>
  100. The binary package has two main sections. The first part consists of
  101. various control information files and scripts used by <prgn/dpkg/ when
  102. installing and removing. See <ref id="controlarea">.
  103. <p>
  104. The second part is an archive (currently a <prgn/tar/ archive)
  105. containing files and directories to be installed.
  106. <p>
  107. In the future binary packages may also contain other components, such
  108. as checksums and digital signatures.
  109. <sect id="bincreating">Creating package files - <prgn/dpkg-deb/
  110. <p>
  111. All manipulation of binary package files is done by <prgn/dpkg-deb/;
  112. it's the only program that has knowledge of the format.
  113. (<prgn/dpkg-deb/ may be invoked by calling <prgn/dpkg/, as <prgn/dpkg/ will
  114. spot that the options requested are appropriate to <prgn/dpkg-deb/ and
  115. invoke that instead with the same arguments.)
  116. <p>
  117. In order to create a binary package you must make a directory tree
  118. which contains all the files and directories you want to have in the
  119. filesystem data part of the package. In Debian-format source packages
  120. this directory is usually <tt>debian/tmp</tt>, relative to the top of
  121. the package's source tree.
  122. <p>
  123. They should have the locations (relative to the root of the directory
  124. tree you're constructing) ownerships and permissions which you want
  125. them to have on the system when they are installed.
  126. <p>
  127. With current versions of <prgn/dpkg/ the uid/username and gid/groupname
  128. mappings for the users and groups being used should be the same on the
  129. system where the package is built and the one where it is installed.
  130. <p>
  131. You need to add one special directory to the root of the miniature
  132. filesystem tree you're creating: <prgn/DEBIAN/. It should contain the
  133. control information files, notably the binary package control file
  134. (see <ref id="controlfile">).
  135. <p>
  136. The <prgn/DEBIAN/ directory will not appear in the filesystem archive of
  137. the package, and so won't be installed by <prgn/dpkg/ when the package
  138. is installed.
  139. <p>
  140. When you've prepared the package, you should invoke:
  141. <example>
  142. dpkg --build <var/directory/
  143. </example>
  144. <p>
  145. This will build the package in <tt/<var/directory/.deb/.
  146. (<prgn/dpkg/ knows that <tt/--build/ is a <prgn/dpkg-deb/ option, so it
  147. invokes <prgn/dpkg-deb/ with the same arguments to build the package.)
  148. <p>
  149. See the manpage <manref name="dpkg-deb" section=8> for details of how
  150. to examine the contents of this newly-created file. You may find the
  151. output of following commands enlightening:
  152. <example>
  153. dpkg-deb --info <var/filename/.deb
  154. dpkg-deb --contents <var/filename/.deb
  155. </example>
  156. <sect id="controlarea">Package control information files
  157. <p>
  158. The control information portion of a binary package is a collection of
  159. files with names known to <prgn/dpkg/. It will treat the contents of
  160. these files specially - some of them contain information used by
  161. <prgn/dpkg/ when installing or removing the package; others are scripts
  162. which the package maintainer wants <prgn/dpkg/ to run.
  163. <p>
  164. It is possible to put other files in the package control area, but
  165. this is not generally a good idea (though they will largely be
  166. ignored).
  167. <p>
  168. Here is a brief list of the control info files supported by <prgn/dpkg/
  169. and a summary of what they're used for.
  170. <p>
  171. <taglist>
  172. <tag><tt/control/
  173. <item>
  174. This is the key description file used by <prgn/dpkg/. It specifies the
  175. package's name and version, gives its description for the user, states
  176. its relationships with other packages, and so forth.
  177. See <ref id="controlfile">.
  178. <p>
  179. It is usually generated automatically from information in the source
  180. package by the <prgn/dpkg-gencontrol/ program, and with assistance
  181. from <prgn/dpkg-shlibdeps/. See <ref id="sourcetools">.
  182. <tag><tt/postinst/, <tt/preinst/, <tt/postrm/, <tt/prerm/
  183. <item>
  184. These are exectuable files (usually scripts) which <prgn/dpkg/ runs
  185. during installation, upgrade and removal of packages. They allow the
  186. package to deal with matters which are particular to that package or
  187. require more complicated processing than that provided by <prgn/dpkg/.
  188. Details of when and how they are called are in
  189. <ref id="maintainerscripts">.
  190. <p>
  191. It is very important to make these scripts itempotent.<footnote>That
  192. means that if it runs successfully or fails and then you call it again
  193. it doesn't bomb out, but just ensures that everything is the way it
  194. ought to be.</footnote> This is so that if an error occurs, the user
  195. interrupts <prgn/dpkg/ or some other unforeseen circumstance happens you
  196. don't leave the user with a badly-broken package.
  197. <p>
  198. The maintainer scripts are guaranteed to run with a controlling
  199. terminal and can interact with the user. If they need to prompt for
  200. passwords, do full-screen interaction or something similar you should
  201. do these things to and from <tt>/dev/tty</>, since <prgn/dpkg/ will at
  202. some point redirect scripts' standard input and output so that it can
  203. log the installation process. Likewise, because these scripts may be
  204. executed with standard output redirected into a pipe for logging
  205. purposes, Perl scripts should set unbuffered output by setting
  206. <tt/$|=1/ so that the output is printed immediately rather than being
  207. buffered.
  208. <p>
  209. Each script should return a zero exit status for success, or a nonzero
  210. one for failure.
  211. <tag><tt/conffiles/
  212. <item>
  213. This file contains a list of configuration files which are to be
  214. handled automatically by <prgn/dpkg/ (see <ref id="conffiles">). Note
  215. that not necessarily every configuration file should be listed here.
  216. <tag><tt/shlibs/
  217. <item>
  218. This file contains a list of the shared libraries supplied by the
  219. package, with dependency details for each. This is used by
  220. <prgn/dpkg-shlibdeps/ when it determines what dependencies are
  221. required in a package control file.
  222. <p>
  223. Each line is of the form:
  224. <example>
  225. <var/library-name/ <var/version-or-soname/ <var/dependencies .../
  226. </example>
  227. <p>
  228. <var/library-name/ is the name of the shared library, for example
  229. <tt/libc5/.
  230. <p>
  231. <var/version-or-soname/ is the soname of the library - ie, the thing
  232. that must exactly match for the library to be recognised by
  233. <prgn/ld.so/. Usually this is major version number of the library.
  234. <p>
  235. <var/dependencies/ has the same syntax as a dependency field in a
  236. binary package control file. It should give details of which
  237. package(s) are required to satisfy a binary built against the version
  238. of the library contained in the package. See <ref id="depsyntax">.
  239. <p>
  240. For example, if the package <tt/foo/ contains <tt/libfoo.so.1.2.3/,
  241. where the soname of the library is <tt/libfoo.so.1/, and the first
  242. version of the package which contained a minor number of at least
  243. <tt/2.3/ was <var/1.2.3-1/, then the package's <var/shlibs/ could
  244. say:
  245. <example>
  246. libfoo 1 foo (>= 1.2.3-1)
  247. </example>
  248. <p>
  249. The version-specific dependency is to avoid warnings from <prgn/ld.so/
  250. about using older shared libraries with newer binaries.
  251. </taglist>
  252. <sect id="controlfile">The main control information file: <tt/control/
  253. <p>
  254. The most important control information file used by <prgn/dpkg/ when it
  255. installs a package is <tt/control/. It contains all the package's
  256. `vital statistics'.
  257. <p>
  258. The binary package control files of packages built from Debian sources
  259. are made by a special tool, <prgn/dpkg-gencontrol/, which reads
  260. <tt>debian/control</> and <tt>debian/changelog</> to find the
  261. information it needs. See <ref id="sourcepkg"> for more details.
  262. <p>
  263. The fields in binary package control files are:
  264. <list compact>
  265. <item><qref id="f-Package"><tt/Package/</> (mandatory)
  266. <item><qref id="versions"><tt/Version/</> (mandatory)
  267. <item><qref id="f-Architecture"><tt/Architecture/</>
  268. (mandatory)<footnote>This field should appear in all packages, though
  269. <prgn/dpkg/ doesn't require it yet so that old packages can still be
  270. installed.</footnote>
  271. <item><qref id="relationships"><tt/Depends/, <tt/Provides/ et al.</>
  272. <item><qref id="f-Essential"><tt/Essential/</>
  273. <item><qref id="f-Maintainer"><tt/Maintainer/</>
  274. <item><qref id="f-classification"><tt/Section/, <tt/Priority/</>
  275. <item><qref id="f-Source"><tt/Source/</>
  276. <item><qref id="descriptions"><tt/Description/</>
  277. <item><qref id="f-Installed-Size"><tt/Installed-Size/</>
  278. </list>
  279. <p>
  280. A description of the syntax of control files and the purpose of these
  281. fields is available in <ref id="controlfields">.
  282. <chapt id="sourcepkg">Source packages
  283. <p>
  284. The Debian binary packages in the distribution are generated from
  285. Debian sources, which are in a special format to assist the easy and
  286. automatic building of binaries.
  287. <p>
  288. There was a previous version of the Debian source format, which is now
  289. being phased out. Instructions for converting an old-style package
  290. are given in the Debian policy manual.
  291. <sect id="sourcetools">Tools for processing source packages
  292. <p>
  293. Various tools are provided for manipulating source packages; they pack
  294. and unpack sources and help build of binary packages and help manage
  295. the distribution of new versions.
  296. <p>
  297. They are introduced and typical uses described here; see <manref
  298. name=dpkg-source section=1> for full documentation about their
  299. arguments and operation.
  300. <p>
  301. For examples of how to construct a Debian source package, and how to
  302. use those utilities that are used by Debian source packages, please
  303. see the <prgn/hello/ example package.
  304. <sect1><prgn/dpkg-source/ - packs and unpacks Debian source packages
  305. <p>
  306. This program is frequently used by hand, and is also called from
  307. package-independent automated building scripts such as
  308. <prgn/dpkg-buildpackage/.
  309. <p>
  310. To unpack a package it is typically invoked with
  311. <example>
  312. dpkg-source -x <var>.../path/to/filename</>.dsc
  313. </example>
  314. with the <tt/<var/filename/.tar.gz/ and
  315. <tt/<var/filename/.diff.gz/ (if applicable) in the same directory. It
  316. unpacks into <tt/<var/package/-<var/version//, and if applicable
  317. <tt/<var/package/-<var/version/.orig/, in the current directory.
  318. <p>
  319. To create a packed source archive it is typically invoked:
  320. <example>
  321. dpkg-source -b <var/package/-<var/version/
  322. </example>
  323. This will create the <tt/.dsc/, <tt/.tar.gz/ and <tt/.diff.gz/ (if
  324. appropriate) in the current directory. <prgn/dpkg-source/ does not
  325. clean the source tree first - this must be done separately if it is
  326. required.
  327. <p>
  328. See also <ref id="sourcearchives">.
  329. <sect1><prgn/dpkg-buildpackage/ - overall package-building control
  330. script
  331. <p>
  332. <prgn/dpkg-buildpackage/ is a script which invokes <prgn/dpkg-source/,
  333. the <tt>debian/rules</> targets <prgn/clean/, <prgn/build/ and
  334. <prgn/binary/, <prgn/dpkg-genchanges/ and <prgn/pgp/ to build a signed
  335. source and binary package upload.
  336. <p>
  337. It is usually invoked by hand from the top level of the built or
  338. unbuilt source directory. It may be invoked with no arguments; useful
  339. arguments include:
  340. <taglist compact>
  341. <tag><tt/-uc/, <tt/-us/
  342. <item>Do not PGP-sign the <tt/.changes/ file or the source package
  343. <tt/.dsc/ file, respectively.
  344. <tag><tt/-p<var/pgp-command//
  345. <item>Invoke <var/pgp-command/ instead of finding <tt/pgp/ on the
  346. <prgn/PATH/. <var/pgp-command/ must behave just like <prgn/pgp/.
  347. <tag><tt/-r<var/root-command//
  348. <item>When root privilege is required, invoke the command
  349. <var/root-command/. <var/root-command/ should invoke its first
  350. argument as a command, from the <prgn/PATH/ if necessary, and pass its
  351. second and subsequent arguments to the command it calls. If no
  352. <var/root-command/ is supplied then <var/dpkg-buildpackage/ will take
  353. no special action to gain root privilege, so that for most packages it
  354. will have to be invoked as root to start with.
  355. <tag><tt/-b/, <tt/-B/
  356. <item>Two types of binary-only build and upload - see <manref
  357. name=dpkg-source section=1>.
  358. </taglist>
  359. <sect1><prgn/dpkg-gencontrol/ - generates binary package control files
  360. <p>
  361. This program is usually called from <tt>debian/rules</> (see <ref
  362. id="sourcetree">) in the top level of the source tree.
  363. <p>
  364. This is usually done just before the files and directories in the
  365. temporary directory tree where the package is being built have their
  366. permissions and ownerships set and the package is constructed using
  367. <prgn/dpkg-deb/<footnote>This is so that the control file which is
  368. produced has the right permissions</footnote>.
  369. <p>
  370. <prgn/dpkg-gencontrol/ must be called after all the files which are to
  371. go into the package have been placed in the temporary build directory,
  372. so that its calculation of the installed size of a package is correct.
  373. <p>
  374. It is also necessary for <prgn/dpkg-gencontrol/ to be run after
  375. <prgn/dpkg-shlibdeps/ so that the variable substitutions created by
  376. <prgn/dpkg-shlibdeps/ in <tt>debian/substvars</> are available.
  377. <p>
  378. For a package which generates only one binary package, and which
  379. builds it in <tt>debian/tmp</> relative to the top of the source
  380. package, it is usually sufficient to call:
  381. <example>
  382. dpkg-gencontrol
  383. </example>
  384. <p>
  385. Sources which build several binaries will typically need something
  386. like:
  387. <example>
  388. dpkg-gencontrol -Pdebian/tmp-<var/pkg/ -p<var/package/
  389. </example>
  390. The <tt/-P/ tells <prgn/dpkg-gencontrol/ that the package is being
  391. built in a non-default directory, and the <tt/-p/ tells it which
  392. package's control file should be generated.
  393. <p>
  394. <prgn/dpkg-gencontrol/ also adds information to the list of files in
  395. <tt>debian/files</>, for the benefit of (for example) a future
  396. invocation of <prgn/dpkg-genchanges/.
  397. <sect1><prgn/dpkg-shlibdeps/ - calculates shared library dependencies
  398. <p>
  399. This program is usually called from <tt>debian/rules</> just before
  400. <prgn/dpkg-gencontrol/ (see <ref id="sourcetree">), in the top level
  401. of the source tree.
  402. <p>
  403. Its arguments are executables<footnote>They may be specified either
  404. in the locations in the source tree where they are created or in the
  405. locations in the temporary build tree where they are installed prior
  406. to binary package creation.</footnote> for which shared library
  407. dependencies should be included in the binary package's control file.
  408. <p>
  409. If some of the executable(s) shared libraries should only warrant a
  410. <tt/Recommends/ or <tt/Suggests/, or if some warrant a
  411. <tt/Pre-Depends/, this can be achieved by using the
  412. <tt/-d<var/dependency-field// option before those executable(s).
  413. (Each <tt/-d/ option takes effect until the next <tt/-d/.)
  414. <p>
  415. <prgn/dpkg-shlibdeps/ does not directly cause the output control file
  416. to be modified. Instead by default it adds to the
  417. <tt>debian/substvars</> file variable settings like
  418. <tt/shlibs:Depends/. These variable settings must be referenced in
  419. dependency fields in the appropriate per-binary-package sections of
  420. the source control file.
  421. <p>
  422. For example, the <prgn/procps/ package generates two kinds of
  423. binaries, simple C binaries like <prgn/ps/ which require a
  424. predependency and full-screen ncurses binaries like <prgn/top/ which
  425. require only a recommendation. It can say in its <tt>debian/rules</>:
  426. <example>
  427. dpkg-shlibdeps -dPre-Depends ps -dRecommends top
  428. </example>
  429. and then in its main control file <tt>debian/control</>:
  430. <example>
  431. <var/.../
  432. Package: procps
  433. Pre-Depends: ${shlibs:Pre-Depends}
  434. Recommends: ${shlibs:Recommends}
  435. <var/.../
  436. </example>
  437. <p>
  438. Sources which produce several binary packages with different shared
  439. library dependency requirements can use the <tt/-p<var/varnameprefix//
  440. option to override the default <tt/shlib:/ prefix (one invocation of
  441. <prgn/dpkg-shlibdeps/ per setting of this option). They can thus
  442. produce several sets of dependency variables, each of the form
  443. <tt/<var/varnameprefix/:<var/dependencyfield//, which can be referred
  444. to in the appropriate parts of the binary package control files.
  445. <sect1><prgn/dpkg-distaddfile/ - adds a file to <tt>debian/files</>
  446. <p>
  447. Some packages' uploads need to include files other than the source and
  448. binary package files.
  449. <p>
  450. <prgn/dpkg-distaddfile/ adds a file to the <tt>debian/files</> file so
  451. that it will be included in the <tt/.changes/ file when
  452. <prgn/dpkg-genchanges/ is run.
  453. <p>
  454. It is usually invoked from the <prgn/binary/ target of
  455. <tt>debian/rules</>:
  456. <example>
  457. dpkg-distaddfile <var/filename/ <var/section/ <var/priority/
  458. </example>
  459. The <var/filename/ is relative to the directory where
  460. <prgn/dpkg-genchanges/ will expect to find it - this is usually the
  461. directory above the top level of the source tree. The
  462. <tt>debian/rules</> target should put the file there just before or
  463. just after calling <prgn/dpkg-distaddfile/.
  464. <p>
  465. The <var/section/ and <var/priority/ are passed unchanged into the
  466. resulting <tt/.changes/ file. See <ref id="f-classification">.
  467. <sect1><prgn/dpkg-genchanges/ - generates a <tt/.changes/ upload
  468. control file
  469. <p>
  470. This program is usually called by package-independent automatic
  471. building scripts such as <prgn/dpkg-buildpackage/, but it may also be
  472. called by hand.
  473. <p>
  474. It is usually called in the top level of a built source tree, and when
  475. invoked with no arguments will print out a straightforward
  476. <tt/.changes/ file based on the information in the source package's
  477. changelog and control file and the binary and source packages which
  478. should have been built.
  479. <sect1><prgn/dpkg-parsechangelog/ - produces parsed representation of
  480. a changelog
  481. <p>
  482. This program is used internally by <prgn/dpkg-source/ et al. It may
  483. also occasionally be useful in <tt>debian/rules</> and elsewhere. It
  484. parses a changelog, <tt>debian/changelog</> by default, and prints a
  485. control-file format representation of the information in it to
  486. standard output.
  487. <sect id="sourcetree">The Debianised source tree
  488. <p>
  489. The source archive scheme described later is intended to allow a
  490. Debianised source tree with some associated control information to be
  491. reproduced and transported easily. The Debianised source tree is a
  492. version of the original program with certain files added for the
  493. benefit of the Debianisation process, and with any other changes
  494. required made to the rest of the source code and installation scripts.
  495. <p>
  496. The extra files created for Debian are in the subdirectory <tt/debian/
  497. of the top level of the Debianised source tree. They are described
  498. below.
  499. <sect1><tt>debian/rules</tt> - the main building script
  500. <p>
  501. This file is an executable makefile, and contains the package-specific
  502. recipies for compiling the package and building binary package(s) out
  503. of the source.
  504. <p>
  505. It must start with the line <tt>#!/usr/bin/make -f</tt>, so that it
  506. can be invoked by saying its name rather than invoking <prgn/make/
  507. explicitly.
  508. <p>
  509. The targets which are required to be present are:
  510. <taglist>
  511. <tag/<tt/build//
  512. <item>
  513. This should perform all non-interactive configuration and compilation
  514. of the package. If a package has an interactive pre-build
  515. configuration routine, the Debianised source package should be built
  516. after this has taken place, so that it can be built without rerunning
  517. the configuration.
  518. <p>
  519. For some packages, notably ones where the same source tree is compiled
  520. in different ways to produce two binary packages, the <prgn/build/
  521. target does not make much sense. For these packages it is good enough
  522. to provide two (or more) targets (<tt/build-a/ and <tt/build-b/ or
  523. whatever) for each of the ways of building the package, and a
  524. <prgn/build/ target that does nothing. The <prgn/binary/ target will have
  525. to build the package in each of the possible ways and make the binary
  526. package out of each.
  527. <p>
  528. The <prgn/build/ target must not do anything that might require root
  529. privilege.
  530. <p>
  531. The <prgn/build/ target may need to run <prgn/clean/ first - see below.
  532. <p>
  533. When a package has a configuration routine that takes a long time, or
  534. when the makefiles are poorly designed, or when <prgn/build/ needs to
  535. run <prgn/clean/ first, it is a good idea to <tt/touch build/ when the
  536. build process is complete. This will ensure that if <tt>debian/rules
  537. build</tt> is run again it will not rebuild the whole program.
  538. <tag/<tt/binary/, <tt/binary-arch/, <tt/binary-indep/
  539. <item>
  540. The <prgn/binary/ target should be all that is necessary for the user
  541. to build the binary package. It is split into two parts:
  542. <prgn/binary-arch/ builds the packages' output files which are
  543. specific to a particular architecture, and <prgn/binary-indep/
  544. builds those which are not.
  545. <p>
  546. <prgn/binary/ should usually be a target with no commands which simply
  547. depends on <prgn/binary-arch/ and <prgn/binary-indep/.
  548. <p>
  549. Both <prgn/binary-*/ targets should depend on the <prgn/build/ target,
  550. above, so that the package is built if it has not been already. It
  551. should then create the relevant binary package(s), using
  552. <prgn/dpkg-gencontrol/ to make their control files and <prgn/dpkg-deb/
  553. to build them and place them in the parent of the top level directory.
  554. <p>
  555. If one of the <prgn/binary-*/ targets has nothing to do (this will be
  556. always be the case if the source generates only a single binary
  557. package, whether architecture-dependent or not) it <em/must/ still
  558. exist, but should always succeed.
  559. <p>
  560. <ref id="binarypkg"> describes how to construct binary packages.
  561. <p>
  562. The <prgn/binary/ targets must be invoked as root.
  563. <tag/<tt/clean//
  564. <item>
  565. This should undo any effects that the <prgn/build/ and <prgn/binary/
  566. targets may have had, except that it should leave alone any output
  567. files created in the parent directory by a run of <prgn/binary/.
  568. <p>
  569. If a <prgn/build/ file is touched at the end of the <prgn/build/ target,
  570. as suggested above, it must be removed as the first thing that
  571. <prgn/clean/ does, so that running <prgn/build/ again after an interrupted
  572. <prgn/clean/ doesn't think that everything is already done.
  573. <p>
  574. The <prgn/clean/ target must be invoked as root if <prgn/binary/ has
  575. been invoked since the last <prgn/clean/, or if <prgn/build/ has been
  576. invoked as root (since <prgn/build/ may create directories, for
  577. example).
  578. <tag/<tt/get-orig-source//
  579. <item>
  580. This target fetches the most recent version of the original source
  581. package from a canonical archive site (via FTP or WWW, for example),
  582. does any necessary rearrangement to turn it into the original source
  583. tarfile format described below, and leaves it in the current directory.
  584. <p>
  585. This target may be invoked in any directory, and should take care to
  586. clean up any temporary files it may have left.
  587. <p>
  588. This target is optional, but providing it if possible is a good idea.
  589. </taglist>
  590. The <prgn/build/, <prgn/binary/ and <prgn/clean/ targets must be
  591. invoked with a current directory of the package's top-level
  592. directory.
  593. <p>
  594. Additional targets may exist in <tt>debian/rules</tt>, either as
  595. published or undocumented interfaces or for the package's internal
  596. use.
  597. <sect1><tt>debian/control</tt>
  598. <p>
  599. This file contains version-independent details about the source
  600. package and about the binary packages it creates.
  601. <p>
  602. It is a series of sets of control fields, each syntactically similar
  603. to a binary package control file. The sets are separated by one or
  604. more blank lines. The first set is information about the source
  605. package in general; each subsequent set describes one binary package
  606. that the source tree builds.
  607. <p>
  608. The syntax and semantics of the fields are described below in
  609. <ref id="controlfields">.
  610. <p>
  611. The general (binary-package-independent) fields are:
  612. <list compact>
  613. <item><qref id="f-Source"><tt/Source/</> (mandatory)
  614. <item><qref id="f-Maintainer"><tt/Maintainer/</>
  615. <item><qref id="f-classification"><tt/Section/ and <tt/Priority/</>
  616. (classification, mandatory)
  617. <item><qref id="f-Standards-Version"><tt/Standards-Version/</>
  618. </list>
  619. <p>
  620. The per-binary-package fields are:
  621. <list compact>
  622. <item><qref id="f-Package"><tt/Package/</> (mandatory)
  623. <item><qref id="f-Architecture"><tt/Architecture/</> (mandatory)
  624. <item><qref id="descriptions"><tt/Description/</>
  625. <item><qref id="f-classification"><tt/Section/ and <tt/Priority/</> (classification)
  626. <item><qref id="f-Essential"><tt/Essential/</>
  627. <item><qref id="relationships"><tt/Depends/ et al.</> (package interrelationships)
  628. </list>
  629. <p>
  630. These fields are used by <prgn/dpkg-gencontrol/ to generate control
  631. files for binary packages (see below), by <prgn/dpkg-genchanges/ to
  632. generate the <tt/.changes/ file to accompany the upload, and by
  633. <prgn/dpkg-source/ when it creates the <tt/.dsc/ source control file as
  634. part of a source archive.
  635. <p>
  636. The fields here may contain variable references - their values will be
  637. substituted by <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ or
  638. <prgn/dpkg-source/ when they generate output control files. See <ref
  639. id="srcsubstvars"> for details.
  640. <p>
  641. <sect2>User-defined fields
  642. <p>
  643. Additional user-defined fields may be added to the source package
  644. control file. Such fields will be ignored, and not copied to (for
  645. example) binary or source package control files or upload control
  646. files.
  647. <p>
  648. If you wish to add additional unsupported fields to these output files
  649. you should use the mechanism described here.
  650. <p>
  651. Fields in the main source control information file with names starting
  652. <tt/X/, followed by one or more of the letters <tt/BCS/ and a hyphen
  653. <tt/-/, will be copied to the output files. Only the part of the
  654. field name after the hyphen will be used in the output file. Where
  655. the letter <tt/B/ is used the field will appear in binary package
  656. control files, where the letter <tt/S/ is used in source package
  657. control files and where <tt/C/ is used in upload control
  658. (<tt/.changes/) files.
  659. <p>
  660. For example, if the main source information control file contains the
  661. field
  662. <example>
  663. XBS-Comment: I stand between the candle and the star.
  664. </example>
  665. then the binary and source package control files will contain the
  666. field
  667. <example>
  668. Comment: I stand between the candle and the star.
  669. </example>
  670. <sect1 id="dpkgchangelog"><tt>debian/changelog</>
  671. <p>
  672. This file records the changes to the Debian-specific parts of the
  673. package<footnote>Though there is nothing stopping an author who is
  674. also the Debian maintainer from using it for all their changes, it
  675. will have to be renamed if the Debian and upstream maintainers become
  676. different people.</footnote>.
  677. <p>
  678. It has a special format which allows the package building tools to
  679. discover which version of the package is being built and find out
  680. other release-specific information.
  681. <p>
  682. That format is a series of entries like this:
  683. <example>
  684. <var/package/ (<var/version/) <var/distribution(s)/; urgency=<var/urgency/
  685. * <var/change details/
  686. <var/more change details/
  687. * <var/even more change details/
  688. -- <var/maintainer name and email address/ <var/date/
  689. </example>
  690. <p>
  691. <var/package/ and <var/version/ are the source package name and
  692. version number. <var/distribution(s)/ lists the distributions where
  693. this version should be installed when it is uploaded - it is copied to
  694. the <tt/Distribution/ field in the <tt/.changes/ file. See <ref
  695. id="f-Distribution">.
  696. <p>
  697. <var/urgency/ is the value for the <tt/Urgency/ field in the
  698. <tt/.changes/ file for the upload. See <ref id="f-Urgency">. It is
  699. not possible to specify an urgency containing commas; commas are used
  700. to separate <tt/<var/keyword/=<var/value// settings in the <prgn/dpkg/
  701. changelog format (though there is currently only one useful
  702. <var/keyword/, <tt/urgency/).
  703. <p>
  704. The change details may in fact be any series of lines starting with at
  705. least two spaces, but conventionally each change starts with an
  706. asterisk and a separating space and continuation lines are indented so
  707. as to bring them in line with the start of the text above. Blank
  708. lines may be used here to separate groups of changes, if desired.
  709. <p>
  710. The maintainer name and email address should <em/not/ necessarily be
  711. those of the usual package maintainer. They should be the details of
  712. the person doing <em/this/ version. The information here will be
  713. copied to the <tt/.changes/ file, and then later used to send an
  714. acknowledgement when the upload has been installed.
  715. <p>
  716. The <var/date/ should be in RFC822 format<footnote>This is generated
  717. by the <prgn/822-date/ program.</footnote>; it should include the
  718. timezone specified numerically, with the timezone name or abbreviation
  719. optionally present as a comment.
  720. <p>
  721. The first `title' line with the package name should start at the left
  722. hand margin; the `trailer' line with the maintainer and date details
  723. should be preceded by exactly one space. The maintainer details and
  724. the date must be separated by exactly two spaces.
  725. <p>
  726. An Emacs mode for editing this format is available: it is called
  727. <tt/debian-changelog-mode/. You can have this mode selected
  728. automatically when you edit a Debian changelog by adding a local
  729. variables clause to the end of the changelog.
  730. <sect2>Defining alternative changelog formats
  731. <p>
  732. It is possible to use a different format to the standard one, by
  733. providing a parser for the format you wish to use.
  734. <p>
  735. In order to have <tt/dpkg-parsechangelog/ run your parser, you must
  736. include a line within the last 40 lines of your file matching the Perl
  737. regular expression:
  738. <tt>\schangelog-format:\s+([0-9a-z]+)\W</tt>
  739. The part in parentheses should be the name of the format. For
  740. example, you might say:
  741. <example>
  742. @@@ changelog-format: joebloggs @@@
  743. </example>
  744. Changelog format names are non-empty strings of alphanumerics.
  745. <p>
  746. If such a line exists then <tt/dpkg-parsechangelog/ will look for the
  747. parser as <tt>/usr/lib/dpkg/parsechangelog/<var/format-name/</> or
  748. <tt>/usr/local/lib/dpkg/parsechangelog/<var/format-name/</>; it is an
  749. error for it not to find it, or for it not to be an executable
  750. program. The default changelog format is <tt/dpkg/, and a parser for
  751. it is provided with the <tt/dpkg/ package.
  752. <p>
  753. The parser will be invoked with the changelog open on standard input
  754. at the start of the file. It should read the file (it may seek if it
  755. wishes) to determine the information required and return the parsed
  756. information to standard output in the form of a series of control
  757. fields in the standard format. By default it should return
  758. information about only the most recent version in the changelog; it
  759. should accept a <tt/-v<var/version// option to return changes
  760. information from all versions present <em/strictly after/
  761. <var/version/, and it should then be an error for <var/version/ not to
  762. be present in the changelog.
  763. <p>
  764. The fields are:
  765. <list compact>
  766. <item><qref id="f-Source"><tt/Source/</>
  767. <item><qref id="versions"><tt/Version/</> (mandatory)
  768. <item><qref id="f-Distribution"><tt/Distribution/</> (mandatory)
  769. <item><qref id="f-Urgency"><tt/Urgency/</> (mandatory)
  770. <item><qref id="f-Maintainer"><tt/Maintainer/</> (mandatory)
  771. <item><qref id="f-Date"><tt/Date/</>
  772. <item><qref id="f-Changes"><tt/Changes/</> (mandatory)
  773. </list>
  774. <p>
  775. If several versions are being returned (due to the use of <tt/-v/),
  776. the urgency value should be of the highest urgency code listed at the
  777. start of any of the versions requested followed by the concatenated
  778. (space-separated) comments from all the versions requested; the
  779. maintainer, version, distribution and date should always be from the
  780. most recent version.
  781. <p>
  782. For the format of the <tt/Changes/ field see <ref id="f-Changes">.
  783. <p>
  784. If the changelog format which is being parsed always or almost always
  785. leaves a blank line between individual change notes these blank lines
  786. should be stripped out, so as to make the resulting output compact.
  787. <p>
  788. If the changelog format does not contain date or package name
  789. information this information should be omitted from the output. The
  790. parser should not attempt to synthesise it or find it from other
  791. sources.
  792. <p>
  793. If the changelog does not have the expected format the parser should
  794. exit with a nonzero exit status, rather than trying to muddle through
  795. and possibly generating incorrect output.
  796. <p>
  797. A changelog parser may not interact with the user at all.
  798. <sect1 id="srcsubstvars"><tt>debian/substvars</> and variable substitutions
  799. <p>
  800. When <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ and
  801. <prgn/dpkg-source/ generate control files they do variable
  802. substitutions on their output just before writing it. Variable
  803. substitutions have the form <tt/${<var/variable-name/}/. The optional
  804. file <tt>debian/substvars</> contains variable substitutions to be
  805. used; variables can also be set directly from <tt>debian/rules</>
  806. using the <tt/-V/ option to the source packaging commands, and certain
  807. predefined variables are available.
  808. <p>
  809. The is usually generated and modified dynamically by
  810. <tt>debian/rules</> targets; in this case it must be removed by the
  811. <prgn/clean/ target.
  812. <p>
  813. See <manref name=dpkg-source section=1> for full details about source
  814. variable substitutions, including the format of
  815. <tt>debian/substvars</>.
  816. <sect1><tt>debian/files</>
  817. <p>
  818. This file is not a permanent part of the source tree; it is used while
  819. building packages to record which files are being generated.
  820. <prgn/dpkg-genchanges/ uses it when it generates a <tt/.changes/ file.
  821. <p>
  822. It should not exist in a shipped source package, and so it (and any
  823. backup files or temporary files such as
  824. <tt/files.new/<footnote><tt/files.new/ is used as a temporary file by
  825. <prgn/dpkg-gencontrol/ and <prgn/dpkg-distaddfile/ - they write a new
  826. version of <tt/files/ here before renaming it, to avoid leaving a
  827. corrupted copy if an error occurs</footnote>) should be removed by the
  828. <prgn/clean/ target. It may also be wise to ensure a fresh start by
  829. emptying or removing it at the start of the <prgn/binary/ target.
  830. <p>
  831. <prgn/dpkg-gencontrol/ adds an entry to this file for the <tt/.deb/
  832. file that will be created by <prgn/dpkg-deb/ from the control file
  833. that it generates, so for most packages all that needs to be done with
  834. this file is to delete it in <prgn/clean/.
  835. <p>
  836. If a package upload includes files besides the source package and any
  837. binary packages whose control files were made with
  838. <prgn/dpkg-gencontrol/ then they should be placed in the parent of the
  839. package's top-level directory and <prgn/dpkg-distaddfile/ should be
  840. called to add the file to the list in <tt>debian/files</>.
  841. <sect1><tt>debian/tmp</>
  842. <p>
  843. This is the canonical temporary location for the construction of
  844. binary packages by the <prgn/binary/ target. The directory <tt/tmp/
  845. serves as the root of the filesystem tree as it is being constructed
  846. (for example, by using the package's upstream makefiles install
  847. targets and redirecting the output there), and it also contains the
  848. <tt/DEBIAN/ subdirectory. See <ref id="bincreating">.
  849. <p>
  850. If several binary packages are generated from the same source tree it
  851. is usual to use several <tt>debian/tmp<var/something/</> directories,
  852. for example <tt/tmp-a/ or <tt/tmp-doc/.
  853. <p>
  854. Whatever <tt>tmp</> directories are created and used by <prgn/binary/
  855. must of course be removed by the <prgn/clean/ target.
  856. <sect id="sourcearchives">Source packages as archives
  857. <p>
  858. As it exists on the FTP site, a Debian source package consists of
  859. three related files. You must have the right versions of all three to
  860. be able to use them.
  861. <p>
  862. <taglist>
  863. <tag/Debian source control file - <tt/.dsc//
  864. <item>
  865. This file contains a series of fields, identified and separated just
  866. like the fields in the control file of a binary package. The fields
  867. are listed below; their syntax is described above, in
  868. <ref id="controlfields">.
  869. <list compact>
  870. <item><qref id="f-Source"><tt/Source/</>
  871. <item><qref id="versions"><tt/Version/</>
  872. <item><qref id="f-Maintainer"><tt/Maintainer/</>
  873. <item><qref id="f-Binary"><tt/Binary/</>
  874. <item><qref id="f-Architecture"><tt/Architecture/</>
  875. <item><qref id="f-Standards-Version"><tt/Standards-Version/</>
  876. <item><qref id="f-Files"><tt/Files/</>
  877. </list>
  878. <p>
  879. The source package control file is generated by <prgn/dpkg-source/
  880. when it builds the source archive, from other files in the source
  881. package, described above. When unpacking it is checked against the
  882. files and directories in the other parts of the source package, as
  883. described below.
  884. <tag/Original source archive - <tt/<var/package/_<var/upstream-version/.orig.tar.gz//
  885. <item>
  886. This is a compressed (with <tt/gzip -9/) <prgn/tar/ file containing
  887. the source code from the upstream authors of the program. The tarfile
  888. unpacks into a directory
  889. <tt/<var/package/-<var/upstream-version/.orig/, and does not contain
  890. files anywhere other than in there or in its subdirectories.
  891. <tag/Debianisation diff - <tt/<var/package/_<var/version-revision/.diff.gz//
  892. <item>
  893. This is a unified context diff (<tt/diff -u/) giving the changes which
  894. are required to turn the original source into the Debian source.
  895. These changes may only include editing and creating plain files. The
  896. permissions of files, the targets of symbolic links and the
  897. characteristics of special files or pipes may not be changed and no
  898. files may be removed or renamed.
  899. <p>
  900. All the directories in the diff must exist, except the <tt/debian/
  901. subdirectory of the top of the source tree, which will be created by
  902. <prgn/dpkg-source/ if necessary when unpacking.
  903. <p>
  904. The <prgn/dpkg-source/ program will automatically make the
  905. <tt>debian/rules</tt> file executable (see below).
  906. </taglist>
  907. <p>
  908. If there is no original source code - for example, if the package is
  909. specially prepared for Debian or the Debian maintainer is the same as
  910. the upstream maintainer - the format is slightly different: then there
  911. is no diff, and the tarfile is named
  912. <tt/<var/package/_<var/version/.tar.gz</> and contains a directory
  913. <tt/<var/package/-<var/version/</>.
  914. <sect>Unpacking a Debian source package without <prgn/dpkg-source/
  915. <p>
  916. <tt/dpkg-source -x/ is the recommended way to unpack a Debian source
  917. package. However, if it is not available it is possible to unpack a
  918. Debian source archive as follows:
  919. <enumlist compact>
  920. <item>Untar the tarfile, which will create a <tt/.orig/ directory.
  921. <item>Rename the <tt/.orig/ directory to
  922. <tt/<var/package/-<var/version//.
  923. <item>Create the subdirectory <tt/debian/ at the top of the source
  924. tree.
  925. <item>Apply the diff using <tt/patch -p0/.
  926. <item>Untar the tarfile again if you want a copy of the original
  927. source code alongside the Debianised version.
  928. </enumlist>
  929. <p>
  930. It is not possible to generate a valid Debian source archive without
  931. using <prgn/dpkg-source/. In particular, attempting to use
  932. <prgn/diff/ directly to generate the <tt/.diff.gz/ file will not work.
  933. <sect1>Restrictions on objects in source packages
  934. <p>
  935. The source package may not contain any hard links<footnote>This is not
  936. currently detected when building source packages, but only when
  937. extracting them.</footnote><footnote>Hard links may be permitted at
  938. some point in the future, but would require a fair amount of
  939. work.</footnote>, device special files, sockets or setuid or setgid
  940. files.<footnote>Setgid directories are allowed.</footnote>
  941. <p>
  942. The source packaging tools manage the changes between the original and
  943. Debianised source using <prgn/diff/ and <prgn/patch/. Turning the
  944. original source tree as included in the <tt/.orig.tar.gz/ into the
  945. debianised source must not involve any changes which cannot be handled
  946. by these tools. Problematic changes which cause <prgn/dpkg-source/ to
  947. halt with an error when building the source package are:
  948. <list compact>
  949. <item>Adding or removing symbolic links, sockets or pipes.
  950. <item>Changing the targets of symbolic links.
  951. <item>Creating directories, other than <tt/debian/.
  952. <item>Changes to the contents of binary files.
  953. </list>
  954. Changes which cause <prgn/dpkg-source/ to print a warning but continue
  955. anyway are:
  956. <list compact>
  957. <item>Removing files, directories or symlinks. <footnote>Renaming a
  958. file is not treated specially - it is seen as the removal of the old
  959. file (which generates a warning, but is otherwise ignored), and the
  960. creation of the new one.</footnote>
  961. <item>Changed text files which are missing the usual final newline
  962. (either in the original or the modified source tree).
  963. </list>
  964. Changes which are not represented, but which are not detected by
  965. <prgn/dpkg-source/, are:
  966. <list compact>
  967. <item>Changing the permissions of files (other than
  968. <tt>debian/rules</>) and directories.
  969. </list>
  970. <p>
  971. The <tt/debian/ directory and <tt>debian/rules</> are handled
  972. specially by <prgn/dpkg-source/ - before applying the changes it will
  973. create the <tt/debian/ directory, and afterwards it will make
  974. <tt>debian/rules</> world-exectuable.
  975. <chapt id="controlfields">Control files and their fields
  976. <p>
  977. Many of the tools in the <prgn/dpkg/ suite manipulate data in a common
  978. format, known as control files. Binary and source packages have
  979. control data as do the <tt/.changes/ files which control the
  980. installation of uploaded files, and <prgn/dpkg/'s internal databases
  981. are in a similar format.
  982. <sect>Syntax of control files
  983. <p>
  984. A file consists of one or more paragraphs of fields. The paragraphs
  985. are separated by blank lines. Some control files only allow one
  986. paragraph; others allow several, in which case each paragraph often
  987. refers to a different package.
  988. <p>
  989. Each paragraph is a series of fields and values; each field consists
  990. of a name, followed by a colon and the value. It ends at the end of
  991. the line. Horizontal whitespace (spaces and tabs) may occur before or
  992. after the value and is ignored there; it is conventional to put a
  993. single space after the colon.
  994. <p>
  995. Some fields' values may span several lines; in this case each
  996. continuation line <em/must/ start with a space or tab. Any trailing
  997. spaces or tabs at the end of individual lines of a field value are
  998. ignored.
  999. <p>
  1000. Except where otherwise stated only a single line of data is allowed
  1001. and whitespace is not significant in a field body. Whitespace may
  1002. never appear inside names (of packages, architectures, files or
  1003. anything else), version numbers or in between the characters of
  1004. multi-character version relationships.
  1005. <p>
  1006. Field names are not case-sensitive, but it is usual to capitalise the
  1007. fields using mixed case as shown below.
  1008. <p>
  1009. Blank lines, or lines consisting only of spaces and tabs, are not
  1010. allowed within field values or between fields - that would mean a new
  1011. paragraph.
  1012. <p>
  1013. It is important to note that there are several fields which are
  1014. optional as far as <prgn/dpkg/ and the related tools are concerned,
  1015. but which must appear in every Debian package, or whose omission may
  1016. cause problems. When writing the control files for Debian packages
  1017. you <em/must/ read the Debian policy manual in conjuction with the
  1018. details below and the list of fields for the particular file.
  1019. <sect>List of fields
  1020. <sect1 id="f-Package"><tt/Package/
  1021. <p>
  1022. The name of the binary package. Package names consist of the
  1023. alphanumerics and <tt/+/ <tt/-/ <tt/./ (plus, minus and full
  1024. stop).<footnote>The characters <tt/@/ <tt/:/ <tt/=/ <tt/%/ <tt/_/ (at,
  1025. colon, equals, percent and underscore) used to be legal and are still
  1026. accepted when found in a package file, but may not be used in new
  1027. packages</footnote>
  1028. <p>
  1029. They must be at least two characters and must start with an
  1030. alphanumeric. In current versions of dpkg they are sort of
  1031. case-sensitive<footnote>This is a bug.</footnote>; use lowercase
  1032. package names unless the package you're building (or referring to, in
  1033. other fields) is already using uppercase.
  1034. <sect1 id="f-Version"><tt/Version/
  1035. <p>
  1036. This lists the source or binary package's version number - see <ref
  1037. id="versions">.
  1038. <sect1 id="f-Architecture"><tt/Architecture/
  1039. <p>
  1040. This is the architecture string; it is a single word for the CPU
  1041. architecture.
  1042. <p>
  1043. <prgn/dpkg/ will check the declared architecture of a binary package
  1044. against its own compiled-in value before it installs it.
  1045. <p>
  1046. The special value <tt/all/ indicates that the package is
  1047. architecture-independent.
  1048. <p>
  1049. In the main <tt>debian/control</> file in the source package, or in
  1050. the source package control file <tt/.dsc/, a list of architectures
  1051. (separated by spaces) is also allowed, as is the special value
  1052. <tt/any/. A list indicates that the source will build an
  1053. architecture-dependent package, and will only work correctly on the
  1054. listed architectures. <tt/any/ indicates that though the source
  1055. package isn't dependent on any particular architecture and should
  1056. compile fine on any one, the binary package(s) produced are not
  1057. architecture-independent but will instead be specific to whatever the
  1058. current build architecture is.
  1059. <p>
  1060. In a <tt/.changes/ file the <tt/Architecture/ field lists the
  1061. architecture(s) of the package(s) currently being uploaded. This will
  1062. be a list; if the source for the package is being uploaded too the
  1063. special entry <tt/source/ is also present.
  1064. <p>
  1065. The current build architecture can be determined using <tt/dpkg
  1066. --print-architecture/.<footnote>This actually invokes
  1067. <example>
  1068. gcc --print-libgcc-file-name
  1069. </example>
  1070. and parses and decomposes the output and looks the CPU type from the
  1071. GCC configuration in a table in <prgn/dpkg/. This is so that it will
  1072. work if you're cross-compiling.
  1073. </footnote>
  1074. This value is automatically used by <prgn/dpkg-gencontrol/ when
  1075. building the control file for a binary package for which the source
  1076. control information doesn't specify architecture <tt/all/.
  1077. <p>
  1078. There is a separate option, <tt/--print-installation-architecture/,
  1079. for finding out what architecture <prgn/dpkg/ is willing to install.
  1080. This information is also in the output of <tt/dpkg --version/.
  1081. <sect1 id="f-Maintainer"><tt/Maintainer/
  1082. <p>
  1083. The package maintainer's name and email address. The name should come
  1084. first, then the email address inside angle brackets <tt/&lt;&gt/ (in
  1085. RFC822 format).
  1086. <p>
  1087. If the maintainer's name contains a full stop then the whole field
  1088. will not work directly as an email address due to a misfeature in the
  1089. syntax specified in RFC822; a program using this field as an address
  1090. must check for this and correct the problem if necessary (for example
  1091. by putting the name in round brackets and moving it to the end, and
  1092. bringing the email address forward).
  1093. <p>
  1094. In a <tt/.changes/ file or parsed changelog data this contains the
  1095. name and email address of the person responsible for the particular
  1096. version in question - this may not be the package's usual maintainer.
  1097. <p>
  1098. This field is usually optional in as far as the <prgn/dpkg/ are
  1099. concerned, but its absence when building packages usually generates a
  1100. warning.
  1101. <sect1 id="f-Source"><tt/Source/
  1102. <p>
  1103. This field identifies the source package name.
  1104. <p>
  1105. In a main source control information or a <tt/.changes/ or <tt/.dsc/
  1106. file or parsed changelog data this may contain only the name of the
  1107. source package.
  1108. <p>
  1109. In the control file of a binary package (or in a <tt/Packages/ file)
  1110. it may be followed by a version number in parentheses.<footnote>It is
  1111. usual to leave a space after the package name if a version number is
  1112. specified.</footnote> This version number may be omitted (and is, by
  1113. <prgn/dpkg-gencontrol/) if it has the same value as the <tt/Version/
  1114. field of the binary package in question. The field itself may be
  1115. omitted from a binary package control file when the source package has
  1116. the same name and version as the binary package.
  1117. <sect1>Package interrelationship fields:
  1118. <tt/Depends/, <tt/Pre-Depends/, <tt/Recommends/
  1119. <tt/Suggests/, <tt/Conflicts/, <tt/Provides/, <tt/Replaces/
  1120. <p>
  1121. These fields describe the package's relationships with other packages.
  1122. Their syntax and semantics are described in <ref id="relationships">.
  1123. <sect1 id="f-Description"><tt/Description/
  1124. <p>
  1125. In a binary package <tt/Packages/ file or main source control file
  1126. this field contains a description of the binary package, in a special
  1127. format. See <ref id="descriptions"> for details.
  1128. <p>
  1129. In a <tt/.changes/ file it contains a summary of the descriptions for
  1130. the packages being uploaded. The part of the field before the first
  1131. newline is empty; thereafter each line has the name of a binary
  1132. package and the summary description line from that binary package.
  1133. Each line is indented by one space.
  1134. <sect1 id="f-Essential"><tt/Essential/
  1135. <p>
  1136. This is a boolean field which may occur only in the control file of a
  1137. binary package (or in the <tt/Packages/ file) or in a per-package
  1138. fields paragraph of a main source control data file.
  1139. <p>
  1140. If set to <tt/yes/ then <prgn/dpkg/ and <prgn/dselect/ will refuse to
  1141. remove the package (though it can be upgraded and/or replaced). The
  1142. other possible value is <tt/no/, which is the same as not having the
  1143. field at all.
  1144. <sect1 id="f-classification"><tt/Section/ and <tt/Priority/
  1145. <p>
  1146. These two fields classify the package. The <tt/Priority/ represents
  1147. how important that it is that the user have it installed; the
  1148. <tt/Section/ represents an application area into which the package has
  1149. been classified.
  1150. <p>
  1151. When they appear in the <tt>debian/control</> file these fields give
  1152. values for the section and priority subfields of the <tt/Files/ field
  1153. of the <tt/.changes/ file, and give defaults for the section and
  1154. priority of the binary packages.
  1155. <p>
  1156. The section and priority are represented, though not as separate
  1157. fields, in the information for each file in the <qref
  1158. id="f-Files"><tt/Files/</> field of a <tt/.changes/ file. The
  1159. section value in a <tt/.changes/ file is used to decide where to
  1160. install a package in the FTP archive.
  1161. <p>
  1162. These fields are not used by by <prgn/dpkg/ proper, but by
  1163. <prgn/dselect/ when it sorts packages and selects defaults. See the
  1164. Debian policy manual for the priorities in use and the criteria for
  1165. selecting the priority for a Debian package, and look at the Debian
  1166. FTP archive for a list of currently in-use priorities.
  1167. <p>
  1168. These fields may appear in binary package control files, in which case
  1169. they provide a default value in case the <tt/Packages/ files are
  1170. missing the information. <prgn/dpkg/ and <prgn/dselect/ will only use
  1171. the value from a <tt/.deb/ file if they have no other information; a
  1172. value listed in a <tt/Packages/ file will always take precedence. By
  1173. default <prgn/dpkg-genchanges/ does not include the section and
  1174. priority in the control file of a binary package - use the <tt/-isp/,
  1175. <tt/-is/ or <tt/-ip/ options to achieve this effect.
  1176. <sect1 id="f-Binary"><tt/Binary/
  1177. <p>
  1178. This field is a list of binary packages.
  1179. <p>
  1180. When it appears in the <tt/.dsc/ file it is the list of binary
  1181. packages which a source package can produce. It does not necessarily
  1182. produce all of these binary packages for every architecture. The
  1183. source control file doesn't contain details of which architectures are
  1184. appropriate for which of the binary packages.
  1185. <p>
  1186. When it appears in a <tt/.changes/ file it lists the names of the
  1187. binary packages actually being uploaded.
  1188. <p>
  1189. The syntax is a list of binary packages separated by
  1190. commas.<footnote>A space after each comma is conventional.</footnote>
  1191. Currently the packages must be separated using only spaces in the
  1192. <tt/.changes/ file.
  1193. <sect1 id="f-Installed-Size"><tt/Installed-Size/
  1194. <p>
  1195. This field appears in the control files of binary packages, and in the
  1196. <tt/Packages/ files. It gives the total amount of disk space
  1197. required to install the named package.
  1198. <p>
  1199. The disk space is represented in kilobytes as a simple decimal number.
  1200. <sect1 id="f-Files"><tt/Files/
  1201. <p>
  1202. This field contains a list of files with information about each one.
  1203. The exact information and syntax varies with the context. In all
  1204. cases the the part of the field contents on the same line as the field
  1205. name is empty. The remainder of the field is one line per file, each
  1206. line being indented by one space and containing a number of sub-fields
  1207. separated by spaces.
  1208. <p>
  1209. In the <tt/.dsc/ (Debian source control) file each line contains the
  1210. MD5 checksum, size and filename of the tarfile and (if applicable)
  1211. diff file which make up the remainder of the source
  1212. package.<footnote>That is, the parts which are not the
  1213. <tt/.dsc/.</footnote> The exact forms of the filenames are described
  1214. in <ref id="sourcearchives">.
  1215. <p>
  1216. In the <tt/.changes/ file this contains one line per file being
  1217. uploaded. Each line contains the MD5 checksum, size, section and
  1218. priority and the filename. The section and priority are the values of
  1219. the corresponding fields in the main source control file - see <ref
  1220. id="f-classification">. If no section or priority is specified then
  1221. <tt/-/ should be used, though section and priority values must be
  1222. specified for new packages to be installed properly.
  1223. <p>
  1224. The special value <tt/byhand/ for the section in a <tt/.changes/ file
  1225. indicates that the file in question is not an ordinary package file
  1226. and must by installed by hand by the distribution maintainers. If the
  1227. section is <tt/byhand/ the priority should be <tt/-/.
  1228. <p>
  1229. If a new Debian revision of a package is being shipped and no new
  1230. original source archive is being distributed the <tt/.dsc/ must still
  1231. contain the <tt/Files/ field entry for the original source archive
  1232. <tt/<var/package/-<var/upstream-version/.orig.tar.gz/, but the
  1233. <tt/.changes/ file should leave it out. In this case the original
  1234. source archive on the distribution site must match exactly,
  1235. byte-for-byte, the original source archive which was used to generate
  1236. the <tt/.dsc/ file and diff which are being uploaded.
  1237. <sect1 id="f-Standards-Version"><tt/Standards-Version/
  1238. <p>
  1239. The most recent version of the standards (the <prgn/dpkg/ programmers'
  1240. and policy manuals and associated texts) with which the package
  1241. complies. This is updated manually when editing the source package to
  1242. conform to newer standards; it can sometimes be used to tell when a
  1243. package needs attention.
  1244. <p>
  1245. Its format is the same as that of a version number except that no
  1246. epoch or Debian revision is allowed - see <ref id="versions">.
  1247. <sect1 id="f-Distribution"><tt/Distribution/
  1248. <p>
  1249. In a <tt/.changes/ file or parsed changelog output this contains the
  1250. (space-separated) name(s) of the distribution(s) where this version of
  1251. the package should be or was installed. Distribution names follow the
  1252. rules for package names. (See <ref id="f-Package">).
  1253. <p>
  1254. Current distribution values are <tt/stable/, <tt/unstable/,
  1255. <tt/contrib/, <tt/non-free/ and <tt/experimental/.
  1256. <sect1 id="f-Urgency"><tt/Urgency/
  1257. <p>
  1258. This is a description of how important it is to upgrade to this
  1259. version from previous ones. It consists of a single keyword usually
  1260. taking one of the values <tt/LOW/, <tt/MEDIUM/ or <tt/HIGH/) followed
  1261. by an optional commentary (separated by a space) which is usually in
  1262. parentheses. For example:
  1263. <example>
  1264. Urgency: LOW (HIGH for diversions users)
  1265. </example>
  1266. <p>
  1267. This field appears in the <tt/.changes/ file and in parsed changelogs;
  1268. its value appears as the value of the <tt/urgency/ attribute in a
  1269. <prgn/dpkg/-style changelog (see <ref id="dpkgchangelog">).
  1270. <p>
  1271. Urgency keywords are not case-sensitive.
  1272. <sect1 id="f-Date"><tt/Date/
  1273. <p>
  1274. In <tt/.changes/ files and parsed changelogs, this gives the date the
  1275. package was built or last edited.
  1276. <sect1 id="f-Format"><tt/Format/
  1277. <p>
  1278. This field occurs in <tt/.changes/ files, and specifies a format
  1279. revision for the file. The format described here is version <tt/1.5/.
  1280. The syntax of the format value is the same as that of a package
  1281. version number except that no epoch or Debian revision is allowed -
  1282. see <ref id="versions">.
  1283. <sect1 id="f-Changes"><tt/Changes/
  1284. <p>
  1285. In a <tt/.changes/ file or parsed changelog this field contains the
  1286. human-readable changes data, describing the differences between the
  1287. last version and the current one.
  1288. <p>
  1289. There should be nothing in this field before the first newline; all
  1290. the subsequent lines must be indented by at least one space; blank
  1291. lines must be represented by a line consiting only of a space and a
  1292. full stop.
  1293. <p>
  1294. Each version's change information should be preceded by a `title' line
  1295. giving at least the version, distribution(s) and urgency, in a
  1296. human-readable way.
  1297. <p>
  1298. If data from several versions is being returned the entry for the most
  1299. recent version should be returned first, and entries should be
  1300. separated by the representation of a blank line (the `title' line may
  1301. also be followed by the representation of blank line).
  1302. <sect1 id="f-Filename"><tt/Filename/ and <tt/MSDOS-Filename/
  1303. <p>
  1304. These fields in <tt/Packages/ files give the filename(s) of (the parts
  1305. of) a package in the distribution directories, relative to the root of
  1306. the Debian hierarchy. If the package has been split into several
  1307. parts the parts are all listed in order, separated by spaces.
  1308. <sect1 id="f-Size"><tt/Size/ and <tt/MD5sum/
  1309. <p>
  1310. These fields in <tt/Packages/ files give the size (in bytes, expressed
  1311. in decimal) and MD5 checksum of the file(s) which make(s) up a binary
  1312. package in the distribution. If the package is split into several
  1313. parts the values for the parts are listed in order, separated by
  1314. spaces.
  1315. <sect1 id="f-Status"><tt/Status/
  1316. <p>
  1317. This field in <prgn/dpkg/'s status file records whether the user wants a
  1318. package installed, removed or left alone, whether it is broken
  1319. (requiring reinstallation) or not and what its current state on the
  1320. system is. Each of these pieces of information is a single word.
  1321. <sect1 id="f-Config-Version"><tt/Config-Version/
  1322. <p>
  1323. If a package is not installed or not configured, this field in
  1324. <prgn/dpkg/'s status file records the last version of the package which
  1325. was successfully configured.
  1326. <sect1 id="f-Conffiles"><tt/Conffiles/
  1327. <p>
  1328. This field in <prgn/dpkg/'s status file contains information about the
  1329. automatically-managed configuration files held by a package. This
  1330. field should <em/not/ appear anywhere in a package!
  1331. <sect1>Obsolete fields
  1332. <p>
  1333. These are still recognised by <prgn/dpkg/ but should not appear anywhere
  1334. any more.
  1335. <taglist compact>
  1336. <tag><tt/Revision/
  1337. <tag><tt/Package-Revision/
  1338. <tag><tt/Package_Revision/
  1339. <item>
  1340. The Debian revision part of the package version was at one point in a
  1341. separate control file field. This field went through several names.
  1342. <tag><tt/Recommended/
  1343. <item>Old name for <tt/Recommends/
  1344. <tag><tt/Optional/
  1345. <item>Old name for <tt/Suggests/.
  1346. <tag><tt/Class/
  1347. <item>Old name for <tt/Priority/.
  1348. </taglist>
  1349. <chapt id="versions">Version numbering
  1350. <p>
  1351. Every package has a version number, in its <tt/Version/ control file
  1352. field.
  1353. <p>
  1354. <prgn/dpkg/ imposes an ordering on version numbers, so that it can tell
  1355. whether packages are being up- or downgraded and so that <prgn/dselect/
  1356. can tell whether a package it finds available is newer than the one
  1357. installed on the system. The version number format has the most
  1358. significant parts (as far as comparison is concerned) at the
  1359. beginning.
  1360. <p>
  1361. The version number format is:
  1362. &lsqb<var/epoch/<tt/:/&rsqb;<var/upstream-version/&lsqb;<tt/-/<var/debian-revision/&rsqb;.
  1363. <p>
  1364. The three components here are:
  1365. <taglist>
  1366. <tag><var/epoch/
  1367. <item>
  1368. This is a single unsigned integer, which should usually be small. It
  1369. may be omitted, in which case zero is assumed. If it is omitted then
  1370. the <var/upstream-version/ may not contain any colons.
  1371. <p>
  1372. It is provided to allow mistakes in the version numbers of older
  1373. versions of a package, and also a package's previous version numbering
  1374. schemes, to be left behind.
  1375. <p>
  1376. <prgn/dpkg/ will not usually display the epoch unless it is essential
  1377. (non-zero, or if the <var/upstream-version/ contains a colon);
  1378. <prgn/dselect/ does not display epochs at all in the main part of the
  1379. package selection display.
  1380. <tag><var/upstream-version/
  1381. <item>
  1382. This is the main part of the version. It is usually version number of
  1383. the original (`upstream') package of which the <tt/.deb/ file has been
  1384. made, if this is applicable. Usually this will be in the same format
  1385. as that specified by the upstream author(s); however, it may need to
  1386. be reformatted to fit into <prgn/dpkg/'s format and comparison scheme.
  1387. <p>
  1388. The comparison behaviour of <prgn/dpkg/ with respect to the
  1389. <var/upstream-version/ is described below. The <var/upstream-version/
  1390. portion of the version number is mandatory.
  1391. <p>
  1392. The <var/upstream-version/ may contain only alphanumerics and the
  1393. characters <tt/+/ <tt/./ <tt/-/ <tt/:/ (full stop, plus, hyphen,
  1394. colon) and should start with a digit. If there is no
  1395. <var/debian-revision/ then hyphens are not allowed; if there is no
  1396. <var/epoch/ then colons are not allowed.
  1397. <tag><var/debian-revision/
  1398. <item>
  1399. This part of the version represents the version of the modifications
  1400. that were made to the package to make it a Debian binary package. It
  1401. is in the same format as the <var/upstream-version/ and <prgn/dpkg/
  1402. compares it in the same way.
  1403. <p>
  1404. It is optional; if it isn't present then the <var/upstream-version/
  1405. may not contain a hyphen. This format represents the case where a
  1406. piece of software was written specifically to be turned into a Debian
  1407. binary package, and so there is only one `debianization' of it and
  1408. therefore no revision indication is required.
  1409. <p>
  1410. It is conventional to restart the <var/debian-revision/ at <tt/1/ each
  1411. time the <var/upstream-version/ is increased.
  1412. <p>
  1413. <prgn/dpkg/ will break the <var/upstream-version/ and
  1414. <var/debian-revision/ apart at the last hyphen in the string. The
  1415. absence of a <var/debian-revision/ compares earlier than the presence
  1416. of one (but note that the <var/debian-revision/ is the least
  1417. significant part of the version number).
  1418. <p>
  1419. The <var/debian-revision/ may contain only alphanumerics and the
  1420. characters <tt/+/ and <tt/./ (plus and full stop).
  1421. </taglist>
  1422. The <var/upstream-version/ and <var/debian-revision/ parts are
  1423. compared by <prgn/dpkg/ using the same algorithm:
  1424. <p>
  1425. The strings are compared from left to right.
  1426. <p>
  1427. First the initial part of each string consisting entirely of non-digit
  1428. characters is determined. These two parts (one of which may be empty)
  1429. are compared lexically. If a difference is found it is returned. The
  1430. lexical comparison is a comparison of ASCII values modified so that
  1431. all the letters sort earlier than all the non-letters.
  1432. <p>
  1433. Then the initial part of the remainder of each string which consists
  1434. entirely of digit characters is determined. The numerical values of
  1435. these two parts are compared, and any difference found is returned as
  1436. the result of the comparison. For these purposes an empty string
  1437. (which can only occur at the end of one or both version strings being
  1438. compared) counts as zero.
  1439. <p>
  1440. These two steps are repeated (chopping initial non-digit strings and
  1441. initial digit strings off from the start) until a difference is found
  1442. or both strings are exhausted.
  1443. <p>
  1444. Note that the purpose of epochs is to allow us to leave behind
  1445. mistakes in version numbering, and to cope with situations where the
  1446. version numbering changes. It is <em/not/ there to cope with version
  1447. numbers containing strings of letters which <prgn/dpkg/ cannot interpret
  1448. (such as <tt/ALPHA/ or <tt/pre-/), or with silly orderings (the author
  1449. of this manual has heard of a package whose versions went <tt/1.1/,
  1450. <tt/1.2/, <tt/1.3/, <tt/1/, <tt/2.1/, <tt/2.2/, <tt/2/ and so forth).
  1451. <p>
  1452. If an upstream package has problematic version numbers they should be
  1453. converted to a sane form for use in the <tt/Version/ field.
  1454. <chapt id="maintainerscripts">Package maintainer scripts
  1455. and installation procedure
  1456. <sect>Introduction to package maintainer scripts
  1457. <p>
  1458. It is possible supply scripts as part of a package which <prgn/dpkg/
  1459. will run for you when your package is installed, upgraded or removed.
  1460. <p>
  1461. These scripts should be the files <tt/preinst/, <tt/postinst/,
  1462. <tt/prerm/ and <tt/postrm/ in the control area of the package. They
  1463. must be proper exectuable files; if they are scripts (which is
  1464. recommended) they must start with the usual <tt/#!/ convention. They
  1465. should be readable and executable to anyone, and not world-writeable.
  1466. <p>
  1467. <prgn/dpkg/ looks at the exit status from these scripts. It is
  1468. important that they exit with a non-zero status if there is an error,
  1469. so that <prgn/dpkg/ can stop its processing. For shell scripts this
  1470. means that you <em/almost always/ need to use <tt/set -e/ (this is
  1471. usually true when writing shell scripts, in fact). It is also
  1472. important, of course, that they don't exit with a non-zero status if
  1473. everything went well.
  1474. <p>
  1475. It is necessary for the error recovery procedures that the scripts be
  1476. idempotent: ie, invoking the same script several times in the same
  1477. situation should do no harm. If the first call failed, or aborted
  1478. half way through for some reason, the second call should merely do the
  1479. things that were left undone the first time, if any, and exit with a
  1480. success status.
  1481. <p>
  1482. When a package is upgraded a combination of the scripts from the old
  1483. and new packages is called in amongst the other steps of the upgrade
  1484. procedure. If your scripts are going to be at all complicated you
  1485. need to be aware of this, and may need to check the arguments to your
  1486. scripts.
  1487. <p>
  1488. Broadly speaking the <prgn/preinst/ is called before (a particular
  1489. version of) a package is installed, and the <prgn/postinst/ afterwards;
  1490. the <prgn/prerm/ before (a version of) a package is removed and the
  1491. <prgn/postrm/ afterwards.
  1492. <sect id="mscriptsinstact">Summary of ways maintainer scripts are called
  1493. <p>
  1494. <list compact>
  1495. <item><var/new-preinst/ <tt/install/
  1496. <item><var/new-preinst/ <tt/install/ <var/old-version/
  1497. <item><var/new-preinst/ <tt/upgrade/ <var/old-version/
  1498. <item><var/old-preinst/ <tt/abort-upgrade/ <var/new-version/
  1499. </list>
  1500. <p>
  1501. <list compact>
  1502. <item><var/postinst/ <tt/configure/ <var/most-recently-configured-version/
  1503. <item><var/old-postinst/ <tt/abort-upgrade/ <var/new version/
  1504. <item><var/conflictor's-postinst/ <tt/abort-remove/
  1505. <tt/in-favour/ <var/package/ <var/new-version/
  1506. <item><var/deconfigured's-postinst/ <tt/abort-deconfigure/
  1507. <tt/in-favour/ <var/failed-install-package/ <var/version/
  1508. <tt/removing/ <var/conflicting-package/ <var/version/
  1509. </list>
  1510. <p>
  1511. <list compact>
  1512. <item><var/prerm/ <tt/remove/
  1513. <item><var/old-prerm/ <tt/upgrade/ <var/new-version/
  1514. <item><var/new-prerm/ <tt/failed-upgrade/ <var/old-version/
  1515. <item><var/conflictor's-prerm/ <tt/remove/ <tt/in-favour/
  1516. <var/package/ <var/new-version/
  1517. <item><var/deconfigured's-prerm/ <tt/deconfigure/
  1518. <tt/in-favour/ <var/package-being-installed/ <var/version/
  1519. <tt/removing/ <var/conflicting-package/ <var/version/
  1520. </list>
  1521. <p>
  1522. <list compact>
  1523. <item><var/postrm/ <tt/remove/
  1524. <item><var/postrm/ <tt/purge/
  1525. <item><var/old-postrm/ <tt/upgrade/ <var/new-version/
  1526. <item><var/new-postrm/ <tt/failed-upgrade/ <var/old-version/
  1527. <item><var/new-postrm/ <tt/abort-install/
  1528. <item><var/new-postrm/ <tt/abort-install/ <var/old-version/
  1529. <item><var/new-postrm/ <tt/abort-upgrade/ <var/old-version/
  1530. <item><var/disappearer's-postrm/ <tt/disappear/ <var/overwriter/ <var/new-version/
  1531. </list>
  1532. <sect>Details of unpack phase of installation or upgrade
  1533. <p>
  1534. The procedure on installation/upgrade/overwrite/disappear (ie, when
  1535. running <tt/dpkg --unpack/, or the unpack stage of <tt/dpkg
  1536. --install/) is as follows. In each case if an error occurs the
  1537. actions in are general run backwards - this means that the maintainer
  1538. scripts are run with different arguments in reverse order. These are
  1539. the `error unwind' calls listed below.
  1540. <enumlist>
  1541. <item>
  1542. <enumlist>
  1543. <item>
  1544. If a version the package is already
  1545. installed, call
  1546. <example>
  1547. <var/old-prerm/ upgrade <var/new-version/
  1548. </example>
  1549. <item>
  1550. If this gives an error (ie, a non-zero exit status), dpkg will
  1551. attempt instead:
  1552. <example>
  1553. <var/new-prerm/ failed-upgrade <var/old-version/
  1554. </example>
  1555. Error unwind, for both the above cases:
  1556. <example>
  1557. <var/old-postinst/ abort-upgrade <var/new-version/
  1558. </example>
  1559. </enumlist>
  1560. <item>
  1561. If a `conflicting' package is being removed at the same time:
  1562. <enumlist>
  1563. <item>
  1564. If any packages depended on that conflicting package and
  1565. <tt/--auto-deconfigure/ is specified, call, for each such package:
  1566. <example>
  1567. <var/deconfigured's-prerm/ deconfigure \
  1568. in-favour <var/package-being-installed/ <var/version/ \
  1569. removing <var/conflicting-package/ <var/version/
  1570. </example>
  1571. Error unwind:
  1572. <example>
  1573. <var/deconfigured's-postinst/ abort-deconfigure \
  1574. in-favour <var/package-being-installed-but-failed/ <var/version/ \
  1575. removing <var/conflicting-package/ <var/version/
  1576. </example>
  1577. The deconfigured packages are marked as requiring configuration, so
  1578. that if <tt/--install/ is used they will be configured again if
  1579. possible.
  1580. <item>
  1581. To prepare for removal of the conflicting package, call:
  1582. <example>
  1583. <var/conflictor's-prerm/ remove in-favour <var/package/ <var/new-version/
  1584. </example>
  1585. Error unwind:
  1586. <example>
  1587. <var/conflictor's-postinst/ abort-remove \
  1588. in-favour <var/package/ <var/new-version/
  1589. </example>
  1590. </enumlist>
  1591. <item>
  1592. <enumlist>
  1593. <item>
  1594. If the package is being upgraded, call:
  1595. <example>
  1596. <var/new-preinst/ upgrade <var/old-version/
  1597. </example>
  1598. <item>
  1599. Otherwise, if the package had some configuration files from a previous
  1600. version installed (ie, it is in the `configuration files only' state):
  1601. <example>
  1602. <var/new-preinst/ install <var/old-version/
  1603. </example>
  1604. <item>
  1605. Otherwise (ie, the package was completely purged):
  1606. <example>
  1607. <var/new-preinst/ install
  1608. </example>
  1609. Error unwind versions, respectively:
  1610. <example>
  1611. <var/new-postrm/ abort-upgrade <var/old-version/
  1612. <var/new-postrm/ abort-install <var/old-version/
  1613. <var/new-postrm/ abort-install
  1614. </example>
  1615. </enumlist>
  1616. <item>
  1617. The new package's files are unpacked, overwriting any that may be on
  1618. the system already, for example any from the old version of the same
  1619. package or from another package (backups of the old files are left
  1620. around, and if anything goes wrong dpkg will attempt to put them back
  1621. as part of the error unwind).
  1622. <p>
  1623. It is an error for a package to contains files which are on the system
  1624. in another package, unless <tt/Replaces/ is used (see
  1625. <ref id="replaces">). Currently the <tt/--force-overwrite/ flag is
  1626. enabled, downgrading it to a warning, but this may not always be the
  1627. case.
  1628. <p>
  1629. It is a more serious error for a package to contain a plain file or
  1630. other kind of nondirectory where another package has a directory
  1631. (again, unless <tt/Replaces/ is used). This error can be overridden
  1632. if desired using <tt/--force-overwrite-dir/, but this is not -->
  1633. --advisable.
  1634. <p>
  1635. Packages which overwrite each other's files produce behaviour which
  1636. though deterministic is hard for the system administrator to
  1637. understand. It can easily lead to `missing' programs if, for example,
  1638. a package is installed which overwrites a file from another package,
  1639. and is then removed again.<footnote>Part of the problem is due to what
  1640. is arguably a bug in <prgn/dpkg/.</footnote>
  1641. <p>
  1642. A directory will never be replaced by a symbolic links to a directory
  1643. or vice versa; instead, the existing state (symlink or not) will be
  1644. left alone and <prgn/dpkg/ will follow the symlink if there is one.
  1645. <item>
  1646. <enumlist>
  1647. <item>
  1648. If the package is being upgraded, call
  1649. <example>
  1650. <var/old-postrm/ upgrade <var/new-version/
  1651. </example>
  1652. <item>
  1653. If this fails, <prgn/dpkg/ will attempt:
  1654. <example>
  1655. <var/new-postrm/ failed-upgrade <var/old-version/
  1656. </example>
  1657. Error unwind, for both cases:
  1658. <example>
  1659. <var/old-preinst/ abort-upgrade <var/new-version/
  1660. </example>
  1661. </enumlist>
  1662. This is the point of no return - if <prgn/dpkg/ gets this far, it won't
  1663. back off past this point if an error occurs. This will leave the
  1664. package in a fairly bad state, which will require a successful
  1665. reinstallation to clear up, but it's when <prgn/dpkg/ starts doing
  1666. things that are irreversible.
  1667. <item>
  1668. Any files which were in the old version of the package but not in the
  1669. new are removed.
  1670. <item>
  1671. The new file list replaces the old.
  1672. <item>
  1673. The new maintainer scripts replace the old.
  1674. <item>
  1675. Any packages all of whose files have been overwritten during the
  1676. installation, and which aren't required for dependencies, are considered
  1677. to have been removed. For each such package,
  1678. <enumlist>
  1679. <item>
  1680. <prgn/dpkg/ calls:
  1681. <example>
  1682. <var/disappearer's-postrm/ disappear \
  1683. <var/overwriter/ <var/overwriter-version/
  1684. </example>
  1685. <item>
  1686. The package's maintainer scripts are removed.
  1687. <item>
  1688. It is noted in the status database as being in a sane state, namely
  1689. not installed (any conffiles it may have are ignored, rather than
  1690. being removed by <prgn/dpkg/). Note that disappearing packages do not
  1691. have their prerm called, because <prgn/dpkg/ doesn't know in advance
  1692. that the package is going to vanish.
  1693. </enumlist>
  1694. <item>
  1695. Any files in the package we're unpacking that are also listed in the
  1696. file lists of other packages are removed from those lists. (This will
  1697. lobotomise the file list of the `conflicting' package if there is one.)
  1698. <item>
  1699. The backup files made during installation, above, are deleted.
  1700. <item>
  1701. The new package's status is now sane, and recorded as `unpacked'. Here
  1702. is another point of no return - if the conflicting package's removal
  1703. fails we do not unwind the rest of the installation; the conflicting
  1704. package is left in a half-removed limbo.
  1705. <item>
  1706. If there was a conflicting package we go and do the removal actions
  1707. (described below), starting with the removal of the conflicting
  1708. package's files (any that are also in the package being installed
  1709. have already been removed from the conflicting package's file list,
  1710. and so do not get removed now).
  1711. </enumlist>
  1712. <sect>Details of configuration
  1713. <p>
  1714. When we configure a package (this happens with <tt/dpkg --install/, or
  1715. with <tt/--configure/), we first update the conffiles and then call:
  1716. <example>
  1717. <var/postinst/ configure <var/most-recently-configured-version/
  1718. </example>
  1719. <p>
  1720. No attempt is made to unwind after errors during configuration.
  1721. <p>
  1722. If there is no most recently configured version <prgn/dpkg/ will pass a
  1723. null argument; older versions of dpkg may pass
  1724. <tt>&lt;unknown&gt;</tt> (including the angle brackets) in this case.
  1725. Even older ones do not pass a second argument at all, under any
  1726. circumstances.
  1727. <sect>Details of removal and/or configuration purging
  1728. <p>
  1729. <enumlist>
  1730. <item>
  1731. <example>
  1732. <var/prerm/ remove
  1733. </example>
  1734. <item>
  1735. The package's files are removed (except conffiles).
  1736. <item>
  1737. <example>
  1738. <var/postrm/ remove
  1739. </example>
  1740. <item>
  1741. All the maintainer scripts except the postrm are removed.
  1742. <p>
  1743. If we aren't purging the package we stop here. Note that packages
  1744. which have no postrm and no conffiles are automatically purged when
  1745. removed, as there is no difference except for the <prgn/dpkg/ status.
  1746. <item>
  1747. The conffiles and any backup files (<tt/~/-files, <tt/#*#/ files,
  1748. <tt/%/-files, <tt/.dpkg-{old,new,tmp}/, etc.) are removed.
  1749. <item>
  1750. <example>
  1751. <var/postrm/ purge
  1752. </example>
  1753. <item>
  1754. The package's file list is removed.
  1755. </enumlist>
  1756. No attempt is made to unwind after errors during removal.
  1757. <chapt id="descriptions">Descriptions of packages - the
  1758. <tt/Description/ field
  1759. <p>
  1760. The <tt/Description/ control file field is used by <prgn/dselect/ when
  1761. the user is selecting which packages to install and by <prgn/dpkg/
  1762. when it displays information about the status of packages and so
  1763. forth. It is included on the FTP site in the <prgn/Packages/ files,
  1764. and may also be used by the Debian WWW pages.
  1765. <p>
  1766. The description is intended to describe the program to a user who has
  1767. never met it before so that they know whether they want to install it.
  1768. It should also give information about the significant dependencies and
  1769. conflicts between this package and others, so that the user knows why
  1770. these dependencies and conflicts have been declared.
  1771. <p>
  1772. The field's format is as follows:
  1773. <example>
  1774. Description: <var/single line synopsis/
  1775. <var/extended description over several lines/
  1776. </example>
  1777. <p>
  1778. The synopsis is often printed in lists of packages and so forth, and
  1779. should be as informative as possible. Every package should also have
  1780. an extended description.
  1781. <p>
  1782. <sect>Types of formatting line in the extended description
  1783. <p>
  1784. <list>
  1785. <item>
  1786. Those starting with a single space are part of a paragraph.
  1787. Successive lines of this form will be word-wrapped when displayed.
  1788. The leading space will usually be stripped off.
  1789. <item>
  1790. Those starting with two or more spaces. These will be displayed
  1791. verbatim. If the display cannot be panned horizontally the
  1792. displaying program will linewrap them `hard' (ie, without taking
  1793. account of word breaks). If it can they will be allowed to trail
  1794. off to the right. None, one or two initial spaces may be deleted,
  1795. but the number of spaces deleted from each line will be the same
  1796. (so that you can have indenting work correctly, for example).
  1797. <item>
  1798. Those containing a single space followed by a single full stop
  1799. character. These are rendered as blank lines. This is the <em/only/
  1800. way to get a blank line - see below.
  1801. <item>
  1802. Those containing a space, a full stop and some more characters. These
  1803. are for future expansion. Do not use them.
  1804. </list>
  1805. <sect>Notes about writing descriptions
  1806. <p>
  1807. <em/Always/ start extended description lines with at least one
  1808. whitespace character. Fields in the control file and in the Packages
  1809. file are separated by field names starting in the first column, just
  1810. as message header fields are in RFC822. Forgetting the whitespace
  1811. will cause <prgn/dpkg-deb/<footnote>Version 0.93.23 or
  1812. later.</footnote> to produce a syntax error when trying to build the
  1813. package. If you force it to build anyway <prgn/dpkg/ will refuse to
  1814. install the resulting mess.
  1815. <p>
  1816. <em/Do not/ include any completely <em/empty/ lines. These separate
  1817. different records in the Packages file and different packages in the
  1818. <tt>debian/control</> file, and are forbidden in package control
  1819. files. See the previous paragraph for what happens if you get this
  1820. wrong.
  1821. <p>
  1822. The single line synopsis should be kept brief - certainly under 80
  1823. characters. <prgn/dselect/ displays between 25 and 49 characters
  1824. without panning if you're using an 80-column terminal, depending on
  1825. what display options are in effect.
  1826. <p>
  1827. Do not include the package name in the synopsis line. The display
  1828. software knows how to display this already, and you do not need to
  1829. state it. Remember that in many situations the user may only see
  1830. the synopsis line - make it as informative as you can.
  1831. <p>
  1832. The extended description should describe what the package does and
  1833. how it relates to the rest of the system (in terms of, for
  1834. example, which subsystem it is which part of).
  1835. <p>
  1836. The blurb that comes with a program in its announcements and/or
  1837. <prgn/README/ files is rarely suitable for use in a description. It
  1838. is usually aimed at people who are already in the community where the
  1839. package is used. The description field needs to make sense to anyone,
  1840. even people who have no idea about any of the
  1841. things the package deals with.
  1842. <p>
  1843. Put important information first, both in the synopis and extended
  1844. description. Sometimes only the first part of the synopsis or of
  1845. the description will be displayed. You can assume that there will
  1846. usually be a way to see the whole extended description.
  1847. <p>
  1848. You may include information about dependencies and so forth in the
  1849. extended description, if you wish.
  1850. <p>
  1851. Do not use tab characters. Their effect is not predictable.
  1852. <p>
  1853. Do not try to linewrap the summary (the part on the same line as the
  1854. field name <tt/Description/) into the extended description. This will
  1855. not work correctly when the full description is displayed, and makes
  1856. no sense where only the summary is available.
  1857. <sect>Example description in control file for Smail
  1858. <p>
  1859. <example>
  1860. Package: smail
  1861. Version: 3.1.29.1-13
  1862. Maintainer: Ian Jackson &lt;iwj10@cus.cam.ac.uk&gt;
  1863. Recommends: pine | mailx | elm | emacs | mail-user-agent
  1864. Suggests: metamail
  1865. Depends: cron, libc5
  1866. Conflicts: sendmail
  1867. Provides: mail-transport-agent
  1868. Description: Electronic mail transport system.
  1869. Smail is the recommended mail transport agent (MTA) for Debian.
  1870. .
  1871. An MTA is the innards of the mail system - it takes messages from
  1872. user-friendly mailer programs and arranges for them to be delivered
  1873. locally or passed on to other systems as required.
  1874. .
  1875. In order to make use of it you must have one or more user level
  1876. mailreader programs such as elm, pine, mailx or Emacs (which has Rmail
  1877. and VM as mailreaders) installed. If you wish to send messages other
  1878. than just to other users of your system you must also have appropriate
  1879. and VM as mailreaders) installed. If you wish to send messages other
  1880. than just to other users of your system you must also have appropriate
  1881. networking support, in the form of IP or UUCP.
  1882. </example>
  1883. <chapt id="relationships">Declaring relationships between packages
  1884. <p>
  1885. Packages can declare in their control file that they have certain
  1886. relationships to other packages - for example, that they may not be
  1887. installed at the same time as certain other packages, and/or that they
  1888. depend on the presence of others, or that they should overwrite files
  1889. in certain other packages if present.
  1890. <p>
  1891. This is done using the <tt/Depends/, <tt/Recommends/, <tt/Suggests/,
  1892. <tt/Conflicts/, <tt/Provides/ and <tt/Replaces/ control file fields.
  1893. <p>
  1894. <sect id="depsyntax">Syntax of relationship fields
  1895. <p>
  1896. These fields all have a uniform syntax. They are a list of package
  1897. names separated by commas.
  1898. <p>
  1899. In <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and <tt/Pre-Depends/
  1900. (the fields which declare dependencies of the package in which they
  1901. occur on other packages) these package names may also be lists of
  1902. alternative package names, separated by vertical bar symbols <tt/|/
  1903. (pipe symbols).
  1904. <p>
  1905. All the fields except <tt/Provides/ may restrict their applicability
  1906. to particular versions of each named package. This is done in
  1907. parentheses after each individual package name; the parentheses should
  1908. contain a relation from the list below followed by a version number,
  1909. in the format described in <ref id="versions">.
  1910. <p>
  1911. The relations allowed are
  1912. <tt/&lt;&lt;/,
  1913. <tt/&lt;=/,
  1914. <tt/=/,
  1915. <tt/&gt;=/ and
  1916. <tt/&gt;&gt;/
  1917. for strictly earlier, earlier or equal, exactly equal, later or equal
  1918. and strictly later, respectively. The forms <tt/&lt;/ and <tt/&gt;/
  1919. were used to mean earlier/later or equal, rather than strictly
  1920. earlier/later, so they should not appear in new packages (though
  1921. <prgn/dpkg/ still supports them).
  1922. <p>
  1923. Whitespace may appear at any point in the version specification, and
  1924. must appear where it's necessary to disambiguate; it is not otherwise
  1925. significant. For consistency and in case of future changes to
  1926. <prgn/dpkg/ it is recommended that a single space be used after a
  1927. version relationship and before a version number; it is usual also to
  1928. put a single space after each comma, on either side of each vertical
  1929. bar, and before each open parenthesis.
  1930. <p>
  1931. For example:
  1932. <example>
  1933. Package: metamail
  1934. Version: 2.7-3
  1935. Depends: libc5 (>= 5.2.18-4), mime-support, csh | tcsh
  1936. </example>
  1937. <sect>Dependencies - <tt/Depends/, <tt/Recommends/, <tt/Suggests/, <tt/Pre-Depends/
  1938. <p>
  1939. These four fields are used to declare a dependency by one package on
  1940. another. They appear in the depending package's control file.
  1941. <p>
  1942. All but <tt/Pre-Depends/ (discussed below) take effect <em/only/ when
  1943. a package is to be configured. They do not prevent a package being on
  1944. the system in an unconfigured state while its dependencies are
  1945. unsatisfied, and it is possible to replace a package whose
  1946. dependencies are satisfied and which is properly installed with a
  1947. different version whose dependencies are not and cannot be satisfied;
  1948. when this is done the depending package will be left unconfigured
  1949. (since attempts to configure it will give errors) and will not
  1950. function properly.
  1951. <p>
  1952. For this reason packages in an installation run are usually all
  1953. unpacked first and all configured later; this gives later versions of
  1954. packages with dependencies on later versions of other packages the
  1955. opportunity to have their dependencies satisfied.
  1956. <p>
  1957. Thus <tt/Depends/ allows package maintainers to impose an order in
  1958. which packages should be configured.
  1959. <taglist>
  1960. <tag><tt/Depends/
  1961. <item>
  1962. This declares an absolute dependency.
  1963. <p>
  1964. <prgn/dpkg/ will not configure
  1965. packages whose dependencies aren't satisfied. If it is asked to make
  1966. an installation which would cause an installed package's dependencies
  1967. to become unsatisfied it will complain<footnote>Current versions
  1968. (1.2.4) of <prgn/dpkg/ have a bug in this area which will cause some of
  1969. these problems to be ignored.</footnote>, unless
  1970. <tt/--auto-deconfigure/ is specified, in which case those packages
  1971. will be deconfigured before the installation proceeds.
  1972. <p>
  1973. <prgn/dselect/ makes it hard for the user to select packages for
  1974. installation, removal or upgrade in a way that would mean that
  1975. packages' <prgn/Depends/ fields would be unsatisfied. The user can
  1976. override this if they wish, for example if they know that <prgn/dselect/
  1977. has an out-of-date view of the real package relationships.
  1978. <p>
  1979. The <tt/Depends/ field should be used if the depended-on package is
  1980. required for the depending package to provide a significant amount of
  1981. functionality.
  1982. <tag><tt/Recommends/
  1983. <item>
  1984. This declares a strong, but not absolute, dependency.
  1985. <p>
  1986. <tt/Recommends/ is ignored by <prgn/dpkg/, so that users using the
  1987. command-line (who are presumed to know what they're doing) will not be
  1988. impeded.
  1989. <p>
  1990. It is treated by <prgn/dselect/ exactly as <tt/Depends/ is; this makes
  1991. it hard for the user to select things so as to leave <tt/Recommends/
  1992. fields unsatisfied, but they are able to do so by being persistent.
  1993. <p>
  1994. The <tt/Recommends/ field should list packages that would be found
  1995. together with this one in all but unusual installations.
  1996. <tag><tt/Suggests/
  1997. <item>
  1998. This is used to declare that one package may be more useful with one
  1999. or more others. Using this field tells the packaging system and the
  2000. user that the listed packages are be related to this one and can
  2001. perhaps enhance its usefulness, but that installing this one without
  2002. them is perfectly reasonable.
  2003. <p>
  2004. <prgn/dselect/ will offer suggsted packages to the system administrator
  2005. when they select the suggesting package, but the default is not to
  2006. install the suggested package.
  2007. <tag><tt/Pre-Depends/
  2008. <item>
  2009. This field is like <tt/Depends/, except that it also forces <prgn/dpkg/
  2010. to complete installation of the packages named before even starting
  2011. the installation of the package which declares the predependency.
  2012. <p>
  2013. <prgn/dselect/ checks for predependencies when it is doing an
  2014. installation run, and will attempt to find the packages which are
  2015. required to be installed first and do so in the right order.
  2016. <p>
  2017. However, this process is slow (because it requires repeated
  2018. invocations of <prgn/dpkg/) and troublesome (because it requires
  2019. guessing where to find the appropriate files).
  2020. <p>
  2021. For these reasons, and because this field imposes restrictions on the
  2022. order in which packages may be unpacked (which can be difficult for
  2023. installations from multipart media, for example), <tt/Pre-Depends/
  2024. should be used sparingly, preferably only by packages whose premature
  2025. upgrade or installation would hamper the ability of the system to
  2026. continue with any upgrade that might be in progress.
  2027. <p>
  2028. When the package declaring it is being configured, a
  2029. <tt/Pre-Dependency/ will be considered satisfied only if the depending
  2030. package has been correctly configured, just as if an ordinary
  2031. <tt/Depends/ had been used.
  2032. <p>
  2033. However, when a package declaring a predependency is being unpacked
  2034. the predependency can be satisfied even if the depended-on package(s)
  2035. are only unpacked or half-configured, provided that they have been
  2036. configured correctly at some point in the past (and not removed or
  2037. partially removed since). In this case both the previously-configured
  2038. and currently unpacked or half-configured versions must satisfy any
  2039. version clause in the <tt/Pre-Depends/ field.
  2040. </taglist>
  2041. When selecting which level of dependency to use you should consider
  2042. how important the depended-on package is to the functionality of the
  2043. one declaring the dependency. Some packages are composed of
  2044. components of varying degrees of importance. Such a package should
  2045. list using <tt/Depends/ the package(s) which are required by the more
  2046. important components. The other components' requirements may be
  2047. mentioned as Suggestions or Recommendations, as appropriate to the
  2048. components' relative importance.
  2049. <sect1>Dependencies on shared libraries
  2050. <p>
  2051. The dependency fields listed above are used by packages which need
  2052. shared libraries to declare dependencies on the appropriate packages.
  2053. <p>
  2054. These dependencies are usually determined automatically using
  2055. <prgn/dpkg-shlibdeps/ and inserted in the package control file using
  2056. the control file substitution variables mechanism; see <ref
  2057. id="srcsubstvars"> and <ref id="sourcetools">.
  2058. <sect1>Deconfiguration due to removal during bulk installations
  2059. <p>
  2060. If <prgn/dpkg/ would like to remove a package due to a conflict, as
  2061. described above, but this would violate a dependency of some other
  2062. package on the system, <prgn/dpkg/ will usually not remove the
  2063. conflicting package and halt with an error.
  2064. <p>
  2065. However, if the <tt/--auto-deconfigure/ (<tt/-B/) option is used
  2066. <prgn/dpkg/ will automatically `deconfigure' the package with the
  2067. problematic dependency, so that the conflicting package can be removed
  2068. and the package we're trying to install can be installed. If
  2069. <prgn/dpkg/ is being asked to install packages (rather than just
  2070. unpacking them) it will try to reconfigure the package when it has
  2071. unpacked all its arguments, in the hope that one of the other packages
  2072. it is installing will satisfy the problematic dependency.
  2073. <p>
  2074. <prgn/dselect/ supplies this argument to <prgn/dpkg/ when it invokes it,
  2075. so that bulk installations proceed smoothly.
  2076. <sect id="conflicts">Alternative packages - <tt/Conflicts/ and <tt/Replaces/
  2077. <p>
  2078. When one package declares a conflict with another <prgn/dpkg/ will
  2079. refuse to allow them to be installed on the system at the same time.
  2080. <p>
  2081. If one package is to be installed, the other must be removed first -
  2082. if the package being installed is marked as replacing (<ref
  2083. id="replaces">) the one on the system, or the one on the system is
  2084. marked as deselected, or both packages are marked <tt/Essential/, then
  2085. <prgn/dpkg/ will automatically remove the package which is causing the
  2086. conflict, otherwise it will halt the installation of the new package
  2087. with an error.
  2088. <p>
  2089. <prgn/dselect/ makes it hard to select conflicting packages, though the
  2090. user can override this if they wish. If they do not override it then
  2091. <prgn/dselect/ will select one of the packages for removal, and the user
  2092. must make sure it is the right one. In the future <prgn/dselect/ will
  2093. look for the presence of a <tt/Replaces/ field to help decide which
  2094. package should be installed and which removed.
  2095. <p>
  2096. A package will not cause a conflict merely because its configuration
  2097. files are still installed; it must be at least half-installed.
  2098. <p>
  2099. A special exception is made for packages which declare a conflict with
  2100. their own package name, or with a virtual package which they provide
  2101. (see below): this does not prevent their installation, and allows a
  2102. package to conflict with others providing a replacement for it. You
  2103. use this feature when you want the package in question to be the only
  2104. package providing something.
  2105. <p>
  2106. A <tt/Conflicts/ entry should almost never have an `earlier than'
  2107. version clause. This would prevent <prgn/dpkg/ from upgrading or
  2108. installing the package which declared such a conflict until the
  2109. upgrade or removal of the conflicted-with package had been completed.
  2110. This aspect of installation ordering is not handled by <prgn/dselect/,
  2111. so that the use <tt/Conflicts/ in this way is likely to cause problems
  2112. for `bulk run' upgrades and installations.
  2113. <p>
  2114. <sect id="virtual">Virtual packages - <tt/Provides/
  2115. <p>
  2116. As well as the names of actual (`concrete') packages, the package
  2117. relationship fields <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and
  2118. <tt/Conflicts/ may mention virtual packages.
  2119. <p>
  2120. A virtual package is one which appears in the <tt/Provides/ control
  2121. file field of another package. The effect is as if the package(s)
  2122. which provide a particular virtual package name had been listed by
  2123. name everywhere were the virtual package name appears.
  2124. <p>
  2125. If there are both a real and a virtual package of the same name then
  2126. the dependency may be satisfied (or the conflict caused) by either the
  2127. real package or any of the virtual packages which provide it. This is
  2128. so that, for example, supposing we have
  2129. <example>
  2130. Package: vm
  2131. Depends: emacs
  2132. </example>
  2133. and someone else releases an xemacs package they can say
  2134. <example>
  2135. Package: xemacs
  2136. Provides: emacs
  2137. </example>
  2138. and all will work in the interim (until a purely virtual package name
  2139. is decided on and the <tt/emacs/ and <tt/vm/ packages are changed to
  2140. use it).
  2141. <p>
  2142. If a dependency or a conflict has a version number attached then only
  2143. real packages will be considered to see whether the relationship is
  2144. satisfied (or the prohibition violated, for a conflict) - it is
  2145. assumed that a real package which provides virtual package is not of
  2146. the `right' version. So, a <tt/Provides/ field may not contain
  2147. version numbers, and the version number of the concrete package which
  2148. provides a particular virtual package will not be looked at when
  2149. considering a dependency on or conflict with the virtual package name.
  2150. <p>
  2151. If you want to specify which of a set of real packages should be the
  2152. default to satisfy a particular dependency on a virtual package, you
  2153. should list the real package as alternative before the virtual.
  2154. <p>
  2155. <sect id="replaces"><tt/Replaces/ - overwriting files and replacing packages
  2156. <p>
  2157. The <tt/Replaces/ control file field has two purposes, which come into
  2158. play in different situations.
  2159. <p>
  2160. Virtual packages (<ref id="virtual">) are not considered when looking
  2161. at a <tt/Replaces/ field - the packages declared as being replaced
  2162. must be mentioned by their real names.
  2163. <sect1>Overwriting files in other packages
  2164. <p>
  2165. Firstly, as mentioned before, it is usually an error for a package to
  2166. contains files which are on the system in another package, though
  2167. currently the <tt/--force-overwrite/ flag is enabled by default,
  2168. downgrading the error to a warning,
  2169. <p>
  2170. If the overwriting package declares that it replaces the one
  2171. containing the file being overwritten then <prgn/dpkg/ will proceed, and
  2172. replace the file from the old package with that from the new. The
  2173. file will no longer be listed as `owned' by the old package.
  2174. <p>
  2175. If a package is completely replaced in this way, so that <prgn/dpkg/
  2176. does not know of any files it still contains, it is considered to have
  2177. disappeared. It will be marked as not wanted on the system (selected
  2178. for removal) and not installed. Any conffiles details noted in the
  2179. package will be ignored, as they will have been taken over by the
  2180. replacing package(s). The package's <prgn/postrm/ script will be run to
  2181. allow the package to do any final cleanup required.
  2182. See <ref id="mscriptsinstact">.
  2183. <p>
  2184. In the future <prgn/dpkg/ will discard files which overwrite those from
  2185. another package which declares that it replaces the one being
  2186. installed (so that you can install an older version of a package
  2187. without problems).
  2188. <p>
  2189. This usage of <tt/Replaces/ only takes effect when both packages are
  2190. at least partially on the system at once, so that it can only happen
  2191. if they do not conflict or if the conflict has been overridden.
  2192. <sect1>Replacing whole packages, forcing their removal
  2193. <p>
  2194. Secondly, <tt/Replaces/ allows <prgn/dpkg/ and <prgn/dselect/ to resolve
  2195. which package should be removed when a conflict - see
  2196. <ref id="conflicts">. This usage only takes effect when the two
  2197. packages <em/do/ conflict, so that the two effects do not interfere
  2198. with each other.
  2199. <p>
  2200. <sect>Defaults for satisfying dependencies - ordering
  2201. <p>
  2202. Ordering is significant in dependency fields.
  2203. <p>
  2204. Usually dselect will suggest to the user that they select the package
  2205. with the most `fundamental' class (eg, it will prefer Base packages to
  2206. Optional ones), or the one that they `most wanted' to select in some
  2207. sense.
  2208. <p>
  2209. In the absence of other information <prgn/dselect/ will offer a
  2210. default selection of the first named package in a list of
  2211. alternatives.
  2212. <p>
  2213. However, there is no way to specify the `order' of several packages
  2214. which all provide the same thing, when that thing is listed as a
  2215. dependency.
  2216. <p>
  2217. Therefore a dependency on a virtual package should contain a concrete
  2218. package name as the first alternative, so that this is the default.
  2219. <p>
  2220. For example, consider the set of packages:
  2221. <example>
  2222. Package: glibcdoc
  2223. Recommends: info-browser
  2224. Package: info
  2225. Provides: info-browser
  2226. Package: emacs
  2227. Provides: info-browser
  2228. </example>
  2229. <p>
  2230. If <prgn/emacs/ and <prgn/info/ both have the same priority then
  2231. <prgn/dselect/'s choice is essentially random. Better would be
  2232. <example>
  2233. Package: glibcdoc
  2234. Recommends: info | info-browser
  2235. </example>
  2236. so that <prgn/dselect/ defaults to selecting the lightweight standalone
  2237. info browser.
  2238. <chapt id="conffiles">Configuration file handling
  2239. <p>
  2240. <prgn/dpkg/ can do a certain amount of automatic handling of package
  2241. configuration files.
  2242. <p>
  2243. Whether this mechanism is appropriate depends on a number of factors,
  2244. but basically there are two approaches to any particular configuration
  2245. file.
  2246. <p>
  2247. The easy method is to ship a best-effort configuration in the package,
  2248. and use <prgn/dpkg/'s conffile mechanism to handle updates. If the user
  2249. is unlikely to want to edit the file, but you need them to be able to
  2250. without losing their changes, and a new package with a changed version
  2251. of the file is only released infrequently, this is a good approach.
  2252. <p>
  2253. The hard method is to build the configuration file from scratch in the
  2254. <prgn/postinst/ script, and to take the responsibility for fixing any
  2255. mistakes made in earlier versions of the package automatically. This
  2256. will be appropriate if the file is likely to need to be different on
  2257. each system.
  2258. <sect>Automatic handling of configuration files by <prgn/dpkg/
  2259. <p>
  2260. A package may contain a control area file called <tt/conffiles/. This
  2261. file should be a list of filenames of configuration files needing
  2262. automatic handling, separated by newlines. The filenames should be
  2263. absolute pathnames, and the files referred to should actually exist in
  2264. the package.
  2265. <p>
  2266. When a package is upgraded <prgn/dpkg/ will process the configuration
  2267. files during the configuration stage, shortly before it runs the
  2268. package's <prgn/postinst/ script,
  2269. <p>
  2270. For each file it checks to see whether the version of the file
  2271. included in the package is the same as the one that was included in
  2272. the last version of the package (the one that is being upgraded
  2273. from); it also compares the version currently installed on the system
  2274. with the one shipped with the last version.
  2275. <p>
  2276. If neither the user nor the package maintainer has changed the file,
  2277. it is left alone. If one or the other has changed their version, then
  2278. the changed version is preferred - ie, if the user edits their file,
  2279. but the package maintainer doesn't ship a different version, the
  2280. user's changes will stay, silently, but if the maintainer ships a new
  2281. version and the user hasn't edited it the new version will be
  2282. installed (with an informative message). If both have changed their
  2283. version the user is prompted about the problem and must resolve the
  2284. differences themselves.
  2285. <p>
  2286. The comparisons are done by calculating the MD5 message digests of the
  2287. files, and storing the MD5 of the file as it was included in the most
  2288. recent version of the package.
  2289. <p>
  2290. When a package is installed for the first time <prgn/dpkg/ will install
  2291. the file that comes with it, unless that would mean overwriting a file
  2292. already on the filesystem.
  2293. <p>
  2294. However, note that <prgn/dpkg/ will <em/not/ replace a conffile that
  2295. was removed by the user (or by a script). This is necessary because
  2296. with some programs a missing file produces an effect hard or
  2297. impossible to achieve in another way, so that a missing file needs to
  2298. be kept that way if the user did it.
  2299. <p>
  2300. Note that a package should <em/not/ modify a <prgn/dpkg/-handled
  2301. conffile in its maintainer scripts. Doing this will lead to
  2302. <prgn/dpkg/ giving the user confusing and possibly dangerous options
  2303. for conffile update when the package is upgraded.
  2304. <sect>Fully-featured maintainer script configuration handling
  2305. <p>
  2306. For files which contain site-specific information such as the hostname
  2307. and networking details and so forth, it is better to create the file
  2308. in the package's <prgn/postinst/ script.
  2309. <p>
  2310. This will typically involve examining the state of the rest of the
  2311. system to determine values and other information, and may involve
  2312. prompting the user for some information which can't be obtained some
  2313. other way.
  2314. <p>
  2315. When using this method there are a couple of important issues which
  2316. should be considered:
  2317. <p>
  2318. If you discover a bug in the program which generates the configuration
  2319. file, or if the format of the file changes from one version to the
  2320. next, you will have to arrange for the postinst script to do something
  2321. sensible - usually this will mean editing the installed configuration
  2322. file to remove the problem or change the syntax. You will have to do
  2323. this very carefully, since the user may have changed the file, perhaps
  2324. to fix the very problem that your script is trying to deal with - you
  2325. will have to detect these situations and deal with them correctly.
  2326. <p>
  2327. If you do go down this route it's probably a good idea to make the
  2328. program that generates the configuration file(s) a separate program in
  2329. <tt>/usr/sbin</>, by convention called <tt/<var/package/config/ and
  2330. then run that if appropriate from the post-installation script. The
  2331. <tt/<var/package/config/ program should not unquestioningly overwrite
  2332. an existing configuration - if its mode of operation is geared towards
  2333. setting up a package for the first time (rather than any arbitrary
  2334. reconfiguration later) you should have it check whether the
  2335. configuration already exists, and require a <tt/--force/ flag to
  2336. overwrite it.
  2337. <chapt id="alternatives">Alternative versions of an interface -
  2338. <prgn/update-alternatives/
  2339. <p>
  2340. When several packages all provide different versions of the same
  2341. program or file it is useful to have the system select a default, but
  2342. to allow the system administrator to change it and have their
  2343. decisions respected.
  2344. <p>
  2345. For example, there are several versions of the <prgn/vi/ editor, and
  2346. there is no reason to prevent all of them from being installed at
  2347. once, each under their own name (<prgn/nvi/, <prgn/vim/ or whatever).
  2348. Nevertheless it is desirable to have the name <tt/vi/ refer to
  2349. something, at least by default.
  2350. <p>
  2351. If all the packages involved cooperate, this can be done with
  2352. <prgn/update-alternatives/.
  2353. <p>
  2354. Each package provides its own version under its own name, and calls
  2355. <prgn/update-alternatives/ in its postinst to register its version
  2356. (and again in its prerm to deregister it).
  2357. <p>
  2358. See the manpage <manref name=update-alternatives section=8> for
  2359. details.
  2360. <p>
  2361. If <prgn/update-alternatives/ does not seem appropriate you may wish
  2362. to consider using diversions instead.
  2363. <chapt id="diversions">Diversions - overriding a package's version of a file
  2364. <p>
  2365. It is possible to have <prgn/dpkg/ not overwrite a file when it
  2366. reinstalls the package it belongs to, and to have it put the file from
  2367. the package somewhere else instead.
  2368. <p>
  2369. This can be used locally to override a package's version of a file, or
  2370. by one package to override another's version (or provide a wrapper for
  2371. it).
  2372. <p>
  2373. Before deciding to use a diversion, read <ref id="alternatives"> to
  2374. see if you really want a diversion rather than several alternative
  2375. versions of a program.
  2376. <p>
  2377. There is a diversion list, which is read by <prgn/dpkg/, and updated
  2378. by a special program <prgn/dpkg-divert/. Please see <manref
  2379. name=dpkg-divert section=8> for full details of its operation.
  2380. <p>
  2381. When a package wishes to divert a file from another, it should call
  2382. <prgn/dpkg-divert/ in its preinst to add the diversion and rename the
  2383. existing file. For example, supposing that a <prgn/smailwrapper/
  2384. package wishes to install a wrapper around <tt>/usr/sbin/smail</>:
  2385. <example>
  2386. if [ install = "$1" ]; then
  2387. dpkg-divert --package smailwrapper --add --rename \
  2388. --divert /usr/sbin/smail.real /usr/sbin/smail
  2389. fi
  2390. </example>
  2391. Testing <tt/$1/ is necessary so that the script doesn't try to add the
  2392. diversion again when <prgn/smailwrapper/ is upgraded. The
  2393. <tt/--package smailwrapper/ ensures that <prgn/smailwrapper/'s copy of
  2394. <tt>/usr/sbin/smail</> can bypass the diversion and get installed as
  2395. the true version.
  2396. <p>
  2397. The postrm has to do the reverse:
  2398. <example>
  2399. if [ remove = "$1" ]; then
  2400. dpkg-divert --package smailwrapper --remove --rename \
  2401. --divert /usr/sbin/smail.real /usr/sbin/smail
  2402. fi
  2403. </example>
  2404. <p>
  2405. Do not attempt to divert a file which is vitally important for the
  2406. system's operation - when using <prgn/dpkg-divert/ there is a time,
  2407. after it has been diverted but before <prgn/dpkg/ has installed the
  2408. new version, when the file does not exist.
  2409. <chapt id="sharedlibs">Shared libraries
  2410. <p>
  2411. Packages containing shared libraries must be constructed with a little
  2412. care to make sure that the shared library is always available. This
  2413. is especially important for packages whose shared libraries are
  2414. vitally important, such as the libc.
  2415. <p>
  2416. Firstly, your package should install the shared libraries under their
  2417. normal names. For example, the <prgn/libgdbm1/ package should install
  2418. <tt/libgdbm.so.1.7.3/ as <tt>/usr/lib/libgdbm.so.1.7.3</tt>. The
  2419. files should not be renamed or relinked by any prerm or postrm
  2420. scripts; <prgn/dpkg/ will take care of renaming things safely without
  2421. affecting running programs, and attempts to interfere with this are
  2422. likely to lead to problems.
  2423. <p>
  2424. Secondly, your package should include the symlink that <prgn/ldconfig/
  2425. would create for the shared libraries. For example, the
  2426. <prgn/libgdbm1/ package should include a symlink from
  2427. <tt>/usr/lib/libgdbm.so.1</tt> to <tt/libgdbm.so.1.7.3/. This is
  2428. needed so that <prgn/ld.so/ can find the library in between the time
  2429. <prgn/dpkg/ installs it and <prgn/ldconfig/ is run in the
  2430. <prgn/postinst/ script. Futhermore, and <em/this is very important/,
  2431. the library must be placed before the symlink pointing to it in the
  2432. <tt/.deb/ file. This is so that by the time <prgn/dpkg/ comes to
  2433. install the symlink (overwriting the previous symlink pointing at an
  2434. older version of the library) the new shared library is already in
  2435. place. Currently the way to ensure the ordering is done properly is
  2436. to install the library in the appropriate <tt>debian/tmp/.../lib</>
  2437. directory before creating the symlink, by putting the commands in the
  2438. <tt>debian/rules</> in the appropriate order.
  2439. <p>
  2440. If you do the above your package does not need to call <prgn/ldconfig/
  2441. in its maintainer scripts. It is especially important not to call
  2442. <prgn/ldconfig/ in the postrm or preinst scripts in the case where the
  2443. package is being upgraded (see the programmer's manual), as
  2444. <prgn/ldconfig/ will see the temporary names that <prgn/dpkg/ uses for the
  2445. files while it is installing them and will make the shared library
  2446. links point to them, just before <prgn/dpkg/ continues the installation
  2447. and removes the links!
  2448. <chapt id="sysvinit">Configuration of <prgn/init/
  2449. <p>
  2450. <sect>Introduction to the <tt/init.d/ scheme
  2451. <p>
  2452. The <tt>/etc/init.d</> directory contains the scripts executed by
  2453. <prgn/init/ when init state (or `runlevel') is changed (see <manref
  2454. name=init section=8>).
  2455. <p>
  2456. These scripts are be referenced by symbolic links in the
  2457. <tt>/etc/rc<var/n/.d</> directories. When changing runlevels, init
  2458. looks in the directory <tt>/etc/rc<var/n/.d</> for the scripts it
  2459. should execute, where <var/n/ is the runlevel that is being changed
  2460. to.
  2461. <p>
  2462. The names of the links all have the form <tt/S<var/mm/<var/script// or
  2463. <tt/K<var/mm/<var/script// where <var/mm/ is a two-digit number and
  2464. <var/script/ is the name of the script (this should be the same as the
  2465. name of the actual script in <tt>/etc/init.d</>.
  2466. When <prgn/init/ changes runlevel first the targets of the links whose
  2467. names starting with a <tt/K/ are executed, each with the single
  2468. argument <tt/stop/, followed by the scripts prefixed with an <tt/S/,
  2469. each with the single argument <tt/start/. The <tt/K/ links are
  2470. responsible for killing services and the <tt/S/ link for starting
  2471. services upon entering the runlevel.
  2472. <p>
  2473. For example, if we are changing from runlevel 2 to runlevel 3, init
  2474. will first execute all of the <tt/K/ prefixed scripts it finds in
  2475. <tt>/etc/rc3.d</>, and then all of the <tt/S/ prefixed scripts. The
  2476. links starting with <tt/K/ will cause the referred-to file to be
  2477. executed with an argument of <tt/stop/, and the <tt/S/ links with an
  2478. argument of <tt/start/.
  2479. <p>
  2480. The two-digit number <var/mm/ is used to decide which order to start
  2481. and stop things in - low-numbered links have their scripts run first.
  2482. For example, the <tt/K20/ scripts will be executed before the <tt/K30/
  2483. scripts. This is used when a certain service must be started before
  2484. another. For example, the name server <prgn/bind/ might need to be
  2485. started before the news server <prgn/inn/ so that <prgn/inn/ can set
  2486. up its access lists. In this case, the script that starts <prgn/bind/
  2487. should have a lower number than the script that starts <prgn/inn/ so
  2488. that it runs first:
  2489. <example>
  2490. /etc/rc2.d/S17bind
  2491. /etc/rc2.d/S70inn
  2492. </example>
  2493. <sect>Writing <tt/init.d/ scripts
  2494. <p>
  2495. Packages can and should place scripts in <tt>/etc/init.d</> to start
  2496. or stop services at boot time or during a change of runlevel. These
  2497. scripts should be named <tt>/etc/init.d/<var/package/</>, and they
  2498. should accept one argument, saying what to do: <tt/start/, meaning to
  2499. starts the service, or <tt/stop/, to stop the service. Optionally
  2500. they can support <tt/reload/ which causes the configuration to be
  2501. reloaded.
  2502. <p>
  2503. The <tt/init.d/ scripts should ensure that they will behave sensibly
  2504. if invoked with <tt/start/ when the service is already running, or
  2505. with <tt/stop/ when it isn't, and that they don't kill
  2506. unfortunately-named user processes. The best way to achieve this is
  2507. usually to use <prgn/start-stop-daemon/.
  2508. <p>
  2509. These scripts should not fail obscurely when the configuration files
  2510. remain but the package has been removed, as the default in <prgn/dpkg/
  2511. is to leave configuration files on the system after the package has
  2512. been removed. Only when it is executed with the <tt/--purge/ option
  2513. will dpkg remove configuration files. Therefore, you should include a
  2514. <tt/test/ statement at the top of the script, like this:
  2515. <example>
  2516. test -f <var/program-executed-later-in-script/ || exit 0
  2517. </example>
  2518. <sect>Managing the <tt/rc<var/n/.d/ links - <prgn/update-rc.d/
  2519. <p>
  2520. A program is provided, <prgn/update-rc.d/, to make it easier for
  2521. package maintainers to arrange for the proper creation and removal of
  2522. <tt>/etc/rc<var/n/.d</> symbolic links from their postinst and postrm
  2523. scripts.
  2524. <p>
  2525. You should use this script to make changes to <tt>/etc/rc<var/n/.d</>
  2526. and <em/never/ include any <tt>/etc/rc<var/n/.d</> symbolic links in
  2527. the actual archive.
  2528. <p>
  2529. By default <prgn/update-rc.d/ will start services in each of the
  2530. multi-user state runlevels (2, 3, 4, and 5) and stop them in the halt
  2531. runlevel (0), the single-user runlevel (1) and the reboot runlevel
  2532. (6). The system administrator will have the opportunity to customize
  2533. runlevels by simply adding, moving, or removing the symbolic links in
  2534. <tt>/etc/rc<var/n/.d</>.
  2535. <p>
  2536. To get the default behaviour for your package, put in your postinst
  2537. script
  2538. <example>
  2539. update-rc.d <var/package/ default &gt;/dev/null
  2540. </example>
  2541. and in your postrm
  2542. <example>
  2543. if [ purge = "$1" ]; then
  2544. update-rc.d <var/package/ remove &gt;/dev/null
  2545. fi
  2546. </example>
  2547. <p>
  2548. This will use a default sequence number of 20. If it does not matter
  2549. when or in which order the script is run, use this default. If it
  2550. does, then you should talk to the maintainer of the <prgn/sysvinit/
  2551. package or post to <tt>debian-devel</>, and they will help you choose
  2552. a number.
  2553. <p>
  2554. For more information about using <tt/update-rc.d/, please consult its
  2555. manpage <manref name=update-rc.d section=8>.
  2556. <sect>Boot-time initialisation - <tt/rc.boot/
  2557. <p>
  2558. There is another directory, <tt>/etc/rc.boot</>, which contains
  2559. scripts which are run once per machine boot. This facility is
  2560. provided for initialisation of hardware devices, cleaning up of
  2561. leftover files, and so forth.
  2562. <p>
  2563. For example, the <prgn/kbd/ package provides a script here for
  2564. initialising the keyboard layout and console font and mode.
  2565. <p>
  2566. The files in <tt>/etc/rc.boot</> should <em/not/ be links into
  2567. <tt>/etc/init.d</> - they should be the scripts themselves.
  2568. <p>
  2569. <tt/rc.boot/ should <em/not/ be used for starting general-purpose
  2570. daemons and similar activities. This should be done using the
  2571. <tt/rc<var/n/.d/ scheme, above, so that the services can be started
  2572. and stopped cleanly when the runlevel changes or the machine is to be
  2573. shut down or rebooted.
  2574. <sect>Notes
  2575. <p>
  2576. <em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in
  2577. the <tt/.deb/ filesystem archive! <em/This will cause problems!/
  2578. You should create them with <prgn/update-rc.d/, as above.
  2579. <p>
  2580. <em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in
  2581. <prgn/dpkg/'s conffiles list! <em/This will cause problems!/
  2582. <em/Do/, however, include the <tt>/etc/init.d</> scripts in conffiles.
  2583. <sect>Example
  2584. <p>
  2585. The <prgn/bind/ DNS (nameserver) package wants to make sure that the
  2586. nameserver is running in multiuser runlevels, and is properly shut
  2587. down with the system. It puts a script in <tt>/etc/init.d</>, naming
  2588. the script appropriately <tt/bind/. As you can see, the script
  2589. interprets the argument <tt/reload/ to send the nameserver a <tt/HUP/
  2590. signal (causing it to reload its configuration); this way the user can
  2591. say <tt>/etc/init.d/bind reload</> to reload the nameserver.
  2592. <p>
  2593. <example>
  2594. #!/bin/sh
  2595. # Original version by Robert Leslie &lt;rob@mars.org&gt;, edited by iwj
  2596. test -x /usr/sbin/named || exit 0
  2597. case "$1" in
  2598. start)
  2599. test -f /etc/named.boot -a -f /var/named/boot.options || exit 0
  2600. start-stop-daemon --start --verbose --exec /usr/sbin/named
  2601. ;;
  2602. stop)
  2603. start-stop-daemon --stop --verbose \
  2604. --pidfile /var/run/named.pid --exec /usr/sbin/named
  2605. ;;
  2606. reload)
  2607. start-stop-daemon --stop --signal 1 --verbose \
  2608. --pidfile /var/run/named.pid --exec /usr/sbin/named
  2609. ;;
  2610. *)
  2611. echo "Usage: /etc/init.d/bind {start|stop|reload}" >&2
  2612. exit 1
  2613. ;;
  2614. esac
  2615. exit 0
  2616. </example>
  2617. <p>
  2618. Another example on which to base your <tt>/etc/init.d</> scripts is in
  2619. <tt>/etc/init.d/skeleton</>.
  2620. <p>
  2621. If this package is happy with the default setup from
  2622. <prgn/update-rc.d/, namely an ordering number of 20 and having named
  2623. running in all runlevels, it can say in its postinst:
  2624. <example>
  2625. update-rc.d bind default >/dev/null
  2626. </example>
  2627. And in its postrm, to remove the links when the package is purged:
  2628. <example>
  2629. if [ purge = "$1" ]; then
  2630. update-rc.d acct remove >/dev/null
  2631. fi
  2632. </example>
  2633. <chapt id="methif"><prgn/dselect/'s interface to its installation methods
  2634. <p>
  2635. <prgn/dselect/ calls scripts from its installation methods when it
  2636. needs to actually access data from the distribution. The core program
  2637. <prgn/dselect/ itself just calls these scripts and provides the
  2638. package and access method selection interfaces. The installation
  2639. methods are responsible for invoking <prgn/dpkg/ as appropriate.
  2640. <p>
  2641. Each installation method has three scripts:
  2642. <list compact>
  2643. <item>Setup installation parameters.
  2644. <item>Update list of available packages.
  2645. <item>Install.
  2646. </list>
  2647. <p>
  2648. <prgn/dselect/ searches for methods in <tt>/usr/lib/dpkg/methods</>
  2649. and <tt>/usr/local/lib/dpkg/methods</>.
  2650. <sect>Functions of the method scripts
  2651. <p>
  2652. The setup script is run just after the user has chosen an installation
  2653. method. It should prompt the user for parameters like the site to
  2654. NFS-mount or FTP from, the directory to use, or the directory or
  2655. filesystem where the <tt/.deb/ files can be found, or the tape or
  2656. floppy device to install from. It should store the responses under
  2657. <tt>/var/lib/dpkg/methods</> - see below. If no available
  2658. packages list is available it should perhaps offer to scan the
  2659. available packages.
  2660. <p>
  2661. The update script should obtain a list of available packages if
  2662. possible, and run <tt/dpkg --update-avail/, <tt/dpkg --merge-avail/
  2663. and/or <tt/dpkg --forget-old-unavail/ to load it into <prgn/dpkg/ and
  2664. <prgn/dselect/'s database of available packages. If no packages list
  2665. was available and the user was offered and accepted the option of
  2666. scanning the actual files available this scan should be done here,
  2667. using <tt/dpkg --record-avail/.
  2668. <p>
  2669. The install script should feed all the available <tt/.deb/ files to
  2670. <tt/dpkg --iGOEB/ (this is equivalent to <tt/dpkg --install
  2671. --refuse-downgrade --selected-only --skip-same-version
  2672. --auto-deconfigure/). The <tt/-R/ (<tt/--recursive/) option for
  2673. traversing subdirectories may also be useful here).
  2674. <p>
  2675. If any of these scripts needs to display a message for the user, it
  2676. should wait for the user to hit `return' before exiting so that
  2677. dselect doesn't immediately rewrite the screen.
  2678. <p>
  2679. If a method script succeeds (returns a zero exit status)
  2680. <prgn/dselect/ will return immediately to the main menu, with the
  2681. `next' option highlighted ready for the user to select it. If it
  2682. fails <prgn/dselect/ will display a message and wait for the user to
  2683. hit return.
  2684. <sect>Location and arguments of the method scripts
  2685. <p>
  2686. A set of scripts (henceforth known as a group) may provide several
  2687. methods on the `main menu' with different behaviour. For example,
  2688. there might be a generic get-packages-by-FTP group which might provide
  2689. methods in the main menu for installation directly from one of the
  2690. Debian mirror sites as well as for installation from a user-specified
  2691. site.
  2692. <p>
  2693. Each group of methods implemented by the same set of scripts should
  2694. have a subdirectory <tt>/usr/lib/dpkg/methods/<var/group/</> or
  2695. <tt>/usr/local/lib/dpkg/methods/<var/group/</>, containing:
  2696. <taglist compact>
  2697. <tag><tt/names/
  2698. <item>a list of user-visible methods provided by these scripts.
  2699. <tag><tt/setup/
  2700. <tag><tt/update/
  2701. <tag><tt/install/
  2702. <item>executable programs, the scripts themselves.
  2703. <tag><tt/desc.<var/option//
  2704. <item>description file.
  2705. </taglist>
  2706. <p>
  2707. <tt/names/ will be formatted as a list of lines, each containing:
  2708. <example>
  2709. <var/sequence/ <var/method/ <var/summary/
  2710. </example>
  2711. <p>
  2712. <var/sequence/ is a two-digit number that will be used much like
  2713. <tt/rc.d/ prefixes to control the order in the main menu. If in doubt
  2714. use 50.
  2715. <p>
  2716. <var/method/ is a name which is displayed by <prgn/dselect/ as the
  2717. name of the method, and which will be passed to <tt/setup/,
  2718. <tt/update/ and <tt/unpack/ as their first argument.
  2719. <p>
  2720. <var/summary/ is the brief description string for <prgn/dselect/'s menu.
  2721. <p>
  2722. Each of the three scripts gets the same three arguments: <var/vardir/,
  2723. <var/group/ and <var/method/. <var/vardir/ is the base directory for
  2724. storing <prgn/dpkg/ and <prgn/dselect/'s state, usually
  2725. <tt>/var/lib/dpkg</>; this is passed in so that the <tt/--admindir/
  2726. option to <prgn/dselect/ is honoured).
  2727. <p>
  2728. Each option may have an extended description in
  2729. <tt/desc.<var/option//. This should be formatted like the extended
  2730. description part of a <tt/Description/ field entry <em/shifted one
  2731. character to the left/.
  2732. <p>
  2733. <tt><var/vardir//methods</> will exist, and a method group may use a
  2734. <tt><var/vardir//methods/<var/group/</> directory to store its state.
  2735. <p>
  2736. The group name and method name must follow the rules for C identifiers.
  2737. </book>